head	1.27;
access;
symbols;
locks; strict;
comment	@# @;
expand	@o@;


1.27
date	2000.07.27.22.55.59;	author kfogel;	state dead;
branches;
next	1.26;

1.26
date	2000.07.27.21.05.36;	author kfogel;	state Exp;
branches;
next	1.25;

1.25
date	2000.07.27.20.42.32;	author kfogel;	state Exp;
branches;
next	1.24;

1.24
date	2000.07.17.23.46.19;	author kfogel;	state Exp;
branches;
next	1.23;

1.23
date	2000.07.17.18.55.18;	author kfogel;	state Exp;
branches;
next	1.22;

1.22
date	2000.07.07.00.22.33;	author kfogel;	state Exp;
branches;
next	1.21;

1.21
date	2000.07.06.23.57.53;	author kfogel;	state Exp;
branches;
next	1.20;

1.20
date	2000.07.04.23.11.41;	author kfogel;	state Exp;
branches;
next	1.19;

1.19
date	2000.07.04.01.24.19;	author kfogel;	state Exp;
branches;
next	1.18;

1.18
date	2000.06.30.00.14.25;	author kfogel;	state Exp;
branches;
next	1.17;

1.17
date	2000.06.23.20.01.12;	author kfogel;	state Exp;
branches;
next	1.16;

1.16
date	2000.06.22.18.29.45;	author kfogel;	state Exp;
branches;
next	1.15;

1.15
date	2000.06.17.00.04.22;	author kfogel;	state Exp;
branches;
next	1.14;

1.14
date	2000.06.17.00.02.16;	author kfogel;	state Exp;
branches;
next	1.13;

1.13
date	2000.06.16.21.43.35;	author kfogel;	state Exp;
branches;
next	1.12;

1.12
date	2000.06.15.19.51.36;	author kfogel;	state Exp;
branches;
next	1.11;

1.11
date	2000.06.13.23.53.28;	author kfogel;	state Exp;
branches;
next	1.10;

1.10
date	2000.06.10.21.44.00;	author kfogel;	state Exp;
branches;
next	1.9;

1.9
date	2000.06.10.18.22.51;	author kfogel;	state Exp;
branches;
next	1.8;

1.8
date	2000.06.10.18.18.28;	author kfogel;	state Exp;
branches;
next	1.7;

1.7
date	2000.06.10.18.10.27;	author kfogel;	state Exp;
branches;
next	1.6;

1.6
date	2000.06.09.22.50.42;	author kfogel;	state Exp;
branches;
next	1.5;

1.5
date	2000.06.09.21.33.08;	author kfogel;	state Exp;
branches;
next	1.4;

1.4
date	2000.06.09.21.07.50;	author kfogel;	state Exp;
branches;
next	1.3;

1.3
date	2000.06.09.20.46.58;	author kfogel;	state Exp;
branches;
next	1.2;

1.2
date	2000.04.10.23.00.50;	author manoj;	state Exp;
branches;
next	1.1;

1.1
date	2000.02.02.05.39.56;	author jrobbins;	state Exp;
branches;
next	;


desc
@@


1.27
log
@moved to releng/rpm/cvs/SOURCES/cvs-tigris.patch
@
text
@diff --exclude=CVS -crN ../pristine-ccvs/config.h.in ./config.h.in
*** ./config.h.in	Mon Jul 17 10:56:20 2000
--- ./config.h.in	Thu Jul 27 15:36:53 2000
***************
*** 91,96 ****
--- 91,99 ----
  /* Define if you want to use the password authenticated server.  */
  #undef AUTH_SERVER_SUPPORT
  
+ /* Define if you want MySQL support for password authentication */
+ #undef MYSQL_SUPPORT
+ 
  /* Define if you want encryption support.  */
  #undef ENCRYPTION
  
diff --exclude=CVS -crN ../pristine-ccvs/configure ./configure
*** ./configure	Mon Jul 17 10:56:20 2000
--- ./configure	Thu Jul 27 15:37:35 2000
***************
*** 23,28 ****
--- 23,32 ----
  ac_help="$ac_help
    --enable-server         include code for running as a server (default)
    --disable-server        don't include server code"
+ ac_help="$ac_help
+   --enable-mysql          enable MySQL support"
+ ac_help="$ac_help
+   --with-mysql=DIR      Specify the MySQL installation directory.  Default:  /usr/local"
  
  # Initialize some variables set by options.
  # The variables have the same names as the options, with
***************
*** 539,545 ****
  # Extract the first word of "cvs", so it can be a program name with args.
  set dummy cvs; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:543: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_path_CVS'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 543,549 ----
  # Extract the first word of "cvs", so it can be a program name with args.
  set dummy cvs; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:547: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_path_CVS'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
***************
*** 583,589 ****
  # Extract the first word of "$ac_prog", so it can be a program name with args.
  set dummy $ac_prog; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:587: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 587,593 ----
  # Extract the first word of "$ac_prog", so it can be a program name with args.
  set dummy $ac_prog; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:591: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
***************
*** 615,621 ****
  # Extract the first word of "gcc", so it can be a program name with args.
  set dummy gcc; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:619: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 619,625 ----
  # Extract the first word of "gcc", so it can be a program name with args.
  set dummy gcc; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:623: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
***************
*** 645,651 ****
    # Extract the first word of "cc", so it can be a program name with args.
  set dummy cc; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:649: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 649,655 ----
    # Extract the first word of "cc", so it can be a program name with args.
  set dummy cc; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:653: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
***************
*** 696,702 ****
        # Extract the first word of "cl", so it can be a program name with args.
  set dummy cl; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:700: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 700,706 ----
        # Extract the first word of "cl", so it can be a program name with args.
  set dummy cl; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:704: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
***************
*** 728,734 ****
  fi
  
  echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
! echo "configure:732: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
  
  ac_ext=c
  # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
--- 732,738 ----
  fi
  
  echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
! echo "configure:736: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
  
  ac_ext=c
  # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
***************
*** 739,750 ****
  
  cat > conftest.$ac_ext << EOF
  
! #line 743 "configure"
  #include "confdefs.h"
  
  main(){return(0);}
  EOF
! if { (eval echo configure:748: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    ac_cv_prog_cc_works=yes
    # If we can't run a trivial program, we are probably using a cross compiler.
    if (./conftest; exit) 2>/dev/null; then
--- 743,754 ----
  
  cat > conftest.$ac_ext << EOF
  
! #line 747 "configure"
  #include "confdefs.h"
  
  main(){return(0);}
  EOF
! if { (eval echo configure:752: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    ac_cv_prog_cc_works=yes
    # If we can't run a trivial program, we are probably using a cross compiler.
    if (./conftest; exit) 2>/dev/null; then
***************
*** 770,781 ****
    { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
  fi
  echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
! echo "configure:774: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
  echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
  cross_compiling=$ac_cv_prog_cc_cross
  
  echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
! echo "configure:779: checking whether we are using GNU C" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 774,785 ----
    { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
  fi
  echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
! echo "configure:778: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
  echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
  cross_compiling=$ac_cv_prog_cc_cross
  
  echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
! echo "configure:783: checking whether we are using GNU C" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
***************
*** 784,790 ****
    yes;
  #endif
  EOF
! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:788: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
    ac_cv_prog_gcc=yes
  else
    ac_cv_prog_gcc=no
--- 788,794 ----
    yes;
  #endif
  EOF
! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:792: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
    ac_cv_prog_gcc=yes
  else
    ac_cv_prog_gcc=no
***************
*** 803,809 ****
  ac_save_CFLAGS="$CFLAGS"
  CFLAGS=
  echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
! echo "configure:807: checking whether ${CC-cc} accepts -g" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 807,813 ----
  ac_save_CFLAGS="$CFLAGS"
  CFLAGS=
  echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
! echo "configure:811: checking whether ${CC-cc} accepts -g" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
***************
*** 865,871 ****
  # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
  # ./install, which can be erroneously created by make from ./install.sh.
  echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
! echo "configure:869: checking for a BSD compatible install" >&5
  if test -z "$INSTALL"; then
  if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
--- 869,875 ----
  # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
  # ./install, which can be erroneously created by make from ./install.sh.
  echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
! echo "configure:873: checking for a BSD compatible install" >&5
  if test -z "$INSTALL"; then
  if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
***************
*** 918,924 ****
  test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
  
  echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
! echo "configure:922: checking whether ${MAKE-make} sets \${MAKE}" >&5
  set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
--- 922,928 ----
  test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
  
  echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
! echo "configure:926: checking whether ${MAKE-make} sets \${MAKE}" >&5
  set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
***************
*** 947,953 ****
  # Extract the first word of "ranlib", so it can be a program name with args.
  set dummy ranlib; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:951: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 951,957 ----
  # Extract the first word of "ranlib", so it can be a program name with args.
  set dummy ranlib; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:955: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
***************
*** 979,985 ****
  # Extract the first word of "$ac_prog", so it can be a program name with args.
  set dummy $ac_prog; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:983: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 983,989 ----
  # Extract the first word of "$ac_prog", so it can be a program name with args.
  set dummy $ac_prog; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:987: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
***************
*** 1013,1019 ****
  # Extract the first word of "perl", so it can be a program name with args.
  set dummy perl; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1017: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_path_perl_path'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 1017,1023 ----
  # Extract the first word of "perl", so it can be a program name with args.
  set dummy perl; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1021: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_path_perl_path'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
***************
*** 1049,1055 ****
  # Extract the first word of "csh", so it can be a program name with args.
  set dummy csh; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1053: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_path_csh_path'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 1053,1059 ----
  # Extract the first word of "csh", so it can be a program name with args.
  set dummy csh; ac_word=$2
  echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
! echo "configure:1057: checking for $ac_word" >&5
  if eval "test \"`echo '$''{'ac_cv_path_csh_path'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
***************
*** 1086,1092 ****
  # Pull the hash mark out of the macro call to avoid m4 problems.
  ac_msg="whether #! works in shell scripts"
  echo $ac_n "checking $ac_msg""... $ac_c" 1>&6
! echo "configure:1090: checking $ac_msg" >&5
  if eval "test \"`echo '$''{'ac_cv_sys_interpreter'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 1090,1096 ----
  # Pull the hash mark out of the macro call to avoid m4 problems.
  ac_msg="whether #! works in shell scripts"
  echo $ac_n "checking $ac_msg""... $ac_c" 1>&6
! echo "configure:1094: checking $ac_msg" >&5
  if eval "test \"`echo '$''{'ac_cv_sys_interpreter'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
***************
*** 1113,1119 ****
  fi
  
  echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
! echo "configure:1117: checking how to run the C preprocessor" >&5
  # On Suns, sometimes $CPP names a directory.
  if test -n "$CPP" && test -d "$CPP"; then
    CPP=
--- 1117,1123 ----
  fi
  
  echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
! echo "configure:1121: checking how to run the C preprocessor" >&5
  # On Suns, sometimes $CPP names a directory.
  if test -n "$CPP" && test -d "$CPP"; then
    CPP=
***************
*** 1128,1140 ****
    # On the NeXT, cc -E runs the code through the compiler's parser,
    # not just through cpp.
    cat > conftest.$ac_ext <<EOF
! #line 1132 "configure"
  #include "confdefs.h"
  #include <assert.h>
  Syntax Error
  EOF
  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:1138: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  if test -z "$ac_err"; then
    :
--- 1132,1144 ----
    # On the NeXT, cc -E runs the code through the compiler's parser,
    # not just through cpp.
    cat > conftest.$ac_ext <<EOF
! #line 1136 "configure"
  #include "confdefs.h"
  #include <assert.h>
  Syntax Error
  EOF
  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:1142: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  if test -z "$ac_err"; then
    :
***************
*** 1145,1157 ****
    rm -rf conftest*
    CPP="${CC-cc} -E -traditional-cpp"
    cat > conftest.$ac_ext <<EOF
! #line 1149 "configure"
  #include "confdefs.h"
  #include <assert.h>
  Syntax Error
  EOF
  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:1155: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  if test -z "$ac_err"; then
    :
--- 1149,1161 ----
    rm -rf conftest*
    CPP="${CC-cc} -E -traditional-cpp"
    cat > conftest.$ac_ext <<EOF
! #line 1153 "configure"
  #include "confdefs.h"
  #include <assert.h>
  Syntax Error
  EOF
  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:1159: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  if test -z "$ac_err"; then
    :
***************
*** 1162,1174 ****
    rm -rf conftest*
    CPP="${CC-cc} -nologo -E"
    cat > conftest.$ac_ext <<EOF
! #line 1166 "configure"
  #include "confdefs.h"
  #include <assert.h>
  Syntax Error
  EOF
  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:1172: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  if test -z "$ac_err"; then
    :
--- 1166,1178 ----
    rm -rf conftest*
    CPP="${CC-cc} -nologo -E"
    cat > conftest.$ac_ext <<EOF
! #line 1170 "configure"
  #include "confdefs.h"
  #include <assert.h>
  Syntax Error
  EOF
  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:1176: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  if test -z "$ac_err"; then
    :
***************
*** 1193,1201 ****
  echo "$ac_t""$CPP" 1>&6
  
  echo $ac_n "checking for AIX""... $ac_c" 1>&6
! echo "configure:1197: checking for AIX" >&5
  cat > conftest.$ac_ext <<EOF
! #line 1199 "configure"
  #include "confdefs.h"
  #ifdef _AIX
    yes
--- 1197,1205 ----
  echo "$ac_t""$CPP" 1>&6
  
  echo $ac_n "checking for AIX""... $ac_c" 1>&6
! echo "configure:1201: checking for AIX" >&5
  cat > conftest.$ac_ext <<EOF
! #line 1203 "configure"
  #include "confdefs.h"
  #ifdef _AIX
    yes
***************
*** 1218,1234 ****
  
  ac_safe=`echo "minix/config.h" | sed 'y%./+-%__p_%'`
  echo $ac_n "checking for minix/config.h""... $ac_c" 1>&6
! echo "configure:1222: checking for minix/config.h" >&5
  if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1227 "configure"
  #include "confdefs.h"
  #include <minix/config.h>
  EOF
  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:1232: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  if test -z "$ac_err"; then
    rm -rf conftest*
--- 1222,1238 ----
  
  ac_safe=`echo "minix/config.h" | sed 'y%./+-%__p_%'`
  echo $ac_n "checking for minix/config.h""... $ac_c" 1>&6
! echo "configure:1226: checking for minix/config.h" >&5
  if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1231 "configure"
  #include "confdefs.h"
  #include <minix/config.h>
  EOF
  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:1236: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  if test -z "$ac_err"; then
    rm -rf conftest*
***************
*** 1266,1272 ****
  fi
  
  echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
! echo "configure:1270: checking for POSIXized ISC" >&5
  if test -d /etc/conf/kconfig.d &&
    grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
  then
--- 1270,1276 ----
  fi
  
  echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
! echo "configure:1274: checking for POSIXized ISC" >&5
  if test -d /etc/conf/kconfig.d &&
    grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
  then
***************
*** 1296,1307 ****
  do
  ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
  echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
! echo "configure:1300: checking for $ac_hdr that defines DIR" >&5
  if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1305 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <$ac_hdr>
--- 1300,1311 ----
  do
  ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
  echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
! echo "configure:1304: checking for $ac_hdr that defines DIR" >&5
  if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1309 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <$ac_hdr>
***************
*** 1309,1315 ****
  DIR *dirp = 0;
  ; return 0; }
  EOF
! if { (eval echo configure:1313: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    rm -rf conftest*
    eval "ac_cv_header_dirent_$ac_safe=yes"
  else
--- 1313,1319 ----
  DIR *dirp = 0;
  ; return 0; }
  EOF
! if { (eval echo configure:1317: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    rm -rf conftest*
    eval "ac_cv_header_dirent_$ac_safe=yes"
  else
***************
*** 1334,1340 ****
  # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
  if test $ac_header_dirent = dirent.h; then
  echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
! echo "configure:1338: checking for opendir in -ldir" >&5
  ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
--- 1338,1344 ----
  # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
  if test $ac_header_dirent = dirent.h; then
  echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
! echo "configure:1342: checking for opendir in -ldir" >&5
  ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
***************
*** 1342,1348 ****
    ac_save_LIBS="$LIBS"
  LIBS="-ldir  $LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 1346 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 1346,1352 ----
    ac_save_LIBS="$LIBS"
  LIBS="-ldir  $LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 1350 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 1353,1359 ****
  opendir()
  ; return 0; }
  EOF
! if { (eval echo configure:1357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_lib_$ac_lib_var=yes"
  else
--- 1357,1363 ----
  opendir()
  ; return 0; }
  EOF
! if { (eval echo configure:1361: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_lib_$ac_lib_var=yes"
  else
***************
*** 1375,1381 ****
  
  else
  echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
! echo "configure:1379: checking for opendir in -lx" >&5
  ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
--- 1379,1385 ----
  
  else
  echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
! echo "configure:1383: checking for opendir in -lx" >&5
  ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
***************
*** 1383,1389 ****
    ac_save_LIBS="$LIBS"
  LIBS="-lx  $LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 1387 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 1387,1393 ----
    ac_save_LIBS="$LIBS"
  LIBS="-lx  $LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 1391 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 1394,1400 ****
  opendir()
  ; return 0; }
  EOF
! if { (eval echo configure:1398: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_lib_$ac_lib_var=yes"
  else
--- 1398,1404 ----
  opendir()
  ; return 0; }
  EOF
! if { (eval echo configure:1402: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_lib_$ac_lib_var=yes"
  else
***************
*** 1417,1428 ****
  fi
  
  echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
! echo "configure:1421: checking for ANSI C header files" >&5
  if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1426 "configure"
  #include "confdefs.h"
  #include <stdlib.h>
  #include <stdarg.h>
--- 1421,1432 ----
  fi
  
  echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
! echo "configure:1425: checking for ANSI C header files" >&5
  if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1430 "configure"
  #include "confdefs.h"
  #include <stdlib.h>
  #include <stdarg.h>
***************
*** 1430,1436 ****
  #include <float.h>
  EOF
  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:1434: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  if test -z "$ac_err"; then
    rm -rf conftest*
--- 1434,1440 ----
  #include <float.h>
  EOF
  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:1438: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  if test -z "$ac_err"; then
    rm -rf conftest*
***************
*** 1447,1453 ****
  if test $ac_cv_header_stdc = yes; then
    # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
  cat > conftest.$ac_ext <<EOF
! #line 1451 "configure"
  #include "confdefs.h"
  #include <string.h>
  EOF
--- 1451,1457 ----
  if test $ac_cv_header_stdc = yes; then
    # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
  cat > conftest.$ac_ext <<EOF
! #line 1455 "configure"
  #include "confdefs.h"
  #include <string.h>
  EOF
***************
*** 1465,1471 ****
  if test $ac_cv_header_stdc = yes; then
    # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
  cat > conftest.$ac_ext <<EOF
! #line 1469 "configure"
  #include "confdefs.h"
  #include <stdlib.h>
  EOF
--- 1469,1475 ----
  if test $ac_cv_header_stdc = yes; then
    # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
  cat > conftest.$ac_ext <<EOF
! #line 1473 "configure"
  #include "confdefs.h"
  #include <stdlib.h>
  EOF
***************
*** 1486,1492 ****
    :
  else
    cat > conftest.$ac_ext <<EOF
! #line 1490 "configure"
  #include "confdefs.h"
  #include <ctype.h>
  #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
--- 1490,1496 ----
    :
  else
    cat > conftest.$ac_ext <<EOF
! #line 1494 "configure"
  #include "confdefs.h"
  #include <ctype.h>
  #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
***************
*** 1497,1503 ****
  exit (0); }
  
  EOF
! if { (eval echo configure:1501: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  then
    :
  else
--- 1501,1507 ----
  exit (0); }
  
  EOF
! if { (eval echo configure:1505: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  then
    :
  else
***************
*** 1521,1532 ****
  fi
  
  echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
! echo "configure:1525: checking for sys/wait.h that is POSIX.1 compatible" >&5
  if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1530 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <sys/wait.h>
--- 1525,1536 ----
  fi
  
  echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
! echo "configure:1529: checking for sys/wait.h that is POSIX.1 compatible" >&5
  if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1534 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <sys/wait.h>
***************
*** 1542,1548 ****
  s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
  ; return 0; }
  EOF
! if { (eval echo configure:1546: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    rm -rf conftest*
    ac_cv_header_sys_wait_h=yes
  else
--- 1546,1552 ----
  s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
  ; return 0; }
  EOF
! if { (eval echo configure:1550: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    rm -rf conftest*
    ac_cv_header_sys_wait_h=yes
  else
***************
*** 1569,1585 ****
  do
  ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
  echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
! echo "configure:1573: checking for $ac_hdr" >&5
  if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1578 "configure"
  #include "confdefs.h"
  #include <$ac_hdr>
  EOF
  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:1583: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  if test -z "$ac_err"; then
    rm -rf conftest*
--- 1573,1589 ----
  do
  ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
  echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
! echo "configure:1577: checking for $ac_hdr" >&5
  if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1582 "configure"
  #include "confdefs.h"
  #include <$ac_hdr>
  EOF
  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:1587: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  if test -z "$ac_err"; then
    rm -rf conftest*
***************
*** 1606,1617 ****
  done
  
  echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6
! echo "configure:1610: checking whether stat file-mode macros are broken" >&5
  if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1615 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <sys/stat.h>
--- 1610,1621 ----
  done
  
  echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6
! echo "configure:1614: checking whether stat file-mode macros are broken" >&5
  if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1619 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <sys/stat.h>
***************
*** 1662,1673 ****
  fi
  
  echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
! echo "configure:1666: checking whether time.h and sys/time.h may both be included" >&5
  if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1671 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <sys/time.h>
--- 1666,1677 ----
  fi
  
  echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
! echo "configure:1670: checking whether time.h and sys/time.h may both be included" >&5
  if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1675 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <sys/time.h>
***************
*** 1676,1682 ****
  struct tm *tp;
  ; return 0; }
  EOF
! if { (eval echo configure:1680: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    rm -rf conftest*
    ac_cv_header_time=yes
  else
--- 1680,1686 ----
  struct tm *tp;
  ; return 0; }
  EOF
! if { (eval echo configure:1684: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    rm -rf conftest*
    ac_cv_header_time=yes
  else
***************
*** 1698,1715 ****
  
  
  echo $ac_n "checking for working const""... $ac_c" 1>&6
! echo "configure:1702: checking for working const" >&5
  if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1707 "configure"
  #include "confdefs.h"
  
  int main() {
  
  /* Ultrix mips cc rejects this.  */
! typedef int charset[2]; const charset x;
  /* SunOS 4.1.1 cc rejects this.  */
  char const *const *ccp;
  char **p;
--- 1702,1719 ----
  
  
  echo $ac_n "checking for working const""... $ac_c" 1>&6
! echo "configure:1706: checking for working const" >&5
  if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1711 "configure"
  #include "confdefs.h"
  
  int main() {
  
  /* Ultrix mips cc rejects this.  */
! typedef int charset[2]; const charset x = {0,0};
  /* SunOS 4.1.1 cc rejects this.  */
  char const *const *ccp;
  char **p;
***************
*** 1752,1758 ****
  
  ; return 0; }
  EOF
! if { (eval echo configure:1756: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    rm -rf conftest*
    ac_cv_c_const=yes
  else
--- 1756,1762 ----
  
  ; return 0; }
  EOF
! if { (eval echo configure:1760: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    rm -rf conftest*
    ac_cv_c_const=yes
  else
***************
*** 1773,1784 ****
  fi
  
  echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
! echo "configure:1777: checking for uid_t in sys/types.h" >&5
  if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1782 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  EOF
--- 1777,1788 ----
  fi
  
  echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
! echo "configure:1781: checking for uid_t in sys/types.h" >&5
  if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1786 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  EOF
***************
*** 1807,1818 ****
  fi
  
  echo $ac_n "checking for mode_t""... $ac_c" 1>&6
! echo "configure:1811: checking for mode_t" >&5
  if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1816 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #if STDC_HEADERS
--- 1811,1822 ----
  fi
  
  echo $ac_n "checking for mode_t""... $ac_c" 1>&6
! echo "configure:1815: checking for mode_t" >&5
  if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1820 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #if STDC_HEADERS
***************
*** 1840,1851 ****
  fi
  
  echo $ac_n "checking for pid_t""... $ac_c" 1>&6
! echo "configure:1844: checking for pid_t" >&5
  if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1849 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #if STDC_HEADERS
--- 1844,1855 ----
  fi
  
  echo $ac_n "checking for pid_t""... $ac_c" 1>&6
! echo "configure:1848: checking for pid_t" >&5
  if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1853 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #if STDC_HEADERS
***************
*** 1873,1884 ****
  fi
  
  echo $ac_n "checking for size_t""... $ac_c" 1>&6
! echo "configure:1877: checking for size_t" >&5
  if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1882 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #if STDC_HEADERS
--- 1877,1888 ----
  fi
  
  echo $ac_n "checking for size_t""... $ac_c" 1>&6
! echo "configure:1881: checking for size_t" >&5
  if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1886 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #if STDC_HEADERS
***************
*** 1906,1917 ****
  fi
  
  echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
! echo "configure:1910: checking return type of signal handlers" >&5
  if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1915 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <signal.h>
--- 1910,1921 ----
  fi
  
  echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
! echo "configure:1914: checking return type of signal handlers" >&5
  if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1919 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <signal.h>
***************
*** 1928,1934 ****
  int i;
  ; return 0; }
  EOF
! if { (eval echo configure:1932: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    rm -rf conftest*
    ac_cv_type_signal=void
  else
--- 1932,1938 ----
  int i;
  ; return 0; }
  EOF
! if { (eval echo configure:1936: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    rm -rf conftest*
    ac_cv_type_signal=void
  else
***************
*** 1948,1959 ****
  
  
  echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6
! echo "configure:1952: checking for st_blksize in struct stat" >&5
  if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1957 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <sys/stat.h>
--- 1952,1963 ----
  
  
  echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6
! echo "configure:1956: checking for st_blksize in struct stat" >&5
  if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1961 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <sys/stat.h>
***************
*** 1961,1967 ****
  struct stat s; s.st_blksize;
  ; return 0; }
  EOF
! if { (eval echo configure:1965: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    rm -rf conftest*
    ac_cv_struct_st_blksize=yes
  else
--- 1965,1971 ----
  struct stat s; s.st_blksize;
  ; return 0; }
  EOF
! if { (eval echo configure:1969: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    rm -rf conftest*
    ac_cv_struct_st_blksize=yes
  else
***************
*** 1982,1993 ****
  fi
  
  echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6
! echo "configure:1986: checking for st_rdev in struct stat" >&5
  if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1991 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <sys/stat.h>
--- 1986,1997 ----
  fi
  
  echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6
! echo "configure:1990: checking for st_rdev in struct stat" >&5
  if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 1995 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <sys/stat.h>
***************
*** 1995,2001 ****
  struct stat s; s.st_rdev;
  ; return 0; }
  EOF
! if { (eval echo configure:1999: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    rm -rf conftest*
    ac_cv_struct_st_rdev=yes
  else
--- 1999,2005 ----
  struct stat s; s.st_rdev;
  ; return 0; }
  EOF
! if { (eval echo configure:2003: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    rm -rf conftest*
    ac_cv_struct_st_rdev=yes
  else
***************
*** 2018,2029 ****
  for ac_func in mkdir rename strstr dup2 strerror valloc waitpid memmove strtoul
  do
  echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:2022: checking for $ac_func" >&5
  if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 2027 "configure"
  #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char $ac_func(); below.  */
--- 2022,2033 ----
  for ac_func in mkdir rename strstr dup2 strerror valloc waitpid memmove strtoul
  do
  echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:2026: checking for $ac_func" >&5
  if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 2031 "configure"
  #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char $ac_func(); below.  */
***************
*** 2046,2052 ****
  
  ; return 0; }
  EOF
! if { (eval echo configure:2050: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_func_$ac_func=yes"
  else
--- 2050,2056 ----
  
  ; return 0; }
  EOF
! if { (eval echo configure:2054: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_func_$ac_func=yes"
  else
***************
*** 2075,2086 ****
  for ac_func in fchmod fsync ftime mktemp putenv vprintf ftruncate timezone getpagesize initgroups fchdir sigaction sigprocmask sigvec sigsetmask sigblock tempnam tzset readlink wait3 mknod
  do
  echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:2079: checking for $ac_func" >&5
  if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 2084 "configure"
  #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char $ac_func(); below.  */
--- 2079,2090 ----
  for ac_func in fchmod fsync ftime mktemp putenv vprintf ftruncate timezone getpagesize initgroups fchdir sigaction sigprocmask sigvec sigsetmask sigblock tempnam tzset readlink wait3 mknod
  do
  echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:2083: checking for $ac_func" >&5
  if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 2088 "configure"
  #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char $ac_func(); below.  */
***************
*** 2103,2109 ****
  
  ; return 0; }
  EOF
! if { (eval echo configure:2107: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_func_$ac_func=yes"
  else
--- 2107,2113 ----
  
  ; return 0; }
  EOF
! if { (eval echo configure:2111: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_func_$ac_func=yes"
  else
***************
*** 2147,2163 ****
  
  ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
  echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
! echo "configure:2151: checking for vfork.h" >&5
  if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 2156 "configure"
  #include "confdefs.h"
  #include <vfork.h>
  EOF
  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:2161: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  if test -z "$ac_err"; then
    rm -rf conftest*
--- 2151,2167 ----
  
  ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
  echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
! echo "configure:2155: checking for vfork.h" >&5
  if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 2160 "configure"
  #include "confdefs.h"
  #include <vfork.h>
  EOF
  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:2165: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  if test -z "$ac_err"; then
    rm -rf conftest*
***************
*** 2182,2199 ****
  fi
  
  echo $ac_n "checking for working vfork""... $ac_c" 1>&6
! echo "configure:2186: checking for working vfork" >&5
  if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test "$cross_compiling" = yes; then
    echo $ac_n "checking for vfork""... $ac_c" 1>&6
! echo "configure:2192: checking for vfork" >&5
  if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 2197 "configure"
  #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char vfork(); below.  */
--- 2186,2203 ----
  fi
  
  echo $ac_n "checking for working vfork""... $ac_c" 1>&6
! echo "configure:2190: checking for working vfork" >&5
  if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    if test "$cross_compiling" = yes; then
    echo $ac_n "checking for vfork""... $ac_c" 1>&6
! echo "configure:2196: checking for vfork" >&5
  if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 2201 "configure"
  #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char vfork(); below.  */
***************
*** 2216,2222 ****
  
  ; return 0; }
  EOF
! if { (eval echo configure:2220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_func_vfork=yes"
  else
--- 2220,2226 ----
  
  ; return 0; }
  EOF
! if { (eval echo configure:2224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_func_vfork=yes"
  else
***************
*** 2238,2244 ****
  ac_cv_func_vfork_works=$ac_cv_func_vfork
  else
    cat > conftest.$ac_ext <<EOF
! #line 2242 "configure"
  #include "confdefs.h"
  /* Thanks to Paul Eggert for this test.  */
  #include <stdio.h>
--- 2242,2248 ----
  ac_cv_func_vfork_works=$ac_cv_func_vfork
  else
    cat > conftest.$ac_ext <<EOF
! #line 2246 "configure"
  #include "confdefs.h"
  /* Thanks to Paul Eggert for this test.  */
  #include <stdio.h>
***************
*** 2333,2339 ****
    }
  }
  EOF
! if { (eval echo configure:2337: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  then
    ac_cv_func_vfork_works=yes
  else
--- 2337,2343 ----
    }
  }
  EOF
! if { (eval echo configure:2341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  then
    ac_cv_func_vfork_works=yes
  else
***************
*** 2356,2362 ****
  fi
  
  echo $ac_n "checking whether closedir returns void""... $ac_c" 1>&6
! echo "configure:2360: checking whether closedir returns void" >&5
  if eval "test \"`echo '$''{'ac_cv_func_closedir_void'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 2360,2366 ----
  fi
  
  echo $ac_n "checking whether closedir returns void""... $ac_c" 1>&6
! echo "configure:2364: checking whether closedir returns void" >&5
  if eval "test \"`echo '$''{'ac_cv_func_closedir_void'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
***************
*** 2364,2376 ****
    ac_cv_func_closedir_void=yes
  else
    cat > conftest.$ac_ext <<EOF
! #line 2368 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <$ac_header_dirent>
  int closedir(); main() { exit(closedir(opendir(".")) != 0); }
  EOF
! if { (eval echo configure:2374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  then
    ac_cv_func_closedir_void=no
  else
--- 2368,2380 ----
    ac_cv_func_closedir_void=yes
  else
    cat > conftest.$ac_ext <<EOF
! #line 2372 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <$ac_header_dirent>
  int closedir(); main() { exit(closedir(opendir(".")) != 0); }
  EOF
! if { (eval echo configure:2378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  then
    ac_cv_func_closedir_void=no
  else
***************
*** 2395,2408 ****
  
  
  echo $ac_n "checking for library containing getspnam""... $ac_c" 1>&6
! echo "configure:2399: checking for library containing getspnam" >&5
  if eval "test \"`echo '$''{'ac_cv_search_getspnam'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    ac_func_search_save_LIBS="$LIBS"
  ac_cv_search_getspnam="no"
  cat > conftest.$ac_ext <<EOF
! #line 2406 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 2399,2412 ----
  
  
  echo $ac_n "checking for library containing getspnam""... $ac_c" 1>&6
! echo "configure:2403: checking for library containing getspnam" >&5
  if eval "test \"`echo '$''{'ac_cv_search_getspnam'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    ac_func_search_save_LIBS="$LIBS"
  ac_cv_search_getspnam="no"
  cat > conftest.$ac_ext <<EOF
! #line 2410 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 2413,2419 ****
  getspnam()
  ; return 0; }
  EOF
! if { (eval echo configure:2417: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_getspnam="none required"
  else
--- 2417,2423 ----
  getspnam()
  ; return 0; }
  EOF
! if { (eval echo configure:2421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_getspnam="none required"
  else
***************
*** 2424,2430 ****
  test "$ac_cv_search_getspnam" = "no" && for i in sec gen; do
  LIBS="-l$i  $ac_func_search_save_LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 2428 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 2428,2434 ----
  test "$ac_cv_search_getspnam" = "no" && for i in sec gen; do
  LIBS="-l$i  $ac_func_search_save_LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 2432 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 2435,2441 ****
  getspnam()
  ; return 0; }
  EOF
! if { (eval echo configure:2439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_getspnam="-l$i"
  break
--- 2439,2445 ----
  getspnam()
  ; return 0; }
  EOF
! if { (eval echo configure:2443: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_getspnam="-l$i"
  break
***************
*** 2460,2466 ****
  fi
  
  echo $ac_n "checking whether utime accepts a null argument""... $ac_c" 1>&6
! echo "configure:2464: checking whether utime accepts a null argument" >&5
  if eval "test \"`echo '$''{'ac_cv_func_utime_null'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 2464,2470 ----
  fi
  
  echo $ac_n "checking whether utime accepts a null argument""... $ac_c" 1>&6
! echo "configure:2468: checking whether utime accepts a null argument" >&5
  if eval "test \"`echo '$''{'ac_cv_func_utime_null'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
***************
*** 2470,2476 ****
    ac_cv_func_utime_null=no
  else
    cat > conftest.$ac_ext <<EOF
! #line 2474 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <sys/stat.h>
--- 2474,2480 ----
    ac_cv_func_utime_null=no
  else
    cat > conftest.$ac_ext <<EOF
! #line 2478 "configure"
  #include "confdefs.h"
  #include <sys/types.h>
  #include <sys/stat.h>
***************
*** 2481,2487 ****
  && t.st_mtime - s.st_mtime < 120));
  }
  EOF
! if { (eval echo configure:2485: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  then
    ac_cv_func_utime_null=yes
  else
--- 2485,2491 ----
  && t.st_mtime - s.st_mtime < 120));
  }
  EOF
! if { (eval echo configure:2489: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  then
    ac_cv_func_utime_null=yes
  else
***************
*** 2505,2511 ****
  fi
  
  echo $ac_n "checking for long file names""... $ac_c" 1>&6
! echo "configure:2509: checking for long file names" >&5
  if eval "test \"`echo '$''{'ac_cv_sys_long_file_names'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 2509,2515 ----
  fi
  
  echo $ac_n "checking for long file names""... $ac_c" 1>&6
! echo "configure:2513: checking for long file names" >&5
  if eval "test \"`echo '$''{'ac_cv_sys_long_file_names'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
***************
*** 2550,2556 ****
  
  
  echo $ac_n "checking for working fnmatch""... $ac_c" 1>&6
! echo "configure:2554: checking for working fnmatch" >&5
  if eval "test \"`echo '$''{'ac_cv_func_fnmatch_works'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
--- 2554,2560 ----
  
  
  echo $ac_n "checking for working fnmatch""... $ac_c" 1>&6
! echo "configure:2558: checking for working fnmatch" >&5
  if eval "test \"`echo '$''{'ac_cv_func_fnmatch_works'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
***************
*** 2561,2571 ****
    ac_cv_func_fnmatch_works=no
  else
    cat > conftest.$ac_ext <<EOF
! #line 2565 "configure"
  #include "confdefs.h"
  main() { exit (fnmatch ("a*", "abc", 0) != 0); }
  EOF
! if { (eval echo configure:2569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  then
    ac_cv_func_fnmatch_works=yes
  else
--- 2565,2575 ----
    ac_cv_func_fnmatch_works=no
  else
    cat > conftest.$ac_ext <<EOF
! #line 2569 "configure"
  #include "confdefs.h"
  main() { exit (fnmatch ("a*", "abc", 0) != 0); }
  EOF
! if { (eval echo configure:2573: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
  then
    ac_cv_func_fnmatch_works=yes
  else
***************
*** 2593,2599 ****
  
  # Try to find connect and gethostbyname.
  echo $ac_n "checking for main in -lnsl""... $ac_c" 1>&6
! echo "configure:2597: checking for main in -lnsl" >&5
  ac_lib_var=`echo nsl'_'main | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
--- 2597,2603 ----
  
  # Try to find connect and gethostbyname.
  echo $ac_n "checking for main in -lnsl""... $ac_c" 1>&6
! echo "configure:2601: checking for main in -lnsl" >&5
  ac_lib_var=`echo nsl'_'main | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
***************
*** 2601,2614 ****
    ac_save_LIBS="$LIBS"
  LIBS="-lnsl  $LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 2605 "configure"
  #include "confdefs.h"
  
  int main() {
  main()
  ; return 0; }
  EOF
! if { (eval echo configure:2612: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_lib_$ac_lib_var=yes"
  else
--- 2605,2618 ----
    ac_save_LIBS="$LIBS"
  LIBS="-lnsl  $LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 2609 "configure"
  #include "confdefs.h"
  
  int main() {
  main()
  ; return 0; }
  EOF
! if { (eval echo configure:2616: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_lib_$ac_lib_var=yes"
  else
***************
*** 2625,2638 ****
    echo "$ac_t""yes" 1>&6
    
  echo $ac_n "checking for library containing connect""... $ac_c" 1>&6
! echo "configure:2629: checking for library containing connect" >&5
  if eval "test \"`echo '$''{'ac_cv_search_connect'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    ac_func_search_save_LIBS="$LIBS"
  ac_cv_search_connect="no"
  cat > conftest.$ac_ext <<EOF
! #line 2636 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 2629,2642 ----
    echo "$ac_t""yes" 1>&6
    
  echo $ac_n "checking for library containing connect""... $ac_c" 1>&6
! echo "configure:2633: checking for library containing connect" >&5
  if eval "test \"`echo '$''{'ac_cv_search_connect'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    ac_func_search_save_LIBS="$LIBS"
  ac_cv_search_connect="no"
  cat > conftest.$ac_ext <<EOF
! #line 2640 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 2643,2649 ****
  connect()
  ; return 0; }
  EOF
! if { (eval echo configure:2647: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_connect="none required"
  else
--- 2647,2653 ----
  connect()
  ; return 0; }
  EOF
! if { (eval echo configure:2651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_connect="none required"
  else
***************
*** 2654,2660 ****
  test "$ac_cv_search_connect" = "no" && for i in xnet socket inet; do
  LIBS="-l$i -lnsl $ac_func_search_save_LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 2658 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 2658,2664 ----
  test "$ac_cv_search_connect" = "no" && for i in xnet socket inet; do
  LIBS="-l$i -lnsl $ac_func_search_save_LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 2662 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 2665,2671 ****
  connect()
  ; return 0; }
  EOF
! if { (eval echo configure:2669: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_connect="-l$i"
  break
--- 2669,2675 ----
  connect()
  ; return 0; }
  EOF
! if { (eval echo configure:2673: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_connect="-l$i"
  break
***************
*** 2692,2705 ****
    echo "$ac_t""no" 1>&6
  
  echo $ac_n "checking for library containing connect""... $ac_c" 1>&6
! echo "configure:2696: checking for library containing connect" >&5
  if eval "test \"`echo '$''{'ac_cv_search_connect'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    ac_func_search_save_LIBS="$LIBS"
  ac_cv_search_connect="no"
  cat > conftest.$ac_ext <<EOF
! #line 2703 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 2696,2709 ----
    echo "$ac_t""no" 1>&6
  
  echo $ac_n "checking for library containing connect""... $ac_c" 1>&6
! echo "configure:2700: checking for library containing connect" >&5
  if eval "test \"`echo '$''{'ac_cv_search_connect'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    ac_func_search_save_LIBS="$LIBS"
  ac_cv_search_connect="no"
  cat > conftest.$ac_ext <<EOF
! #line 2707 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 2710,2716 ****
  connect()
  ; return 0; }
  EOF
! if { (eval echo configure:2714: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_connect="none required"
  else
--- 2714,2720 ----
  connect()
  ; return 0; }
  EOF
! if { (eval echo configure:2718: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_connect="none required"
  else
***************
*** 2721,2727 ****
  test "$ac_cv_search_connect" = "no" && for i in xnet socket inet; do
  LIBS="-l$i  $ac_func_search_save_LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 2725 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 2725,2731 ----
  test "$ac_cv_search_connect" = "no" && for i in xnet socket inet; do
  LIBS="-l$i  $ac_func_search_save_LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 2729 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 2732,2738 ****
  connect()
  ; return 0; }
  EOF
! if { (eval echo configure:2736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_connect="-l$i"
  break
--- 2736,2742 ----
  connect()
  ; return 0; }
  EOF
! if { (eval echo configure:2740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_connect="-l$i"
  break
***************
*** 2759,2772 ****
  
  
  echo $ac_n "checking for library containing gethostbyname""... $ac_c" 1>&6
! echo "configure:2763: checking for library containing gethostbyname" >&5
  if eval "test \"`echo '$''{'ac_cv_search_gethostbyname'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    ac_func_search_save_LIBS="$LIBS"
  ac_cv_search_gethostbyname="no"
  cat > conftest.$ac_ext <<EOF
! #line 2770 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 2763,2776 ----
  
  
  echo $ac_n "checking for library containing gethostbyname""... $ac_c" 1>&6
! echo "configure:2767: checking for library containing gethostbyname" >&5
  if eval "test \"`echo '$''{'ac_cv_search_gethostbyname'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    ac_func_search_save_LIBS="$LIBS"
  ac_cv_search_gethostbyname="no"
  cat > conftest.$ac_ext <<EOF
! #line 2774 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 2777,2783 ****
  gethostbyname()
  ; return 0; }
  EOF
! if { (eval echo configure:2781: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_gethostbyname="none required"
  else
--- 2781,2787 ----
  gethostbyname()
  ; return 0; }
  EOF
! if { (eval echo configure:2785: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_gethostbyname="none required"
  else
***************
*** 2788,2794 ****
  test "$ac_cv_search_gethostbyname" = "no" && for i in netinet nsl; do
  LIBS="-l$i  $ac_func_search_save_LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 2792 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 2792,2798 ----
  test "$ac_cv_search_gethostbyname" = "no" && for i in netinet nsl; do
  LIBS="-l$i  $ac_func_search_save_LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 2796 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 2799,2805 ****
  gethostbyname()
  ; return 0; }
  EOF
! if { (eval echo configure:2803: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_gethostbyname="-l$i"
  break
--- 2803,2809 ----
  gethostbyname()
  ; return 0; }
  EOF
! if { (eval echo configure:2807: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_gethostbyname="-l$i"
  break
***************
*** 2832,2850 ****
  
  krb_h=
  echo $ac_n "checking for krb.h""... $ac_c" 1>&6
! echo "configure:2836: checking for krb.h" >&5
  if test "$cross_compiling" != yes && test -r $KRB4/include/krb.h; then
     hold_cflags=$CFLAGS
     CFLAGS="$CFLAGS -I$KRB4/include"
     cat > conftest.$ac_ext <<EOF
! #line 2841 "configure"
  #include "confdefs.h"
  #include <krb.h>
  int main() {
  int i;
  ; return 0; }
  EOF
! if { (eval echo configure:2848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    krb_h=yes krb_incdir=$KRB4/include
  else
--- 2836,2854 ----
  
  krb_h=
  echo $ac_n "checking for krb.h""... $ac_c" 1>&6
! echo "configure:2840: checking for krb.h" >&5
  if test "$cross_compiling" != yes && test -r $KRB4/include/krb.h; then
     hold_cflags=$CFLAGS
     CFLAGS="$CFLAGS -I$KRB4/include"
     cat > conftest.$ac_ext <<EOF
! #line 2845 "configure"
  #include "confdefs.h"
  #include <krb.h>
  int main() {
  int i;
  ; return 0; }
  EOF
! if { (eval echo configure:2852: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    krb_h=yes krb_incdir=$KRB4/include
  else
***************
*** 2853,2866 ****
    rm -rf conftest*
    CFLAGS=$hold_cflags
             cat > conftest.$ac_ext <<EOF
! #line 2857 "configure"
  #include "confdefs.h"
  #include <krb.h>
  int main() {
  int i;
  ; return 0; }
  EOF
! if { (eval echo configure:2864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    krb_h=yes krb_incdir=
  else
--- 2857,2870 ----
    rm -rf conftest*
    CFLAGS=$hold_cflags
             cat > conftest.$ac_ext <<EOF
! #line 2861 "configure"
  #include "confdefs.h"
  #include <krb.h>
  int main() {
  int i;
  ; return 0; }
  EOF
! if { (eval echo configure:2868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    krb_h=yes krb_incdir=
  else
***************
*** 2873,2886 ****
     CFLAGS=$hold_cflags
  else
     cat > conftest.$ac_ext <<EOF
! #line 2877 "configure"
  #include "confdefs.h"
  #include <krb.h>
  int main() {
  int i;
  ; return 0; }
  EOF
! if { (eval echo configure:2884: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    krb_h=yes krb_incdir=
  else
--- 2877,2890 ----
     CFLAGS=$hold_cflags
  else
     cat > conftest.$ac_ext <<EOF
! #line 2881 "configure"
  #include "confdefs.h"
  #include <krb.h>
  int main() {
  int i;
  ; return 0; }
  EOF
! if { (eval echo configure:2888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    krb_h=yes krb_incdir=
  else
***************
*** 2891,2904 ****
  fi
  if test -z "$krb_h"; then
    cat > conftest.$ac_ext <<EOF
! #line 2895 "configure"
  #include "confdefs.h"
  #include <krb.h>
  int main() {
  int i;
  ; return 0; }
  EOF
! if { (eval echo configure:2902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    krb_h=yes krb_incdir=
  else
--- 2895,2908 ----
  fi
  if test -z "$krb_h"; then
    cat > conftest.$ac_ext <<EOF
! #line 2899 "configure"
  #include "confdefs.h"
  #include <krb.h>
  int main() {
  int i;
  ; return 0; }
  EOF
! if { (eval echo configure:2906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    krb_h=yes krb_incdir=
  else
***************
*** 2909,2922 ****
         hold_cflags=$CFLAGS
         CFLAGS="$CFLAGS -I$KRB4/include/kerberosIV"
         cat > conftest.$ac_ext <<EOF
! #line 2913 "configure"
  #include "confdefs.h"
  #include <krb.h>
  int main() {
  int i;
  ; return 0; }
  EOF
! if { (eval echo configure:2920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    krb_h=yes krb_incdir=$KRB4/include/kerberosIV
  else
--- 2913,2926 ----
         hold_cflags=$CFLAGS
         CFLAGS="$CFLAGS -I$KRB4/include/kerberosIV"
         cat > conftest.$ac_ext <<EOF
! #line 2917 "configure"
  #include "confdefs.h"
  #include <krb.h>
  int main() {
  int i;
  ; return 0; }
  EOF
! if { (eval echo configure:2924: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    krb_h=yes krb_incdir=$KRB4/include/kerberosIV
  else
***************
*** 2939,2945 ****
         hold_ldflags=$LDFLAGS
         LDFLAGS="-L${KRB4}/lib $LDFLAGS"
         echo $ac_n "checking for printf in -lkrb""... $ac_c" 1>&6
! echo "configure:2943: checking for printf in -lkrb" >&5
  ac_lib_var=`echo krb'_'printf | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
--- 2943,2949 ----
         hold_ldflags=$LDFLAGS
         LDFLAGS="-L${KRB4}/lib $LDFLAGS"
         echo $ac_n "checking for printf in -lkrb""... $ac_c" 1>&6
! echo "configure:2947: checking for printf in -lkrb" >&5
  ac_lib_var=`echo krb'_'printf | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
***************
*** 2947,2953 ****
    ac_save_LIBS="$LIBS"
  LIBS="-lkrb  $LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 2951 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 2951,2957 ----
    ac_save_LIBS="$LIBS"
  LIBS="-lkrb  $LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 2955 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 2958,2964 ****
  printf()
  ; return 0; }
  EOF
! if { (eval echo configure:2962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_lib_$ac_lib_var=yes"
  else
--- 2962,2968 ----
  printf()
  ; return 0; }
  EOF
! if { (eval echo configure:2966: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_lib_$ac_lib_var=yes"
  else
***************
*** 2980,2986 ****
              # Using open here instead of printf so we don't
              # get confused by the cached value for printf from above.
              echo $ac_n "checking for open in -lkrb""... $ac_c" 1>&6
! echo "configure:2984: checking for open in -lkrb" >&5
  ac_lib_var=`echo krb'_'open | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
--- 2984,2990 ----
              # Using open here instead of printf so we don't
              # get confused by the cached value for printf from above.
              echo $ac_n "checking for open in -lkrb""... $ac_c" 1>&6
! echo "configure:2988: checking for open in -lkrb" >&5
  ac_lib_var=`echo krb'_'open | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
***************
*** 2988,2994 ****
    ac_save_LIBS="$LIBS"
  LIBS="-lkrb  $LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 2992 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 2992,2998 ----
    ac_save_LIBS="$LIBS"
  LIBS="-lkrb  $LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 2996 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 2999,3005 ****
  open()
  ; return 0; }
  EOF
! if { (eval echo configure:3003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_lib_$ac_lib_var=yes"
  else
--- 3003,3009 ----
  open()
  ; return 0; }
  EOF
! if { (eval echo configure:3007: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_lib_$ac_lib_var=yes"
  else
***************
*** 3024,3030 ****
         LDFLAGS=$hold_ldflags
    else
         echo $ac_n "checking for printf in -lkrb""... $ac_c" 1>&6
! echo "configure:3028: checking for printf in -lkrb" >&5
  ac_lib_var=`echo krb'_'printf | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
--- 3028,3034 ----
         LDFLAGS=$hold_ldflags
    else
         echo $ac_n "checking for printf in -lkrb""... $ac_c" 1>&6
! echo "configure:3032: checking for printf in -lkrb" >&5
  ac_lib_var=`echo krb'_'printf | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
***************
*** 3032,3038 ****
    ac_save_LIBS="$LIBS"
  LIBS="-lkrb  $LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 3036 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 3036,3042 ----
    ac_save_LIBS="$LIBS"
  LIBS="-lkrb  $LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 3040 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 3043,3049 ****
  printf()
  ; return 0; }
  EOF
! if { (eval echo configure:3047: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_lib_$ac_lib_var=yes"
  else
--- 3047,3053 ----
  printf()
  ; return 0; }
  EOF
! if { (eval echo configure:3051: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_lib_$ac_lib_var=yes"
  else
***************
*** 3077,3083 ****
      hold_ldflags=$LDFLAGS
      test -n "${krb_libdir}" && LDFLAGS="$LDFLAGS -L${krb_libdir}"
      echo $ac_n "checking for printf in -ldes""... $ac_c" 1>&6
! echo "configure:3081: checking for printf in -ldes" >&5
  ac_lib_var=`echo des'_'printf | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
--- 3081,3087 ----
      hold_ldflags=$LDFLAGS
      test -n "${krb_libdir}" && LDFLAGS="$LDFLAGS -L${krb_libdir}"
      echo $ac_n "checking for printf in -ldes""... $ac_c" 1>&6
! echo "configure:3085: checking for printf in -ldes" >&5
  ac_lib_var=`echo des'_'printf | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
***************
*** 3085,3091 ****
    ac_save_LIBS="$LIBS"
  LIBS="-ldes  $LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 3089 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 3089,3095 ----
    ac_save_LIBS="$LIBS"
  LIBS="-ldes  $LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 3093 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 3096,3102 ****
  printf()
  ; return 0; }
  EOF
! if { (eval echo configure:3100: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_lib_$ac_lib_var=yes"
  else
--- 3100,3106 ----
  printf()
  ; return 0; }
  EOF
! if { (eval echo configure:3104: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_lib_$ac_lib_var=yes"
  else
***************
*** 3125,3136 ****
  for ac_func in krb_get_err_text
  do
  echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:3129: checking for $ac_func" >&5
  if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 3134 "configure"
  #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char $ac_func(); below.  */
--- 3129,3140 ----
  for ac_func in krb_get_err_text
  do
  echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
! echo "configure:3133: checking for $ac_func" >&5
  if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 3138 "configure"
  #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char $ac_func(); below.  */
***************
*** 3153,3159 ****
  
  ; return 0; }
  EOF
! if { (eval echo configure:3157: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_func_$ac_func=yes"
  else
--- 3157,3163 ----
  
  ; return 0; }
  EOF
! if { (eval echo configure:3161: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_func_$ac_func=yes"
  else
***************
*** 3194,3210 ****
  do
  ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
  echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
! echo "configure:3198: checking for $ac_hdr" >&5
  if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 3203 "configure"
  #include "confdefs.h"
  #include <$ac_hdr>
  EOF
  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:3208: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  if test -z "$ac_err"; then
    rm -rf conftest*
--- 3198,3214 ----
  do
  ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
  echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
! echo "configure:3202: checking for $ac_hdr" >&5
  if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 3207 "configure"
  #include "confdefs.h"
  #include <$ac_hdr>
  EOF
  ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
! { (eval echo configure:3212: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
  ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
  if test -z "$ac_err"; then
    rm -rf conftest*
***************
*** 3250,3256 ****
    CPPFLAGS="-I$GSSAPI/include $CPPFLAGS"
    if test "$ac_cv_header_gssapi_h" = "yes"; then
      cat > conftest.$ac_ext <<EOF
! #line 3254 "configure"
  #include "confdefs.h"
  #include <gssapi.h>
  EOF
--- 3254,3260 ----
    CPPFLAGS="-I$GSSAPI/include $CPPFLAGS"
    if test "$ac_cv_header_gssapi_h" = "yes"; then
      cat > conftest.$ac_ext <<EOF
! #line 3258 "configure"
  #include "confdefs.h"
  #include <gssapi.h>
  EOF
***************
*** 3266,3272 ****
  
    else
      cat > conftest.$ac_ext <<EOF
! #line 3270 "configure"
  #include "confdefs.h"
  #include <gssapi/gssapi.h>
  EOF
--- 3270,3276 ----
  
    else
      cat > conftest.$ac_ext <<EOF
! #line 3274 "configure"
  #include "confdefs.h"
  #include <gssapi/gssapi.h>
  EOF
***************
*** 3285,3291 ****
    # This is necessary on Irix 5.3, in order to link against libkrb5 --
    # there, an_to_ln.o refers to things defined only in -lgen.
    echo $ac_n "checking for compile in -lgen""... $ac_c" 1>&6
! echo "configure:3289: checking for compile in -lgen" >&5
  ac_lib_var=`echo gen'_'compile | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
--- 3289,3295 ----
    # This is necessary on Irix 5.3, in order to link against libkrb5 --
    # there, an_to_ln.o refers to things defined only in -lgen.
    echo $ac_n "checking for compile in -lgen""... $ac_c" 1>&6
! echo "configure:3293: checking for compile in -lgen" >&5
  ac_lib_var=`echo gen'_'compile | sed 'y%./+-%__p_%'`
  if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
***************
*** 3293,3299 ****
    ac_save_LIBS="$LIBS"
  LIBS="-lgen  $LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 3297 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 3297,3303 ----
    ac_save_LIBS="$LIBS"
  LIBS="-lgen  $LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 3301 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 3304,3310 ****
  compile()
  ; return 0; }
  EOF
! if { (eval echo configure:3308: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_lib_$ac_lib_var=yes"
  else
--- 3308,3314 ----
  compile()
  ; return 0; }
  EOF
! if { (eval echo configure:3312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_lib_$ac_lib_var=yes"
  else
***************
*** 3353,3364 ****
  fi
  
  echo $ac_n "checking for gethostname""... $ac_c" 1>&6
! echo "configure:3357: checking for gethostname" >&5
  if eval "test \"`echo '$''{'ac_cv_func_gethostname'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 3362 "configure"
  #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char gethostname(); below.  */
--- 3357,3368 ----
  fi
  
  echo $ac_n "checking for gethostname""... $ac_c" 1>&6
! echo "configure:3361: checking for gethostname" >&5
  if eval "test \"`echo '$''{'ac_cv_func_gethostname'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 3366 "configure"
  #include "confdefs.h"
  /* System header to define __stub macros and hopefully few prototypes,
      which can conflict with char gethostname(); below.  */
***************
*** 3381,3387 ****
  
  ; return 0; }
  EOF
! if { (eval echo configure:3385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_func_gethostname=yes"
  else
--- 3385,3391 ----
  
  ; return 0; }
  EOF
! if { (eval echo configure:3389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    eval "ac_cv_func_gethostname=yes"
  else
***************
*** 3446,3459 ****
  if test "$enable_server" = yes; then
  
  echo $ac_n "checking for library containing crypt""... $ac_c" 1>&6
! echo "configure:3450: checking for library containing crypt" >&5
  if eval "test \"`echo '$''{'ac_cv_search_crypt'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    ac_func_search_save_LIBS="$LIBS"
  ac_cv_search_crypt="no"
  cat > conftest.$ac_ext <<EOF
! #line 3457 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 3450,3463 ----
  if test "$enable_server" = yes; then
  
  echo $ac_n "checking for library containing crypt""... $ac_c" 1>&6
! echo "configure:3454: checking for library containing crypt" >&5
  if eval "test \"`echo '$''{'ac_cv_search_crypt'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    ac_func_search_save_LIBS="$LIBS"
  ac_cv_search_crypt="no"
  cat > conftest.$ac_ext <<EOF
! #line 3461 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 3464,3470 ****
  crypt()
  ; return 0; }
  EOF
! if { (eval echo configure:3468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_crypt="none required"
  else
--- 3468,3474 ----
  crypt()
  ; return 0; }
  EOF
! if { (eval echo configure:3472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_crypt="none required"
  else
***************
*** 3475,3481 ****
  test "$ac_cv_search_crypt" = "no" && for i in crypt; do
  LIBS="-l$i  $ac_func_search_save_LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 3479 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
--- 3479,3485 ----
  test "$ac_cv_search_crypt" = "no" && for i in crypt; do
  LIBS="-l$i  $ac_func_search_save_LIBS"
  cat > conftest.$ac_ext <<EOF
! #line 3483 "configure"
  #include "confdefs.h"
  /* Override any gcc2 internal prototype to avoid an error.  */
  /* We use char because int might match the return type of a gcc2
***************
*** 3486,3492 ****
  crypt()
  ; return 0; }
  EOF
! if { (eval echo configure:3490: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_crypt="-l$i"
  break
--- 3490,3496 ----
  crypt()
  ; return 0; }
  EOF
! if { (eval echo configure:3494: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
    rm -rf conftest*
    ac_cv_search_crypt="-l$i"
  break
***************
*** 3515,3534 ****
  fi # enable_server
  
  
  echo $ac_n "checking for cygwin32""... $ac_c" 1>&6
! echo "configure:3520: checking for cygwin32" >&5
  if eval "test \"`echo '$''{'ccvs_cv_sys_cygwin32'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 3525 "configure"
  #include "confdefs.h"
  
  int main() {
  return __CYGWIN32__;
  ; return 0; }
  EOF
! if { (eval echo configure:3532: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    rm -rf conftest*
    ccvs_cv_sys_cygwin32=yes
  else
--- 3519,3588 ----
  fi # enable_server
  
  
+ # Check whether --enable-mysql or --disable-mysql was given.
+ if test "${enable_mysql+set}" = set; then
+   enableval="$enable_mysql"
+   case "${enableval}" in
+     yes) mysql=true ;;
+     no) mysql=false ;;
+     *) { echo "configure: error: bad value ${enableval} for MySQL option" 1>&2; exit 1; } ;;
+    esac
+ else
+   mysql=false
+ fi
+ 
+   if test "$mysql" = "true"; then
+     cat >> confdefs.h <<\EOF
+ #define MYSQL_SUPPORT 1
+ EOF
+ 
+   echo $ac_n "checking for MySQL directory""... $ac_c" 1>&6
+ echo "configure:3541: checking for MySQL directory" >&5
+   # Check whether --with-mysql or --without-mysql was given.
+ if test "${with_mysql+set}" = set; then
+   withval="$with_mysql"
+   
+ 
+           MYSQL_BASE_DIR=$withval
+           echo "$ac_t""$withval" 1>&6
+ 
+ else
+   
+           MYSQL_BASE_DIR=/usr/local
+           echo "$ac_t""/usr/local" 1>&6
+ 
+ fi
+ 
+   if test -f $MYSQL_BASE_DIR/include/mysql/mysql.h; then
+           MYSQL_INCDIR=$MYSQL_BASE_DIR/include/mysql
+           MYSQL_LIBDIR=$MYSQL_BASE_DIR/lib/mysql
+   elif test -f $MYSQL_BASE_DIR/include/mysql.h; then
+           MYSQL_INCDIR=$MYSQL_BASE_DIR/include
+           MYSQL_LIBDIR=$MYSQL_BASE_DIR/lib
+   else
+           { echo "configure: error: Invalid MySQL directory - unable to find mysql.h under $MYSQL_BASE_DIR" 1>&2; exit 1; }
+   fi
+ 
+   CFLAGS="$CFLAGS -I$MYSQL_INCDIR"
+   LDFLAGS="$LDFLAGS -L$MYSQL_LIBDIR"
+   LIBS="$LIBS -lmysqlclient"
+ fi
+ 
+ 
  echo $ac_n "checking for cygwin32""... $ac_c" 1>&6
! echo "configure:3574: checking for cygwin32" >&5
  if eval "test \"`echo '$''{'ccvs_cv_sys_cygwin32'+set}'`\" = set"; then
    echo $ac_n "(cached) $ac_c" 1>&6
  else
    cat > conftest.$ac_ext <<EOF
! #line 3579 "configure"
  #include "confdefs.h"
  
  int main() {
  return __CYGWIN32__;
  ; return 0; }
  EOF
! if { (eval echo configure:3586: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
    rm -rf conftest*
    ccvs_cv_sys_cygwin32=yes
  else
diff --exclude=CVS -crN ../pristine-ccvs/configure.in ./configure.in
*** ./configure.in	Mon Jul 17 10:56:20 2000
--- ./configure.in	Thu Jul 27 15:36:53 2000
***************
*** 271,276 ****
--- 271,324 ----
  AC_SEARCH_LIBS(crypt, crypt, AC_DEFINE(HAVE_CRYPT) AC_DEFINE(AUTH_SERVER_SUPPORT))
  fi # enable_server
  
+ dnl
+ dnl MySQL support. Part of this configure input is taken from the
+ dnl mod_auth_mysql package. Credit should be given.
+ dnl
+ dnl Use --enable-mysql to activate MySQL support,
+ dnl Use --with-mysql to tell autoconf where the MySQL libs are
+ 
+ AC_ARG_ENABLE(mysql,
+   [  --enable-mysql          enable MySQL support],
+   [case "${enableval}" in
+     yes) mysql=true ;;
+     no) mysql=false ;;
+     *) AC_MSG_ERROR(bad value ${enableval} for MySQL option) ;;
+    esac],
+   [mysql=false])
+   if test "$mysql" = "true"; then
+     AC_DEFINE(MYSQL_SUPPORT)
+   AC_MSG_CHECKING(for MySQL directory)
+   AC_ARG_WITH(mysql,
+   [  --with-mysql=DIR      Specify the MySQL installation directory.  Default:  /usr/local],[
+ 
+           MYSQL_BASE_DIR=$withval
+           AC_MSG_RESULT($withval)
+ ],[
+           MYSQL_BASE_DIR=/usr/local
+           AC_MSG_RESULT(/usr/local)
+ ])
+   if test -f $MYSQL_BASE_DIR/include/mysql/mysql.h; then
+           MYSQL_INCDIR=$MYSQL_BASE_DIR/include/mysql
+           MYSQL_LIBDIR=$MYSQL_BASE_DIR/lib/mysql
+   elif test -f $MYSQL_BASE_DIR/include/mysql.h; then
+           MYSQL_INCDIR=$MYSQL_BASE_DIR/include
+           MYSQL_LIBDIR=$MYSQL_BASE_DIR/lib
+   else
+           AC_MSG_ERROR(Invalid MySQL directory - unable to find mysql.h under $MYSQL_BASE_DIR)
+   fi
+ 
+ dnl  MYSQL_INCLUDE=-I$MYSQL_INCDIR
+ dnl  MYSQL_LFLAGS=-L$MYSQL_LIBDIR
+ dnl  MYSQL_LIBS=-lmysqlclient
+ dnl  AC_SUBST(MYSQL_LIBS)
+ dnl  AC_SUBST(MYSQL_LFLAGS)
+ dnl  AC_SUBST(MYSQL_INCLUDE)
+   CFLAGS="$CFLAGS -I$MYSQL_INCDIR"
+   LDFLAGS="$LDFLAGS -L$MYSQL_LIBDIR"
+   LIBS="$LIBS -lmysqlclient"
+ fi
+ 
  dnl For the moment we will assume that all systems which have
  dnl the unixyness to run configure are unixy enough to do the
  dnl PreservePermissions stuff.  I have this sinking feeling that
diff --exclude=CVS -crN ../pristine-ccvs/doc/cvs.texinfo ./doc/cvs.texinfo
*** ./doc/cvs.texinfo	Mon Jul 17 10:56:21 2000
--- ./doc/cvs.texinfo	Thu Jul 27 15:36:53 2000
***************
*** 2247,2252 ****
--- 2247,2261 ----
  @@node Password authentication server
  @@subsubsection Setting up the server for password authentication
  
+ CVS can authenticate on passwords received from
+ clients.  There are two ways to set up such
+ authentication: the standard way (using a special
+ password file), or using a database.  The advantage of
+ the latter is better maintainability when handling a
+ large number of users.
+ 
+ @@subsubheading Standard Password Authentication
+ 
  First of all, you probably want to tighten the
  permissions on the @@file{$CVSROOT} and
  @@file{$CVSROOT/CVSROOT} directories.  See @@ref{Password
***************
*** 2439,2444 ****
--- 2448,2524 ----
  @@c "how do I use it?"
  @@c Also note that htpasswd, at least the version I had,
  @@c likes to clobber the third field.
+ 
+ @@subsubheading Database Authentication
+ 
+ The CVS server can be made to authenticate off a
+ database instead of a @@file{passwd} file.  Note that
+ database authentication has only been checked with
+ pserver.  It may or may not work with kerberos.
+ 
+ To enable this feature, add the @@samp{-L} option to the
+ invokation from the @@code{inetd.conf} file, for example
+ 
+ @@example
+ 2401  stream  tcp  nowait  root  /usr/local/bin/cvs
+ cvs -L -f --allow-root=/usr/cvsroot pserver
+ @@end example
+ 
+ It would be best to run the server as some user other
+ than root, and have that user own the repository.
+ 
+ You must also put some database connection information
+ into the @@file{CVSROOT/config} file, for example:
+ 
+ @@example
+ MysqlUser=tigris
+ MysqlPasswd=yourdbpasswordhere
+ MysqlDB=tigris
+ MysqlDefaultUser=tigrisc
+ MysqlPasswdTable=domain_users
+ MysqlUsernameCol=username
+ MysqlPasswdCol=password
+ MysqlEncrypt=mysql
+ @@end example
+ 
+ As you probably deduced from the above, there must be a
+ @@code{domain_users} table in the target database, with
+ at least the two columnus @@code{username} and
+ @@code{password}.  The password should be stored
+ encrypted according to the method specified in the
+ @@code{MysqlEncrypt} parameter above; valid methods are
+ "mysql" and "crypt".
+ 
+ The full list of MySQL-related @@file{CVSROOT/config}
+ parameters is:
+ 
+ @@example
+ MysqlHost
+ MysqlUnixSocket
+ MysqlUser
+ MysqlPasswd
+ MysqlDB
+ MysqlPasswdTable
+ MysqlUsernameCol
+ MysqlPasswdCol
+ MysqlServerUserTable
+ MysqlCVSUserCol
+ MysqlServerUserCol
+ MysqlEncrypt
+ MysqlDefaultUser
+ @@end example
+ 
+ In the earlier @@file{config} file example, the database
+ parameters did not specify where to look up a separate
+ system user for the connecting client user (the "CVS
+ user").  In that case, the system user is the value of
+ @@code{MysqlDefaultUser}.
+ 
+ However, one could use @@code{MysqlServerUserTable},
+ @@code{MysqlCVSUserCol}, and @@code{MysqlServerUserCol}
+ parameters to specify a system user for the server to
+ run as.  The repository history would still record the
+ CVS user as the author for commits, of course.
  
  @@node Password authentication client
  @@subsubsection Using the client with password authentication
diff --exclude=CVS -crN ../pristine-ccvs/src/Makefile.in ./src/Makefile.in
*** ./src/Makefile.in	Tue Oct  6 18:04:30 1998
--- ./src/Makefile.in	Thu Jul 27 15:36:53 2000
***************
*** 43,49 ****
  lock.c log.c login.c logmsg.c main.c mkmodules.c modules.c myndbm.c no_diff.c \
  parseinfo.c patch.c rcs.c rcscmds.c recurse.c release.c remove.c repos.c \
  root.c rtag.c scramble.c server.c status.c subr.c filesubr.c run.c \
! tag.c update.c watch.c wrapper.c vers_ts.c version.c zlib.c
  
  OBJECTS = add.o admin.o buffer.o checkin.o checkout.o classify.o client.o \
  commit.o create_adm.o cvsrc.o diff.o edit.o entries.o expand_path.o \
--- 43,50 ----
  lock.c log.c login.c logmsg.c main.c mkmodules.c modules.c myndbm.c no_diff.c \
  parseinfo.c patch.c rcs.c rcscmds.c recurse.c release.c remove.c repos.c \
  root.c rtag.c scramble.c server.c status.c subr.c filesubr.c run.c \
! tag.c update.c watch.c wrapper.c vers_ts.c version.c zlib.c \
! local_auth.c mysqlsubr.c
  
  OBJECTS = add.o admin.o buffer.o checkin.o checkout.o classify.o client.o \
  commit.o create_adm.o cvsrc.o diff.o edit.o entries.o expand_path.o \
***************
*** 52,58 ****
  parseinfo.o patch.o rcs.o rcscmds.o recurse.o release.o remove.o repos.o \
  root.o rtag.o scramble.o server.o status.o tag.o update.o \
  watch.o wrapper.o vers_ts.o \
! subr.o filesubr.o run.o version.o error.o zlib.o
  
  HEADERS = buffer.h cvs.h rcs.h hardlink.h hash.h myndbm.h \
  	update.h server.h client.h error.h fileattr.h edit.h watch.h
--- 53,60 ----
  parseinfo.o patch.o rcs.o rcscmds.o recurse.o release.o remove.o repos.o \
  root.o rtag.o scramble.o server.o status.o tag.o update.o \
  watch.o wrapper.o vers_ts.o \
! subr.o filesubr.o run.o version.o error.o zlib.o \
! local_auth.o mysqlsubr.o
  
  HEADERS = buffer.h cvs.h rcs.h hardlink.h hash.h myndbm.h \
  	update.h server.h client.h error.h fileattr.h edit.h watch.h
diff --exclude=CVS -crN ../pristine-ccvs/src/add.c ./src/add.c
*** ./src/add.c	Wed Jun 28 09:04:18 2000
--- ./src/add.c	Thu Jul 27 15:36:53 2000
***************
*** 333,338 ****
--- 333,341 ----
  		       CVSNULLREPOS) == 0)
  	    error (1, 0, "cannot add to %s", repository);
  
+         if (! verify_create (repository))
+            error (1, 0, "User '%s' cannot change %s", getcaller(), repository);
+  
  	entries = Entries_Open (0, NULL);
  
  	finfo.repository = repository;
diff --exclude=CVS -crN ../pristine-ccvs/src/admin.c ./src/admin.c
*** ./src/admin.c	Thu Jul 27 11:09:20 2000
--- ./src/admin.c	Thu Jul 27 15:36:53 2000
***************
*** 491,497 ****
      err = start_recursion (admin_fileproc, (FILESDONEPROC) NULL, admin_dirproc,
  			   (DIRLEAVEPROC) NULL, (void *)&admin_data,
  			   argc, argv, 0,
! 			   W_LOCAL, 0, 0, (char *) NULL, 1);
      Lock_Cleanup ();
  
   return_it:
--- 491,497 ----
      err = start_recursion (admin_fileproc, (FILESDONEPROC) NULL, admin_dirproc,
  			   (DIRLEAVEPROC) NULL, (void *)&admin_data,
  			   argc, argv, 0,
! 			   W_LOCAL, 0, 0, (char *) NULL, 1, verify_admin);
      Lock_Cleanup ();
  
   return_it:
***************
*** 891,895 ****
  {
      if (!quiet)
  	error (0, 0, "Administrating %s", update_dir);
-     return (R_PROCESS);
  }
--- 891,894 ----
diff --exclude=CVS -crN ../pristine-ccvs/src/checkout.c ./src/checkout.c
*** ./src/checkout.c	Wed Jun 28 09:04:18 2000
--- ./src/checkout.c	Thu Jul 27 15:36:53 2000
***************
*** 537,542 ****
--- 537,548 ----
      Sanitize_Repository_Name (repository);
  
  
+     if (! verify_read(repository))
+     {
+        error (0, 0, "User %s cannot access %s", getcaller(), argv[0]);
+        return (1);
+     }
+ 
      /* save the original value of preload_update_dir */
      if (preload_update_dir != NULL)
  	oldupdate = xstrdup (preload_update_dir);
diff --exclude=CVS -crN ../pristine-ccvs/src/client.c ./src/client.c
*** ./src/client.c	Thu Jul  6 12:45:19 2000
--- ./src/client.c	Thu Jul 27 15:36:54 2000
***************
*** 3832,3838 ****
          if (password == NULL) 
          {
              no_passwd = 1;
!             password = scramble ("");
          }
  
  	/* Announce that we're starting the authorization protocol. */
--- 3832,3838 ----
          if (password == NULL) 
          {
              no_passwd = 1;
!             password = enscramble ("");
          }
  
  	/* Announce that we're starting the authorization protocol. */
***************
*** 5520,5526 ****
      err = start_recursion
  	(send_fileproc, send_filesdoneproc,
  	 send_dirent_proc, send_dirleave_proc, (void *) &args,
! 	 argc, argv, local, W_LOCAL, aflag, 0, (char *)NULL, 0);
      if (err)
  	error_exit ();
      if (toplevel_repos == NULL)
--- 5520,5527 ----
      err = start_recursion
  	(send_fileproc, send_filesdoneproc,
  	 send_dirent_proc, send_dirleave_proc, (void *) &args,
! 	 argc, argv, local, W_LOCAL, aflag, 0, (char *)NULL, 0,
!          (PERMPROC) NULL);
      if (err)
  	error_exit ();
      if (toplevel_repos == NULL)
diff --exclude=CVS -crN ../pristine-ccvs/src/commit.c ./src/commit.c
*** ./src/commit.c	Thu Jul 27 11:09:20 2000
--- ./src/commit.c	Thu Jul 27 15:36:54 2000
***************
*** 454,460 ****
  			       find_dirent_proc, (DIRLEAVEPROC) NULL,
  			       (void *)&find_args,
  			       argc, argv, local, W_LOCAL, 0, 0,
! 			       (char *)NULL, 0);
  	if (err)
  	    error (1, 0, "correct above errors first!");
  
--- 454,460 ----
  			       find_dirent_proc, (DIRLEAVEPROC) NULL,
  			       (void *)&find_args,
  			       argc, argv, local, W_LOCAL, 0, 0,
! 			       (char *)NULL, 0, (PERMPROC) NULL);
  	if (err)
  	    error (1, 0, "correct above errors first!");
  
***************
*** 640,646 ****
       */
      err = start_recursion (check_fileproc, check_filesdoneproc,
  			   check_direntproc, (DIRLEAVEPROC) NULL, NULL, argc,
! 			   argv, local, W_LOCAL, aflag, 0, (char *) NULL, 1);
      if (err)
      {
  	Lock_Cleanup ();
--- 640,647 ----
       */
      err = start_recursion (check_fileproc, check_filesdoneproc,
  			   check_direntproc, (DIRLEAVEPROC) NULL, NULL, argc,
! 			   argv, local, W_LOCAL, aflag, 0, (char *) NULL, 1,
! 			   verify_write);
      if (err)
      {
  	Lock_Cleanup ();
***************
*** 655,661 ****
  	err = start_recursion (commit_fileproc, commit_filesdoneproc,
  			       commit_direntproc, commit_dirleaveproc, NULL,
  			       argc, argv, local, W_LOCAL, aflag, 0,
! 			       (char *) NULL, 1);
  
      /*
       * Unlock all the dirs and clean up
--- 656,662 ----
  	err = start_recursion (commit_fileproc, commit_filesdoneproc,
  			       commit_direntproc, commit_dirleaveproc, NULL,
  			       argc, argv, local, W_LOCAL, aflag, 0,
! 			       (char *) NULL, 1, verify_write);
  
      /*
       * Unlock all the dirs and clean up
diff --exclude=CVS -crN ../pristine-ccvs/src/cvs.h ./src/cvs.h
*** ./src/cvs.h	Mon Jul 17 10:56:21 2000
--- ./src/cvs.h	Thu Jul 27 15:36:54 2000
***************
*** 64,69 ****
--- 64,73 ----
  char *strerror ();
  #endif
  
+ #ifdef MYSQL_SUPPORT
+ #include <mysql.h>
+ #endif /* MYSQL_SUPPORT */
+ 
  #include <fnmatch.h> /* This is supposed to be available on Posix systems */
  
  #include <ctype.h>
***************
*** 187,192 ****
--- 191,199 ----
  #define CVSROOTADM_WRITERS	"writers"
  #define CVSROOTADM_PASSWD	"passwd"
  #define CVSROOTADM_CONFIG	"config"
+ #ifdef MYSQL_SUPPORT
+ #define CVSROOTADM_MYSQL        "mysql"
+ #endif /* MYSQL_SUPPORT */
  
  #define CVSNULLREPOS		"Emptydir"	/* an empty directory */
  
***************
*** 384,389 ****
--- 391,405 ----
  extern char *CVSroot_hostname;	/* the hostname or NULL if method == local */
  extern char *CVSroot_directory;	/* the directory name */
  
+ /* Verification routines for mysql protection: return 1 if the
+    operation is permitted, 0 if not. */
+ extern int local_authentication;  /* Non-zero means doing special auth */
+ int verify_admin PROTO(());
+ int verify_owner PROTO((const char *));
+ int verify_read PROTO((const char *));
+ int verify_write PROTO((const char *));
+ int verify_create PROTO((const char *));
+ 
  /* These variables keep track of all of the CVSROOT directories that
     have been seen by the client and the current one of those selected.  */
  extern List *root_directories;
***************
*** 622,627 ****
--- 638,645 ----
  typedef	int (*DIRLEAVEPROC) PROTO ((void *callerdat, char *dir, int err,
  				    char *update_dir, List *entries));
  
+ typedef int (*PERMPROC) PROTO ((const char *dir));
+ 
  extern int mkmodules PROTO ((char *dir));
  extern int init PROTO ((int argc, char **argv));
  
***************
*** 635,641 ****
  		     void *callerdat,
  		     int argc, char *argv[], int local, int which,
  		     int aflag, int readlock, char *update_preload,
! 		     int dosrcs));
  void SIG_beginCrSect PROTO((void));
  void SIG_endCrSect PROTO((void));
  int SIG_inCrSect PROTO((void));
--- 653,659 ----
  		     void *callerdat,
  		     int argc, char *argv[], int local, int which,
  		     int aflag, int readlock, char *update_preload,
! 		     int dosrcs, PERMPROC permproc));
  void SIG_beginCrSect PROTO((void));
  void SIG_endCrSect PROTO((void));
  int SIG_inCrSect PROTO((void));
***************
*** 861,867 ****
  extern unsigned long int lookup_command_attribute PROTO((char *));
  
  #if defined(AUTH_CLIENT_SUPPORT) || defined(AUTH_SERVER_SUPPORT)
! char *scramble PROTO ((char *str));
  char *descramble PROTO ((char *str));
  #endif /* AUTH_CLIENT_SUPPORT || AUTH_SERVER_SUPPORT */
  
--- 879,885 ----
  extern unsigned long int lookup_command_attribute PROTO((char *));
  
  #if defined(AUTH_CLIENT_SUPPORT) || defined(AUTH_SERVER_SUPPORT)
! char *enscramble PROTO ((char *str));
  char *descramble PROTO ((char *str));
  #endif /* AUTH_CLIENT_SUPPORT || AUTH_SERVER_SUPPORT */
  
***************
*** 875,880 ****
--- 893,924 ----
  
  #include "server.h"
  
+ 
+ #ifdef MYSQL_SUPPORT
+ /* MySQL config variables */
+ extern char *mysql_host;
+ extern int mysql_portnum;
+ extern char *mysql_unix_socket;
+ extern char *mysql_user;
+ extern char *mysql_passwd;
+ extern char *mysql_db;
+ extern char *mysql_passwd_table;
+ extern char *mysql_username_col;
+ extern char *mysql_passwd_col;
+ extern char *mysql_serveruser_table;
+ extern char *mysql_cvsuser_col;
+ extern char *mysql_serveruser_col;
+ extern char *mysql_encrypt;
+ extern char *mysql_default_user;
+ 
+ /* The database itself; NULL if inactive */
+ extern MYSQL *CVS_mysql;
+ 
+ extern void cvs_mysql_connect PROTO ((void));
+ extern void cvs_mysql_disconnect PROTO ((void));
+ #endif /* MYSQL_SUPPORT */
+ 
+ 
  /* From server.c and documented there.  */
  extern void cvs_output PROTO ((const char *, size_t));
  extern void cvs_output_binary PROTO ((char *, size_t));
diff --exclude=CVS -crN ../pristine-ccvs/src/diff.c ./src/diff.c
*** ./src/diff.c	Wed Apr 14 19:12:26 1999
--- ./src/diff.c	Thu Jul 27 15:36:54 2000
***************
*** 393,399 ****
      /* start the recursion processor */
      err = start_recursion (diff_fileproc, diff_filesdoneproc, diff_dirproc,
  			   diff_dirleaveproc, NULL, argc, argv, local,
! 			   which, 0, 1, (char *) NULL, 1);
  
      /* clean up */
      free (options);
--- 393,399 ----
      /* start the recursion processor */
      err = start_recursion (diff_fileproc, diff_filesdoneproc, diff_dirproc,
  			   diff_dirleaveproc, NULL, argc, argv, local,
! 			   which, 0, 1, (char *) NULL, 1, verify_read);
  
      /* clean up */
      free (options);
diff --exclude=CVS -crN ../pristine-ccvs/src/edit.c ./src/edit.c
*** ./src/edit.c	Tue Jun 13 16:50:10 2000
--- ./src/edit.c	Thu Jul 27 15:36:54 2000
***************
*** 103,109 ****
      err = start_recursion (onoff_fileproc, onoff_filesdoneproc,
  			   (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  			   argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
! 			   0);
  
      Lock_Cleanup ();
      return err;
--- 103,109 ----
      err = start_recursion (onoff_fileproc, onoff_filesdoneproc,
  			   (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  			   argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
! 			   0, verify_write);
  
      Lock_Cleanup ();
      return err;
***************
*** 246,252 ****
  	err += start_recursion (dummy_fileproc, (FILESDONEPROC) NULL,
  				(DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  				argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
! 				0);
  
  	send_to_server ("noop\012", 0);
  	if (strcmp (command_name, "release") == 0)
--- 246,252 ----
  	err += start_recursion (dummy_fileproc, (FILESDONEPROC) NULL,
  				(DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  				argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
! 				0, NULL);
  
  	send_to_server ("noop\012", 0);
  	if (strcmp (command_name, "release") == 0)
***************
*** 263,269 ****
  	err += start_recursion (ncheck_fileproc, (FILESDONEPROC) NULL,
  				(DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  				argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
! 				0);
  	Lock_Cleanup ();
      }
      return err;
--- 263,269 ----
  	err += start_recursion (ncheck_fileproc, (FILESDONEPROC) NULL,
  				(DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  				argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
! 				0, NULL);
  	Lock_Cleanup ();
      }
      return err;
***************
*** 441,447 ****
      err = start_recursion (edit_fileproc, (FILESDONEPROC) NULL,
  			   (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  			   argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
! 			   0);
  
      err += send_notifications (argc, argv, local);
  
--- 441,447 ----
      err = start_recursion (edit_fileproc, (FILESDONEPROC) NULL,
  			   (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  			   argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
! 			   0, verify_write);
  
      err += send_notifications (argc, argv, local);
  
***************
*** 608,614 ****
      err = start_recursion (unedit_fileproc, (FILESDONEPROC) NULL,
  			   (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  			   argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
! 			   0);
  
      err += send_notifications (argc, argv, local);
  
--- 608,614 ----
      err = start_recursion (unedit_fileproc, (FILESDONEPROC) NULL,
  			   (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  			   argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
! 			   0, verify_write);
  
      err += send_notifications (argc, argv, local);
  
***************
*** 1131,1135 ****
      return start_recursion (editors_fileproc, (FILESDONEPROC) NULL,
  			    (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  			    argc, argv, local, W_LOCAL, 0, 1, (char *)NULL,
! 			    0);
  }
--- 1131,1135 ----
      return start_recursion (editors_fileproc, (FILESDONEPROC) NULL,
  			    (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  			    argc, argv, local, W_LOCAL, 0, 1, (char *)NULL,
! 			    0, verify_write);
  }
diff --exclude=CVS -crN ../pristine-ccvs/src/error.c ./src/error.c
*** ./src/error.c	Wed Jun 28 09:04:18 2000
--- ./src/error.c	Thu Jul 27 15:36:54 2000
***************
*** 66,71 ****
--- 66,74 ----
  {
      rcs_cleanup ();
      Lock_Cleanup ();
+ #ifdef MYSQL_SUPPORT
+     cvs_mysql_disconnect();
+ #endif /* MYSQL_SUPPORT */
  #ifdef SERVER_SUPPORT
      if (server_active)
  	server_cleanup (0);
diff --exclude=CVS -crN ../pristine-ccvs/src/import.c ./src/import.c
*** ./src/import.c	Mon Jul 17 10:56:21 2000
--- ./src/import.c	Thu Jul 27 15:36:54 2000
***************
*** 282,287 ****
--- 282,290 ----
  	error (1, 0, "attempt to import the repository");
      }
  
+     if (! verify_create (repository))
+        error (1, 0, "User %s cannot create files in %s", getcaller(), argv[0]);
+ 
      /*
       * Make all newly created directories writable.  Should really use a more
       * sophisticated security mechanism here.
diff --exclude=CVS -crN ../pristine-ccvs/src/local_auth.c ./src/local_auth.c
*** ./src/local_auth.c	Wed Dec 31 18:00:00 1969
--- ./src/local_auth.c	Thu Jul 27 15:36:54 2000
***************
*** 0 ****
--- 1,444 ----
+ /* local_auth.c: subroutines for getting auth info from a mysql database.
+  * 
+  * This file is part of GNU CVS.
+  * 
+  * GNU CVS 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, 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.  
+  * 
+  * Last modified by: Karl Fogel <kfogel@@collab.net>
+  */
+ 
+ #include "cvs.h"
+ 
+ /* Use only special local auth systems (such as DB, etc) */
+ int local_authentication = 0;
+ 
+ #ifdef MYSQL_SUPPORT
+ 
+ /* Fill in the value of PERMS according to the results of QUERY.
+  * 0 means no access, 1 means read-only, 2 means read-write.
+  *
+  * Return value is number of rows processed; 0 means this query
+  * retrieved no rows, which may be of interest to the caller!
+  */
+ static int
+ find_tigris_privs_query (mysql, perms, query)
+      MYSQL *mysql;
+      int *perms;
+      char *query;
+ {
+     MYSQL_RES *res;
+     MYSQL_ROW row;
+     int rows_found = 0;
+ 
+     mysql_real_query (mysql, query, strlen (query));
+     res = mysql_use_result (mysql);
+     /* Check for 'Y's in the results.
+      * We presume that read is the first column, and write is the second.
+      */
+     while ((row = mysql_fetch_row (res))) 
+     {
+         rows_found++;
+ 	if (row[0] && (row[0][0] == 'Y') && (*perms == 0))
+ 	    *perms = 1;
+ 	if (row[1] && (row[1][0] == 'Y') && (*perms != 2))
+ 	    *perms = 2;
+     }
+     mysql_free_result (res);
+ 
+     return rows_found;
+ }
+ 
+ 
+ /* Check for permission to read/write (for us, write and create are
+  * the same) from the Tigris database.  Note that domain level privs
+  * supercede project level, which supercede module level.  At this
+  * time there is no way to remove privs from someone who has them
+  * higher up. 
+  *
+  * Returns 0 for no privs, 1 for read-only privs, and 2 for read-write
+  * privs (we assume that if write privs exist, read ones do as well).
+  */
+ static int
+ find_tigris_privs (project, project_len, module, module_len)
+      const char *project;
+      int project_len; 
+      const char *module;
+      int module_len;
+ {
+     char *username;
+     int perms = 0;
+ 
+     /* This will give the CVS username, or the actual login name. Either way,
+      * this is what we want to use for privileges
+      */
+     username = getcaller ();
+     
+     if (CVS_mysql == NULL) 
+     {
+ 	error (1, 0 , "database connection not established");
+     } 
+     else 
+     {
+ 	char *query;
+ 
+ 	/*** STEP 1: check domain-level configs ***/
+ 
+ 	/* SELECT checkout_priv,commit_priv FROM domain_privs WHERE username =
+ 	 * '<usr>'
+ 	 * strlen ("SELECT... WHERE username = ''\0") = 72
+ 	 */
+ 	query = xmalloc (72 + strlen(username) + 64 /* for good measure */);
+ 	sprintf (query, "SELECT checkout_priv,commit_priv FROM domain_privs "
+                  "WHERE username = '%s'", username);
+ 	find_tigris_privs_query (CVS_mysql, &perms, query);
+ 	free (query);
+ 	
+ 	/*** STEP 2: check project_priv and project_modules configs ***/
+ 
+ 	if ((perms != 2) && (project != NULL)) 
+         {
+             /* If there is an entry in the module_modules table for
+              * this user/project/module, then we want to abide by it.
+              * Otherwise, we just ask the privileges in the
+              * project_privs table.
+              */
+ 
+             int rows = 0;   /* Number of rows retrieved by query. */
+ 
+ 	    if (module != NULL) 
+             {
+ 		/* SELECT checkout_priv,commit_priv FROM
+ 		 * project_privs,project_modules WHERE
+ 		 * project_privs.project = '<project>' AND
+ 		 * project_privs.username = '<user>' AND
+ 		 * project_modules.project = '<project>' AND
+ 		 * project_modules.module = '<mod>' and
+ 		 * project_modules.private = 'N'
+ 		 * strlen (...) = 232 */
+ 		query = xmalloc (232 + (2 * project_len) + module_len
+                                  + strlen (username) + 64);
+ 		sprintf (query, "SELECT checkout_priv,commit_priv FROM "
+                          "project_privs,project_modules WHERE "
+                          "project_privs.project = '%.*s' AND "
+                          "project_privs.username = '%s' AND "
+                          "project_modules.project = '%.*s' AND "
+                          "project_modules.module = '%.*s' AND "
+                          "project_modules.private = 'N'",
+                          project_len, project, username,
+                          project_len, project, module_len, module);
+                 rows = find_tigris_privs_query (CVS_mysql, &perms, query);
+                 free (query);
+ 	    }
+ 
+             /* If the above retrieved no rows, then there are no
+              * explicit permissions for this module, so look at
+              * project-level permissions instead.
+              */
+             if (rows == 0)
+             {
+ 		/* SELECT checkout_priv,commit_priv FROM project_privs
+ 		 * WHERE project = '<project>' AND username = '<user>'
+ 		 * strlen("SELECT ch...= '' AND username = ''\0") = 90
+ 		 */
+ 		query = xmalloc (90 + project_len + strlen (username) + 64);
+ 		sprintf (query, "SELECT checkout_priv,commit_priv FROM "
+                          "project_privs WHERE project = '%.*s' AND "
+                          "username = '%s'",
+                          project_len, project, username);
+                 find_tigris_privs_query (CVS_mysql, &perms, query);
+                 free (query);
+ 	    }
+ 	}
+ 
+ 	/*** STEP 3: check module_privs table ***/
+ 
+ 	/* SELECT checkout_priv,commit_priv FROM module_privs WHERE
+ 	 * project = '<project>' AND module = '<module>'
+ 	 * AND username = '<user>'
+ 	 * strlen ("SEl... '' AND module = '' AND username = ''\0") = 105
+ 	 */
+ 	if ((perms != 2) && (project != NULL) && (module != NULL)) 
+         {
+ 	    query = xmalloc (105 + project_len + module_len
+                              + strlen (username) + 64);
+ 	    sprintf (query, "SELECT checkout_priv,commit_priv FROM "
+                      "module_privs WHERE project = '%.*s' AND "
+                      "module = '%.*s' AND username = '%s'",
+                      project_len, project, module_len, module, username);
+ 	    find_tigris_privs_query (CVS_mysql, &perms, query);
+ 	    free (query);
+ 	}
+     }
+     
+     return perms;
+ }
+ 
+ #endif /* MYSQL_SUPPORT */
+ 
+ 
+ static int
+ find_perms (dir, perm)
+    const char *dir;
+    char *perm;
+ {
+    int rootlen;
+    int retval = 1;
+    char all_perms[4];
+    int matched_root = 0;
+ 
+    all_perms[0] = '\0';
+ 
+    if (! local_authentication)
+    {
+       strcpy (perm, "rwc");
+       return 0;
+    }
+ 
+ #ifdef MYSQL_SUPPORT
+ 
+    rootlen = strlen (CVSroot_directory);
+ 
+    if ((strncmp (dir, CVSroot_directory, rootlen) == 0)
+        && ((dir[rootlen] == '/') || (dir[rootlen] == '\0')))
+    {
+        matched_root = 1;
+    }
+    else  /* If no match, try resolving as a symlink and matching again. */
+    {
+        /*
+         * FIXME: in general, CVS is not prepared for the case where
+         * one of CVSroot_directory or repository/plus/subdir is/has a
+         * symlink.  The problem is that CVS uses direct strncmp()'s to
+         * determine if the repository is a prefix of a given file and
+         * to strip it off if so.  What CVS should be doing is a more
+         * sophisticated comparison that handles the symlink case
+         * transparently on either side.
+         *
+         * So, reassigning CVSroot_directory here solves part of
+         * the problem (for most commands, maybe all, it gets us past
+         * an assertion in lock.c), but there are other places in the
+         * code that just do direct strncmp()'s, and those may still
+         * fail.
+         */
+ 
+        char *root;
+        root = CVSroot_directory;
+        resolve_symlink (&root);
+        rootlen = strlen (root);
+        if ((strncmp (dir, root, rootlen) == 0)
+            && ((dir[rootlen] == '/') || (dir[rootlen] == '\0')))
+        {
+            matched_root = 1;
+        }
+ 
+        /* We cannot guarantee that CVSroot_directory was malloc'd, so
+         * we don't free it, just reassign.
+         */
+        CVSroot_directory = root;
+    }
+ 
+    if (matched_root)
+    {
+        const char *project, *module, *path;
+        int modlen, projlen;
+        int privs;
+ 
+        if (dir[rootlen] == '/')
+        {
+ 	   project = dir + rootlen + 1;   /* points to project/module/path */
+ 	   module = strchr (project, '/');
+ 	   if (module != NULL)
+            {
+ 	       projlen = module++ - project;
+ 	       path = strchr (module, '/');
+ 	       if (path != NULL) {
+ 		   modlen = path++ - module;
+ 	       } 
+                else {
+ 		   modlen = strlen (module);
+ 	       }
+ 	   } 
+            else 
+            {
+ 	       projlen = strlen (project);
+ 	       modlen = 0;
+ 	       path = NULL;
+ 	   }
+        }
+        else
+        {
+ 	   path = module = project = NULL;
+ 	   modlen = projlen = 0;
+        }
+ 
+        if (privs = find_tigris_privs (project, projlen, module, modlen))
+        {
+ 	   strcpy (perm, privs == 2 ? "rwc" : "r");
+ 	   retval = 0;
+        }
+ 
+ #if 0
+        /* uncomment for debugging */
+        printf ("PROJ: %.*s MOD: %.*s DIR: %s\n", projlen, project,
+                modlen, module, path);
+ #endif
+    } 
+    else 
+    {
+        strcpy (perm, "");
+    }
+ 
+    return retval;
+ 
+ #else  /* ! MYSQL_SUPPORT */
+    strcpy (perm, "rwc");
+    return 0;
+ #endif /* MYSQL_SUPPORT */
+ 
+ }
+ 
+ 
+ int
+ verify_read (dir)
+    const char *dir;
+ {
+    char perm[4];
+ 
+    if (find_perms (dir, perm))
+       return 0;
+    else
+       if (strchr (perm, 'r') == NULL)
+ 	 return 0;
+       else
+ 	 return 1;
+ }
+ 
+ 
+ int
+ verify_write (dir)
+    const char *dir;
+ {
+    char perm[4];
+ 
+    if (find_perms (dir, perm))
+       return 0;
+    else
+       if (strchr(perm, 'w') == NULL)
+ 	 return 0;
+       else
+ 	 return 1;
+ }
+ 
+ 
+ int
+ verify_create (dir)
+    const char *dir;
+ {
+    char perm[4];
+ 
+    if (find_perms (dir, perm))
+       return 0;
+    else
+    {
+       if (strchr(perm, 'c') == NULL)
+ 	 return 0;
+       else
+ 	 return 1;
+    }
+ }
+ 
+ 
+ /* kff todo: this func apparently never returns true in the Tigris
+  * repository, because it's looking for a file CVSROOT/admin, which we
+  * don't have.  And it's not consulting the database at all.  Ask
+  * Jason what our policy is going to be.
+  *
+  * The way to start using this function is to modify find_perms() to
+  * put an `a' into the permstring, then strchr() for `a'.
+  */
+ int
+ verify_admin ()
+ {
+    static int is_admin_set = 0;    /* Non-zero if been here already. */
+    static int is_the_admin = 0;    /* What was discovered last time here. */
+ 
+    char *filename;
+    FILE *fp;
+    char *linebuf = NULL;
+    int  linebuf_len;
+    char *name;
+ 
+ 
+    if (! local_authentication)
+       return 1;
+ 
+    if (is_admin_set)
+    {
+       return (is_the_admin);
+    }
+    else
+    {
+       is_admin_set = 1;
+ 
+       filename = xmalloc (strlen (CVSroot_directory)
+ 			  + strlen ("/CVSROOT")
+ 			  + strlen ("/admin")
+ 			  + 1);
+ 
+       strcpy (filename, CVSroot_directory);
+       strcat (filename, "/CVSROOT");
+       strcat (filename, "/admin");
+ 
+       fp = CVS_FOPEN (filename, "r");
+       if (fp != NULL)
+       {
+ 	 if (getline (&linebuf, &linebuf_len, fp) >= 0)
+ 	 {
+ 	    name = strtok (linebuf, "\n");
+ 	    if (strcmp (getcaller(), name) == 0)
+ 	       is_the_admin = 1;
+ 	    free (linebuf);
+ 	 }
+ 	 if (ferror (fp))
+ 	    error (1, errno, "cannot read %s", filename);
+ 	 if (fclose (fp) < 0)
+ 	    error (0, errno, "cannot close %s", filename);
+       }
+    }
+ 
+    return (is_the_admin);
+ }
+ 
+ 
+ int
+ verify_owner (dir)
+    const char *dir;
+ {
+    char *filename;
+    char *linebuf = NULL;
+    int linebuf_len;
+    char *owner;
+    FILE *fp;
+    int retval = 0;
+ 
+    if (! local_authentication)
+       return 1;
+ 
+    if (verify_admin ())
+       return 1;
+ 
+    /* kff todo: we have this skeleton in place for finer-grained MySQL
+     * permission.  Talk to Jason about whether we actually want it or
+     * not. 
+     */
+ 
+    return 1;
+ }
diff --exclude=CVS -crN ../pristine-ccvs/src/lock.c ./src/lock.c
*** ./src/lock.c	Thu Jul 27 15:36:12 2000
--- ./src/lock.c	Thu Jul 27 15:36:54 2000
***************
*** 904,910 ****
      lock_tree_list = getlist ();
      err = start_recursion ((FILEPROC) NULL, lock_filesdoneproc,
  			   (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL, argc,
! 			   argv, local, W_LOCAL, aflag, 0, (char *) NULL, 0);
      sortlist (lock_tree_list, fsortcmp);
      if (Writer_Lock (lock_tree_list) != 0)
  	error (1, 0, "lock failed - giving up");
--- 904,911 ----
      lock_tree_list = getlist ();
      err = start_recursion ((FILEPROC) NULL, lock_filesdoneproc,
  			   (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL, argc,
! 			   argv, local, W_LOCAL, aflag, 0, (char *) NULL, 0,
! 			   NULL);
      sortlist (lock_tree_list, fsortcmp);
      if (Writer_Lock (lock_tree_list) != 0)
  	error (1, 0, "lock failed - giving up");
diff --exclude=CVS -crN ../pristine-ccvs/src/log.c ./src/log.c
*** ./src/log.c	Thu Jun 22 11:25:33 2000
--- ./src/log.c	Thu Jul 27 15:36:54 2000
***************
*** 365,371 ****
  			   (DIRLEAVEPROC) NULL, (void *) &log_data,
  			   argc - optind, argv + optind, local,
  			   W_LOCAL | W_REPOS | W_ATTIC, 0, 1,
! 			   (char *) NULL, 1);
  
      while (log_data.revlist)
      {
--- 365,371 ----
  			   (DIRLEAVEPROC) NULL, (void *) &log_data,
  			   argc - optind, argv + optind, local,
  			   W_LOCAL | W_REPOS | W_ATTIC, 0, 1,
! 			   (char *) NULL, 1, verify_read);
  
      while (log_data.revlist)
      {
diff --exclude=CVS -crN ../pristine-ccvs/src/login.c ./src/login.c
*** ./src/login.c	Mon Jul 17 10:56:21 2000
--- ./src/login.c	Thu Jul 27 15:36:54 2000
***************
*** 143,149 ****
  
      passfile = construct_cvspass_filename ();
      typed_password = getpass ("CVS password: ");
!     typed_password = scramble (typed_password);
  
      /* Force get_cvs_password() to use this one (when the client
       * confirms the new password with the server), instead of
--- 143,149 ----
  
      passfile = construct_cvspass_filename ();
      typed_password = getpass ("CVS password: ");
!     typed_password = enscramble (typed_password);
  
      /* Force get_cvs_password() to use this one (when the client
       * confirms the new password with the server), instead of
diff --exclude=CVS -crN ../pristine-ccvs/src/main.c ./src/main.c
*** ./src/main.c	Mon Jul 17 10:56:21 2000
--- ./src/main.c	Thu Jul 27 15:36:54 2000
***************
*** 238,243 ****
--- 238,244 ----
      "    -r           Make checked-out files read-only.\n",
      "    -w           Make checked-out files read-write (default).\n",
      "    -l           Turn history logging off.\n",
+     "    -L           Do `local' authentication (e.g., from database, etc).\n",
      "    -n           Do not execute anything that will change the disk.\n",
      "    -t           Show trace of program execution -- try with -n.\n",
      "    -v           CVS version and copyright.\n",
***************
*** 431,437 ****
      int help = 0;		/* Has the user asked for help?  This
  				   lets us support the `cvs -H cmd'
  				   convention to give help for cmd. */
!     static const char short_options[] = "+Qqrwtnlvb:T:e:d:Hfz:s:xa";
      static struct option long_options[] =
      {
          {"help", 0, NULL, 'H'},
--- 432,439 ----
      int help = 0;		/* Has the user asked for help?  This
  				   lets us support the `cvs -H cmd'
  				   convention to give help for cmd. */
! 
!     static const char short_options[] = "+Qqrwtnlvb:T:e:d:LHfz:s:xa";
      static struct option long_options[] =
      {
          {"help", 0, NULL, 'H'},
***************
*** 604,609 ****
--- 606,614 ----
  		free_CVSroot = 1;
  		cvs_update_env = 1;	/* need to update environment */
  		break;
+ 	    case 'L':
+ 		local_authentication = 1;
+ 		break;
  	    case 'H':
  	        help = 1;
  		break;
***************
*** 997,1002 ****
--- 1002,1026 ----
  		   if we didn't, then there would be no way to check in a new
  		   CVSROOT/config file to fix the broken one!  */
  		parse_config (CVSroot_directory);
+ #ifdef MYSQL_SUPPORT
+ 		/* We want to connect to the MySQL server under pretty
+ 		 * much the same conditions as parsing the config file,
+ 		 * and ASAP afterwards (before we actually need to do
+ 		 * anything involving permissions, when we might need
+ 		 * to access it).
+ 		 *
+ 		 * N.B. that this isn't quite right when looping; we
+ 		 * might want to connect to several different servers
+ 		 * for different server roots.  Not quite sure how to
+ 		 * deal with that at the moment.  We don't need it for
+ 		 * Tigris, so will quietly ignore.  Note that
+ 		 * parse_config() does the same thing (ignoring multiple
+ 		 * calls by using a static state variable).
+ 		 * 
+ 		 * This isn't the right place for this comment, either.
+ 		 */
+ 		cvs_mysql_connect();
+ #endif /* MYSQL_SUPPORT */
  	    }
  
  #ifdef CLIENT_SUPPORT
***************
*** 1038,1043 ****
--- 1062,1071 ----
      } /* end of stuff that gets done if the user DOESN'T ask for help */
  
      Lock_Cleanup ();
+ 
+ #ifdef MYSQL_SUPPORT
+     cvs_mysql_disconnect();
+ #endif /* MYSQL_SUPPORT */
  
      free (program_path);
      if (CVSroot_cmdline != NULL)
diff --exclude=CVS -crN ../pristine-ccvs/src/mkmodules.c ./src/mkmodules.c
*** ./src/mkmodules.c	Thu Jul 27 11:09:20 2000
--- ./src/mkmodules.c	Thu Jul 27 15:36:54 2000
***************
*** 341,346 ****
--- 341,351 ----
      {CVSROOTADM_WRITERS,
  	"a %s file specifies read/write users",
  	NULL},
+ #ifdef MYSQL
+     {CVSROOTADM_MYSQL,
+ 	"a %s file configures the use of a MySQL server",
+ 	NULL},
+ #endif
  
      /* Some have suggested listing CVSROOTADM_PASSWD here too.  This
         would mean that CVS commands which operate on the
***************
*** 359,364 ****
--- 364,370 ----
         elsewhere, using a similar password, etc, and so saving old
         passwords, even hashed, is probably not a good idea.  */
  
+ 
      {CVSROOTADM_CONFIG,
  	 "a %s file configures various behaviors",
  	 config_contents},
***************
*** 857,862 ****
--- 863,871 ----
  	return get_responses_and_close ();
      }
  #endif /* CLIENT_SUPPORT */
+ 
+     if (! verify_admin ())
+        error (1, 0, "Only the administrator can initialize new CVS stuff");
  
      /* Note: we do *not* create parent directories as needed like the
         old cvsinit.sh script did.  Few utilities do that, and a
diff --exclude=CVS -crN ../pristine-ccvs/src/mysqlsubr.c ./src/mysqlsubr.c
*** ./src/mysqlsubr.c	Wed Dec 31 18:00:00 1969
--- ./src/mysqlsubr.c	Thu Jul 27 15:36:54 2000
***************
*** 0 ****
--- 1,77 ----
+ /* mysqlsubr.c --- subroutines for dealing with the MySQL database
+  * 
+  * This file is part of GNU CVS.
+  * 
+  * GNU CVS 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, 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.  
+  * 
+  * Last modified by: Karl Fogel <kfogel@@collab.net>
+  */
+ 
+ #include "cvs.h"
+ 
+ #ifdef MYSQL_SUPPORT
+ 
+ /* MySQL config variables */
+ char *mysql_host = NULL;
+ int mysql_portnum = 0;
+ char *mysql_unix_socket = NULL;
+ char *mysql_user = NULL;
+ char *mysql_passwd = NULL;
+ char *mysql_db = NULL;
+ char *mysql_passwd_table = NULL;
+ char *mysql_username_col = NULL;
+ char *mysql_passwd_col = NULL;
+ char *mysql_serveruser_table = NULL;
+ char *mysql_cvsuser_col = NULL;
+ char *mysql_serveruser_col = NULL;
+ char *mysql_encrypt = NULL;
+ char *mysql_default_user = NULL;
+ 
+ /* The database itself; NULL if inactive */
+ MYSQL *CVS_mysql = NULL;
+ 
+ /* Initialize the MySQL connection */
+ void
+ cvs_mysql_connect(void)
+ {
+     /* Check to see we're not reconnecting */
+     if (CVS_mysql != NULL)
+ 	return;
+ 
+     /* Only bother if MySQL use is configured */
+     if (!mysql_host && !mysql_portnum && !mysql_unix_socket
+ 	&& !mysql_user && !mysql_passwd && !mysql_db)
+ 	return;
+ 
+     /* We require several fields to be present */
+     if (!mysql_user || !mysql_passwd || !mysql_db) {
+ 	error(1, 0, "missing required database parameters in CVSROOT/config");
+     }
+ 
+     CVS_mysql = mysql_init(NULL);
+     if (!mysql_real_connect(CVS_mysql, mysql_host, mysql_user, mysql_passwd,
+ 			    mysql_db, mysql_portnum, mysql_unix_socket, 0)) {
+ 	error(1, 0, "failed to connect to database: Error: %s\n",
+ 	      mysql_error(CVS_mysql));
+     }
+ }
+ 
+ /* Close the MySQL connection */
+ void
+ cvs_mysql_disconnect(void)
+ {
+     if (CVS_mysql != NULL) {
+ 	mysql_close(CVS_mysql);
+ 	CVS_mysql = NULL;
+     }
+ }
+ 
+ #endif /* MYSQL_SUPPORT */
diff --exclude=CVS -crN ../pristine-ccvs/src/parseinfo.c ./src/parseinfo.c
*** ./src/parseinfo.c	Mon Mar 13 13:15:31 2000
--- ./src/parseinfo.c	Thu Jul 27 15:36:54 2000
***************
*** 384,391 ****
--- 384,423 ----
  		strcpy (logHistory, p);
  	    }
  	}
+ #ifdef MYSQL_SUPPORT
+ 	else if (strcmp (line, "MysqlPort") == 0) {
+ 	    mysql_portnum = atoi(p);
+ 	}
+ 	else if (strncmp (line, "Mysql", 5) == 0)
+ 	{
+ 	    char *key = line + 5;
+ 	    char **param;
+ 
+ 	    if (!strcmp(key, "Host")) param = &mysql_host;
+ 	    else if (!strcmp(key, "UnixSocket")) param = &mysql_unix_socket;
+ 	    else if (!strcmp(key, "User")) param = &mysql_user;
+ 	    else if (!strcmp(key, "Passwd")) param = &mysql_passwd;
+ 	    else if (!strcmp(key, "DB")) param = &mysql_db;
+ 	    else if (!strcmp(key, "PasswdTable")) param = &mysql_passwd_table;
+ 	    else if (!strcmp(key, "UsernameCol")) param = &mysql_username_col;
+ 	    else if (!strcmp(key, "PasswdCol")) param = &mysql_passwd_col;
+ 	    else if (!strcmp(key, "ServerUserTable")) 
+ 		param = &mysql_serveruser_table;
+ 	    else if (!strcmp(key, "CVSUserCol")) param = &mysql_cvsuser_col;
+ 	    else if (!strcmp(key, "ServerUserCol")) 
+ 		param = &mysql_serveruser_col;
+ 	    else if (!strcmp(key, "Encrypt")) param = &mysql_encrypt;
+ 	    else if (!strcmp(key, "DefaultUser")) param = &mysql_default_user;
+ 	    else goto keyword_error;
+ 
+ 	    if (*param != NULL)
+ 		free (*param);
+ 	    *param = xstrdup (p);
+ 	}
+ #endif /* MYSQL_SUPPORT */
  	else
  	{
+ 	keyword_error:
  	    /* We may be dealing with a keyword which was added in a
  	       subsequent version of CVS.  In that case it is a good idea
  	       to complain, as (1) the keyword might enable a behavior like
diff --exclude=CVS -crN ../pristine-ccvs/src/patch.c ./src/patch.c
*** ./src/patch.c	Thu Jul  6 12:45:19 2000
--- ./src/patch.c	Thu Jul 27 15:36:54 2000
***************
*** 326,331 ****
--- 326,337 ----
  	free (path);
      }
  
+     if (! verify_read(repository))
+     {
+        error (0, 0, "User %s cannot access %s", getcaller(), repository);
+        return (1);
+     }
+ 
      /* cd to the starting repository */
      if ( CVS_CHDIR (repository) < 0)
      {
***************
*** 355,361 ****
      err = start_recursion (patch_fileproc, (FILESDONEPROC) NULL, patch_dirproc,
  			   (DIRLEAVEPROC) NULL, NULL,
  			   argc - 1, argv + 1, local,
! 			   which, 0, 1, where, 1);
      free (where);
  
      return (err);
--- 361,367 ----
      err = start_recursion (patch_fileproc, (FILESDONEPROC) NULL, patch_dirproc,
  			   (DIRLEAVEPROC) NULL, NULL,
  			   argc - 1, argv + 1, local,
! 			   which, 0, 1, where, 1, verify_read);
      free (where);
  
      return (err);
diff --exclude=CVS -crN ../pristine-ccvs/src/rcs.c ./src/rcs.c
*** ./src/rcs.c	Mon Jul 17 10:56:21 2000
--- ./src/rcs.c	Thu Jul 27 15:36:54 2000
***************
*** 8505,8511 ****
      return start_recursion (annotate_fileproc, (FILESDONEPROC) NULL,
  			    (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  			    argc, argv, local, W_LOCAL, 0, 1, (char *)NULL,
! 			    1);
  }
  
  /*
--- 8505,8511 ----
      return start_recursion (annotate_fileproc, (FILESDONEPROC) NULL,
  			    (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  			    argc, argv, local, W_LOCAL, 0, 1, (char *)NULL,
! 			    1, verify_read);
  }
  
  /*
diff --exclude=CVS -crN ../pristine-ccvs/src/recurse.c ./src/recurse.c
*** ./src/recurse.c	Thu Jun 22 11:25:33 2000
--- ./src/recurse.c	Thu Jul 27 15:36:54 2000
***************
*** 35,40 ****
--- 35,41 ----
      int aflag;
      int readlock;
      int dosrcs;
+     PERMPROC permproc;
  };
  
  static int do_recursion PROTO ((struct recursion_frame *frame));
***************
*** 59,64 ****
--- 60,103 ----
  };
  
  
+ static int
+ verify_access (permproc, dir)
+     PERMPROC permproc;
+     char *dir;
+ {
+     char *hostdir;
+     int  retval;
+ 
+     if ((permproc == NULL) || (! local_authentication))
+     {
+         return 1;
+     }
+ 
+     if (repository == NULL)
+     {
+        if (isdir (CVSADM))
+ 	  hostdir = Name_Repository ((char *) NULL, dir);
+        else
+        {
+ 	  hostdir = xmalloc (strlen (CVSroot_directory)
+ 			     + 1
+ 			     + strlen (dir)
+ 			     + 1);
+ 	  strcpy (hostdir, CVSroot_directory);
+ 	  strcat (hostdir, "/");
+ 	  strcat (hostdir, dir);
+        }
+ 
+        retval = permproc (hostdir);
+        free (hostdir);
+     }
+     else
+     {
+        retval = permproc (repository);
+     }
+     return retval;
+ }
+ 
  /* Start a recursive command.
  
     Command line arguments (ARGC, ARGV) dictate the directories and
***************
*** 67,73 ****
  int
  start_recursion (fileproc, filesdoneproc, direntproc, dirleaveproc, callerdat,
  		 argc, argv, local, which, aflag, readlock,
! 		 update_preload, dosrcs)
      FILEPROC fileproc;
      FILESDONEPROC filesdoneproc;
      DIRENTPROC 	direntproc;
--- 106,112 ----
  int
  start_recursion (fileproc, filesdoneproc, direntproc, dirleaveproc, callerdat,
  		 argc, argv, local, which, aflag, readlock,
! 		 update_preload, dosrcs, permproc)
      FILEPROC fileproc;
      FILESDONEPROC filesdoneproc;
      DIRENTPROC 	direntproc;
***************
*** 105,110 ****
--- 144,150 ----
      int readlock;
      char *update_preload;
      int dosrcs;
+     PERMPROC permproc;
  {
      int i, err = 0;
  #ifdef CLIENT_SUPPORT
***************
*** 123,128 ****
--- 163,169 ----
      frame.aflag = aflag;
      frame.readlock = readlock;
      frame.dosrcs = dosrcs;
+     frame.permproc = permproc;
  
      expand_wild (argc, argv, &argc, &argv);
  
***************
*** 285,291 ****
  		file_to_try = xstrdup (argv[i]);
  
  	    if (isfile (file_to_try))
! 		addfile (&files_by_dir, dir, comp);
  	    else if (isdir (dir))
  	    {
  		if ((which & W_LOCAL) && isdir (CVSADM)
--- 326,342 ----
  		file_to_try = xstrdup (argv[i]);
  
  	    if (isfile (file_to_try))
! 	    {
! 	        if (! verify_access (frame.permproc, dir))
! 		{
! 		    error (0, 0, "User '%s' cannot access %s",
! 			   getcaller(), dir);
! 		}
! 		else
! 		{
! 		   addfile (&files_by_dir, dir, comp);
! 		}
! 	    }
  	    else if (isdir (dir))
  	    {
  		if ((which & W_LOCAL) && isdir (CVSADM)
***************
*** 622,627 ****
--- 673,687 ----
  	    error (1, errno, "could not get working directory");
      }
      srepository = repository;		/* remember what to free */
+ 
+     /*
+      * Do we have access to this directory?
+      */
+     if (! verify_access (frame->permproc, update_dir))
+     {
+        error (0, 0, "User '%s' cannot access %s", getcaller(), update_dir);
+        return (1);
+     }
  
      fileattr_startdir (repository);
  
diff --exclude=CVS -crN ../pristine-ccvs/src/remove.c ./src/remove.c
*** ./src/remove.c	Thu Jun 22 11:25:33 2000
--- ./src/remove.c	Thu Jul 27 15:36:54 2000
***************
*** 90,96 ****
  		start_recursion (remove_force_fileproc, (FILESDONEPROC) NULL,
  				 (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL,
  				 (void *) NULL, argc, argv, local, W_LOCAL,
! 				 0, 0, (char *) NULL, 0);
  	    }
  	    /* else FIXME should probably act as if the file doesn't exist
  	       in doing the following checks.  */
--- 90,96 ----
  		start_recursion (remove_force_fileproc, (FILESDONEPROC) NULL,
  				 (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL,
  				 (void *) NULL, argc, argv, local, W_LOCAL,
! 				 0, 0, (char *) NULL, 0, NULL);
  	    }
  	    /* else FIXME should probably act as if the file doesn't exist
  	       in doing the following checks.  */
***************
*** 113,119 ****
      err = start_recursion (remove_fileproc, (FILESDONEPROC) NULL,
                             remove_dirproc, (DIRLEAVEPROC) NULL, NULL,
  			   argc, argv,
!                            local, W_LOCAL, 0, 1, (char *) NULL, 1);
  
      if (removed_files)
  	error (0, 0, "use '%s commit' to remove %s permanently", program_name,
--- 113,120 ----
      err = start_recursion (remove_fileproc, (FILESDONEPROC) NULL,
                             remove_dirproc, (DIRLEAVEPROC) NULL, NULL,
  			   argc, argv,
!                            local, W_LOCAL, 0, 1, (char *) NULL, 1,
! 			   verify_create);
  
      if (removed_files)
  	error (0, 0, "use '%s commit' to remove %s permanently", program_name,
diff --exclude=CVS -crN ../pristine-ccvs/src/rtag.c ./src/rtag.c
*** ./src/rtag.c	Thu Jun 15 12:33:32 2000
--- ./src/rtag.c	Thu Jul 27 15:36:54 2000
***************
*** 314,320 ****
      err = start_recursion (check_fileproc, check_filesdoneproc,
                             (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
                             argc - 1, argv + 1, local, which, 0, 1,
!                            where, 1);
      
      if (err)
      {
--- 314,320 ----
      err = start_recursion (check_fileproc, check_filesdoneproc,
                             (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
                             argc - 1, argv + 1, local, which, 0, 1,
!                            where, 1, verify_write);
      
      if (err)
      {
***************
*** 325,331 ****
      err = start_recursion (rtag_fileproc, rtag_filesdoneproc, rtag_dirproc,
  			   (DIRLEAVEPROC) NULL, NULL,
  			   argc - 1, argv + 1, local,
! 			   which, 0, 0, where, 1);
      free (where);
      dellist(&mtlist);
  
--- 325,331 ----
      err = start_recursion (rtag_fileproc, rtag_filesdoneproc, rtag_dirproc,
  			   (DIRLEAVEPROC) NULL, NULL,
  			   argc - 1, argv + 1, local,
! 			   which, 0, 0, where, 1, verify_write);
      free (where);
      dellist(&mtlist);
  
diff --exclude=CVS -crN ../pristine-ccvs/src/scramble.c ./src/scramble.c
*** ./src/scramble.c	Fri Jun 27 15:16:08 1997
--- ./src/scramble.c	Thu Jul 27 15:36:54 2000
***************
*** 69,77 ****
    243,233,253,240,194,250,191,155,142,137,245,235,163,242,178,152 };
  
  
! /* SCRAMBLE and DESCRAMBLE work like this:
   *
!  * scramble(STR) returns SCRM, a scrambled copy of STR.  SCRM[0] is a
   * single letter indicating the scrambling method.  As of this
   * writing, the only legal method is 'A', but check the code for more
   * up-to-date information.  The copy will have been allocated with
--- 69,77 ----
    243,233,253,240,194,250,191,155,142,137,245,235,163,242,178,152 };
  
  
! /* ENSCRAMBLE and DESCRAMBLE work like this:
   *
!  * enscramble(STR) returns SCRM, a scrambled copy of STR.  SCRM[0] is a
   * single letter indicating the scrambling method.  As of this
   * writing, the only legal method is 'A', but check the code for more
   * up-to-date information.  The copy will have been allocated with
***************
*** 84,90 ****
  
  /* Return a malloc'd, scrambled version of STR. */
  char *
! scramble (str)
      char *str;
  {
      int i;
--- 84,90 ----
  
  /* Return a malloc'd, scrambled version of STR. */
  char *
! enscramble (str)
      char *str;
  {
      int i;
***************
*** 126,133 ****
      }
  #endif  /* DIAGNOSTIC */
  
!     /* Method `A' is symmetrical, so scramble again to decrypt. */
!     s = scramble (str + 1);
  
      /* Shift the whole string one char to the left, pushing the unwanted
         'A' off the left end.  Safe, because s is null-terminated. */
--- 126,133 ----
      }
  #endif  /* DIAGNOSTIC */
  
!     /* Method `A' is symmetrical, so enscramble again to decrypt. */
!     s = enscramble (str + 1);
  
      /* Shift the whole string one char to the left, pushing the unwanted
         'A' off the left end.  Safe, because s is null-terminated. */
***************
*** 165,171 ****
      for (i = 0; i < 5; i++)
      {
  	printf ("clear%d: %s\n", i, cleartexts[i]);
! 	e = scramble (cleartexts[i]);
  	printf ("scram%d: %s\n", i, e);
  	m = descramble (e);
  	free (e);
--- 165,171 ----
      for (i = 0; i < 5; i++)
      {
  	printf ("clear%d: %s\n", i, cleartexts[i]);
! 	e = enscramble (cleartexts[i]);
  	printf ("scram%d: %s\n", i, e);
  	m = descramble (e);
  	free (e);
diff --exclude=CVS -crN ../pristine-ccvs/src/server.c ./src/server.c
*** ./src/server.c	Thu Jul 27 11:09:20 2000
--- ./src/server.c	Thu Jul 27 15:36:54 2000
***************
*** 795,800 ****
--- 795,803 ----
      /* For pserver, this will already have happened, and the call will do
         nothing.  But for rsh, we need to do it now.  */
      parse_config (CVSroot_directory);
+ #ifdef MYSQL_SUPPORT
+     cvs_mysql_connect();
+ #endif /* MYSQL_SUPPORT */
  
      path = malloc (strlen (CVSroot_directory)
  		   + sizeof (CVSROOTADM)
***************
*** 5259,5266 ****
  #endif
        
  #if HAVE_PUTENV
!     /* Set LOGNAME and USER in the environment, in case they are
!        already set to something else.  */
      {
  	char *env;
  
--- 5262,5269 ----
  #endif
        
  #if HAVE_PUTENV
!     /* Set LOGNAME and and CVS_USER in the environment, in case they
!        are already set to something else.  */
      {
  	char *env;
  
***************
*** 5271,5276 ****
--- 5274,5283 ----
  	env = xmalloc (sizeof "USER=" + strlen (username));
  	(void) sprintf (env, "USER=%s", username);
  	(void) putenv (env);
+ 
+         env = xmalloc (sizeof "CVS_USER=" + strlen (CVS_Username));
+         (void) sprintf (env, "CVS_USER=%s", CVS_Username);
+         (void) putenv (env);	
      }
  #endif /* HAVE_PUTENV */
  }
***************
*** 5434,5439 ****
--- 5441,5603 ----
      return retval;
  }
  
+ #ifdef MYSQL_SUPPORT
+ /* 
+  * Read the mysql file and set up the server.
+  *
+  * 0 means no entry found for this user.
+  * 1 means entry found and password matches.
+  * 2 means entry found, but password does not match.
+  *
+  * If success, host_user_ptr will be set to point at the system
+  * username (i.e., the "real" identity, which may or may not be the
+  * CVS username) of this user; caller may free this.  Global
+  * CVS_Username will point at an allocated copy of cvs username (i.e.,
+  * the username argument below).
+  */
+ static int
+ check_mysql_password (username, password, repository, host_user_ptr)
+     char *username, *password, *repository, **host_user_ptr;
+ {
+     int retval;
+     MYSQL_RES *res;
+     MYSQL_ROW row;
+     char *query;
+ 
+     retval = 0;
+     *host_user_ptr = NULL;
+ 
+     /* Check configuration for MySQL password configuration */
+     if (!mysql_passwd_table && !mysql_username_col && !mysql_passwd_col
+ 	&& !mysql_serveruser_table && !mysql_cvsuser_col
+ 	&& !mysql_serveruser_col && !mysql_default_user) {
+ 	return 0;
+     }
+ 
+     if (!mysql_passwd_table || !mysql_username_col || !mysql_passwd_col) {
+ 	error(0, 0, "missing required MySQL password parameters in config");
+ 	return 0;
+     }
+ 
+     if (CVS_mysql == NULL) {
+ 	error(0, 0, "MySQL password configured, but database inactive");
+ 	return 0;
+     }
+ 
+     /* Perform the query to get the password info out of the
+      * database. Unfortunately, because the caller to this
+      * function wants to know whether we found the user or not,
+      * not simply if the password matched, we can't just use SQL
+      * to find rows that match both name and password. We just ask
+      * for the password (and in the case of MySQL-encryption, the
+      * encrypted password), and compare it ourselves.
+      *
+      * (also, MySQL does case-insensitive string compares, so that
+      * might not be a good idea at any rate, for unencrypted
+      * passwords. But it's a minor point, and you can turn it off
+      * anyway.)  
+      */
+     
+     /* SELECT <pwd-col>, PASSWORD('<pwd>') FROM <table> WHERE
+      * <user-col> = '<username>'\0
+      * strlen("SELECT  , PASSWORD('') FROM  WHERE  = ''\0") = 41
+      */
+     query = xmalloc(41 + strlen(mysql_passwd_col) + strlen(password)
+ 		    + strlen(mysql_passwd_table) 
+ 		    + strlen(mysql_username_col)
+ 		    + strlen(username) 
+ 		    + 64 /* for good measure */);
+     if (mysql_encrypt && !strcasecmp(mysql_encrypt, "mysql")) {
+ 	sprintf(query, "SELECT %s, PASSWORD('%s') FROM %s WHERE "
+ 		"%s = '%s'", mysql_passwd_col, password, 
+ 		mysql_passwd_table, mysql_username_col, username);
+     } else {
+ 	sprintf(query, "SELECT %s FROM %s WHERE %s = '%s'",
+ 		mysql_passwd_col, mysql_passwd_table,
+ 		mysql_username_col, username);
+     }
+ 
+     
+     mysql_real_query(CVS_mysql, query, strlen(query));
+     res = mysql_use_result(CVS_mysql);
+     /* The API requires us to grab all the values, so let's only
+      * concern ourselves with the last one - overwrite over until
+      * the query is over. 
+      */
+     while ((row = mysql_fetch_row(res))) {
+ 	unsigned long *lengths = mysql_fetch_lengths(res);
+ 	/* We found something! What we do now depends on 
+ 	 * what type of encryption we're using.
+ 	 */
+ 	retval = 2;	/* Not a match until proven otherwise */
+ 	if (!mysql_encrypt || !strcasecmp(mysql_encrypt, "none")) {
+ 	    if (lengths[0] == strlen(password)
+ 		&& !strncmp(password, row[0], lengths[0]))
+ 		retval = 1;
+ 	} else if (!strcasecmp(mysql_encrypt, "crypt")) {
+ 	    char *crypted_pwd = crypt(password, row[0]);
+ 	    if (lengths[0] == strlen(crypted_pwd)
+ 		&& !strncmp(crypted_pwd, row[0], lengths[0]))
+ 		retval = 1;
+ 	} else if (!strcasecmp(mysql_encrypt, "mysql")) {
+ 	    if (lengths[0] == lengths[1]
+ 		&& !strncmp(row[0], row[1], lengths[0]))
+ 		retval = 1;
+ 	} else {
+ 	    error(0, 0, "unknown encryption type %s", mysql_encrypt);
+ 	    retval = 0;
+ 	}
+     }
+     
+     mysql_free_result(res);
+     free(query);
+     
+     /* If we found the result, we now need to find the host
+      * (server) username
+      */
+     if (retval == 1) {
+ 	if (mysql_serveruser_table && mysql_serveruser_col 
+ 	    && mysql_cvsuser_col) {
+ 	    /* SELECT <serveruser_col> FROM <serveruser_table>
+ 	     * WHERE <cvsuser_col> = '<username>'\0
+ 	     * strlen("SELECT  FROM  WHERE  = ''\0") = 26
+ 	     */
+ 	    query = xmalloc(26 + strlen(mysql_serveruser_col)
+ 			    + strlen(mysql_cvsuser_col)
+ 			    + strlen(username)
+ 			    + 64 /* for good measure */);
+ 	    sprintf(query, "SELECT %s FROM %s WHERE %s = '%s'",
+ 		    mysql_serveruser_col, mysql_serveruser_table, 
+ 		    mysql_cvsuser_col,
+ 		    username);
+ 	    
+ 	    mysql_real_query(CVS_mysql, query, strlen(query));
+ 	    res = mysql_use_result(CVS_mysql);
+ 	    
+ 	    while ((row = mysql_fetch_row(res))) {
+ 		unsigned long *lengths = mysql_fetch_lengths(res);
+ 		if (row[0] != NULL) {
+ 		    *host_user_ptr = xmalloc(lengths[0]);
+ 		    strcpy(*host_user_ptr, row[0]);
+ 		}
+ 	    }
+ 	    
+ 	    mysql_free_result(res);
+ 	    free(query);		    
+ 	}
+ 	
+ 	if (*host_user_ptr == NULL) {
+ 	    if (mysql_default_user != NULL) {
+ 		*host_user_ptr = xstrdup(mysql_default_user);
+ 	    } else {
+ 		*host_user_ptr = xstrdup(username);
+ 	    }
+ 	}
+     }
+ 
+     return retval;
+ }
+ #endif /* MYSQL_SUPPORT */
  
  /* Return a hosting username if password matches, else NULL. */
  static char *
***************
*** 5447,5452 ****
--- 5611,5622 ----
         password file.  If so, that's enough to authenticate with.  If
         not, we'll check /etc/passwd. */
  
+ #ifdef MYSQL_SUPPORT
+     /* (But before any of the above, we check for a MySQL password!) */
+     rc = check_mysql_password (username, password, repository,
+ 			       &host_user);
+     if (rc == 0)
+ #endif /* MYSQL_SUPPORT */
      rc = check_repository_password (username, password, repository,
  				    &host_user);
  
***************
*** 5707,5712 ****
--- 5877,5889 ----
         in a new CVSROOT/config file to fix the broken one!  */
      parse_config (repository);
  
+ #ifdef MYSQL_SUPPORT
+     /* We need to connect to the database now, because we may need it
+      * to check the password just a few lines down.
+      */
+     cvs_mysql_connect();
+ #endif /* MYSQL_SUPPORT */
+  
      /* We need the real cleartext before we hash it. */
      descrambled_password = descramble (password);
      host_user = check_password (username, descrambled_password, repository);
***************
*** 5733,5740 ****
  	/* Hook for OS-specific behavior, for example socket subsystems on
  	   NT and OS2 or dealing with windows and arguments on Mac.  */
  	SYSTEM_CLEANUP ();
! #endif
  
  	exit (0);
      }
  
--- 5910,5920 ----
  	/* Hook for OS-specific behavior, for example socket subsystems on
  	   NT and OS2 or dealing with windows and arguments on Mac.  */
  	SYSTEM_CLEANUP ();
! #endif /* SYSTEM_CLEANUP */
  
+ #ifdef MYSQL_SUPPORT
+         cvs_mysql_disconnect ();
+ #endif /* MYSQL_SUPPORT */
  	exit (0);
      }
  
***************
*** 5744,5750 ****
      strcpy (Pserver_Repos, repository);
  
      /* Switch to run as this user. */
!     switch_to_user (host_user);
      free (host_user);
      free (tmp);
      free (repository);
--- 5924,5931 ----
      strcpy (Pserver_Repos, repository);
  
      /* Switch to run as this user. */
!     if (! local_authentication)
!         switch_to_user (host_user);
      free (host_user);
      free (tmp);
      free (repository);
***************
*** 5832,5838 ****
      }
  
      /* Switch to run as this user. */
!     switch_to_user (user);
  }
  #endif /* HAVE_KERBEROS */
  
--- 6013,6020 ----
      }
  
      /* Switch to run as this user. */
!     if (! local_authentication)
!         switch_to_user (user);
  }
  #endif /* HAVE_KERBEROS */
  
***************
*** 5924,5933 ****
  			      &mechid) != GSS_S_COMPLETE
  	    || krb5_parse_name (kc, ((gss_buffer_t) &desc)->value, &p) != 0
  	    || krb5_aname_to_localname (kc, p, sizeof buf, buf) != 0
! 	    || krb5_kuserok (kc, p, buf) != TRUE)
  	{
  	    error (1, 0, "access denied");
  	}
  	krb5_free_principal (kc, p);
  	krb5_free_context (kc);
      }
--- 6106,6119 ----
  			      &mechid) != GSS_S_COMPLETE
  	    || krb5_parse_name (kc, ((gss_buffer_t) &desc)->value, &p) != 0
  	    || krb5_aname_to_localname (kc, p, sizeof buf, buf) != 0
!             || (!local_authentication && krb5_kuserok (kc, p, buf) != TRUE))
  	{
  	    error (1, 0, "access denied");
  	}
+         else
+ 	{
+        	    CVS_Username = xstrdup(buf);
+ 	}
  	krb5_free_principal (kc, p);
  	krb5_free_context (kc);
      }
***************
*** 5944,5950 ****
  	    error (1, errno, "fwrite failed");
      }
  
!     switch_to_user (buf);
  
      printf ("I LOVE YOU\n");
      fflush (stdout);
--- 6130,6137 ----
  	    error (1, errno, "fwrite failed");
      }
  
!     if (! local_authentication)
!         switch_to_user (buf);
  
      printf ("I LOVE YOU\n");
      fflush (stdout);
diff --exclude=CVS -crN ../pristine-ccvs/src/status.c ./src/status.c
*** ./src/status.c	Tue Jun  1 16:36:33 1999
--- ./src/status.c	Thu Jul 27 15:36:54 2000
***************
*** 106,112 ****
      err = start_recursion (status_fileproc, (FILESDONEPROC) NULL,
  			   status_dirproc, (DIRLEAVEPROC) NULL, NULL,
  			   argc, argv, local,
! 			   W_LOCAL, 0, 1, (char *) NULL, 1);
  
      return (err);
  }
--- 106,112 ----
      err = start_recursion (status_fileproc, (FILESDONEPROC) NULL,
  			   status_dirproc, (DIRLEAVEPROC) NULL, NULL,
  			   argc, argv, local,
! 			   W_LOCAL, 0, 1, (char *) NULL, 1, verify_read);
  
      return (err);
  }
diff --exclude=CVS -crN ../pristine-ccvs/src/tag.c ./src/tag.c
*** ./src/tag.c	Thu Jun 15 12:33:32 2000
--- ./src/tag.c	Thu Jul 27 15:36:54 2000
***************
*** 200,206 ****
      err = start_recursion (check_fileproc, check_filesdoneproc,
                             (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
                             argc, argv, local, W_LOCAL, 0, 1,
!                            (char *) NULL, 1);
      
      if (err)
      {
--- 200,206 ----
      err = start_recursion (check_fileproc, check_filesdoneproc,
                             (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
                             argc, argv, local, W_LOCAL, 0, 1,
!                            (char *) NULL, 1, verify_write);
      
      if (err)
      {
***************
*** 210,216 ****
      /* start the recursion processor */
      err = start_recursion (tag_fileproc, tag_filesdoneproc, tag_dirproc,
  			   (DIRLEAVEPROC) NULL, NULL, argc, argv, local,
! 			   W_LOCAL, 0, 0, (char *) NULL, 1);
      dellist(&mtlist);
      return (err);
  }
--- 210,216 ----
      /* start the recursion processor */
      err = start_recursion (tag_fileproc, tag_filesdoneproc, tag_dirproc,
  			   (DIRLEAVEPROC) NULL, NULL, argc, argv, local,
! 			   W_LOCAL, 0, 0, (char *) NULL, 1, verify_write);
      dellist(&mtlist);
      return (err);
  }
***************
*** 853,859 ****
  			   val_direntproc, (DIRLEAVEPROC) NULL,
  			   (void *)&the_val_args,
  			   argc, argv, local, which, aflag,
! 			   1, NULL, 1);
      if (repository != NULL && repository[0] != '\0')
      {
  	if (restore_cwd (&cwd, NULL))
--- 853,859 ----
  			   val_direntproc, (DIRLEAVEPROC) NULL,
  			   (void *)&the_val_args,
  			   argc, argv, local, which, aflag,
! 			   1, NULL, 1, verify_write);
      if (repository != NULL && repository[0] != '\0')
      {
  	if (restore_cwd (&cwd, NULL))
diff --exclude=CVS -crN ../pristine-ccvs/src/update.c ./src/update.c
*** ./src/update.c	Thu Jul 27 11:09:20 2000
--- ./src/update.c	Thu Jul 27 15:56:40 2000
***************
*** 485,491 ****
  	err = start_recursion (get_linkinfo_proc, (FILESDONEPROC) NULL,
  			       (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  			       argc, argv, local, which, aflag, 1,
! 			       preload_update_dir, 1);
  	if (err)
  	    return (err);
  
--- 485,491 ----
  	err = start_recursion (get_linkinfo_proc, (FILESDONEPROC) NULL,
  			       (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  			       argc, argv, local, which, aflag, 1,
! 			       preload_update_dir, 1, NULL);
  	if (err)
  	    return (err);
  
***************
*** 501,507 ****
      err = start_recursion (update_fileproc, update_filesdone_proc,
  			   update_dirent_proc, update_dirleave_proc, NULL,
  			   argc, argv, local, which, aflag, 1,
! 			   preload_update_dir, 1);
  
      /* see if we need to sleep before returning to avoid time-stamp races */
      if (last_register_time)
--- 501,507 ----
      err = start_recursion (update_fileproc, update_filesdone_proc,
  			   update_dirent_proc, update_dirleave_proc, NULL,
  			   argc, argv, local, which, aflag, 1,
! 			   preload_update_dir, 1, verify_read);
  
      /* see if we need to sleep before returning to avoid time-stamp races */
      if (last_register_time)
diff --exclude=CVS -crN ../pristine-ccvs/src/watch.c ./src/watch.c
*** ./src/watch.c	Tue Jun 13 16:50:11 2000
--- ./src/watch.c	Thu Jul 27 15:36:54 2000
***************
*** 353,359 ****
      err = start_recursion (addremove_fileproc, addremove_filesdoneproc,
  			   (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  			   argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
! 			   1);
  
      Lock_Cleanup ();
      return err;
--- 353,359 ----
      err = start_recursion (addremove_fileproc, addremove_filesdoneproc,
  			   (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  			   argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
! 			   1, verify_write);
  
      Lock_Cleanup ();
      return err;
***************
*** 526,530 ****
      return start_recursion (watchers_fileproc, (FILESDONEPROC) NULL,
  			    (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  			    argc, argv, local, W_LOCAL, 0, 1, (char *)NULL,
! 			    1);
  }
--- 526,530 ----
      return start_recursion (watchers_fileproc, (FILESDONEPROC) NULL,
  			    (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
  			    argc, argv, local, W_LOCAL, 0, 1, (char *)NULL,
! 			    1, verify_write);
  }
@


1.26
log
@update.c (patch_file, checkout_file): applied Ed Korthof's permission
patch.

With this patch, the server unconditionally makes writeable files,
which causes it to send write-allowing perm strings to the client too.

Result: guest (read-only auth) checkouts produce writeable working
copies again.
@
text
@@


1.25
log
@Sync up with dist CVS (prior to applying Ed's perm patch).
@
text
@d4893 1
a4893 1
--- ./src/update.c	Thu Jul 27 15:36:54 2000
a4927 36
***************
*** 1368,1374 ****
  
  	    if (cvswrite
  		&& !file_is_dead
! 		&& !fileattr_get (finfo->file, "_watched"))
  	    {
  		if (revbuf == NULL)
  		    xchmod (finfo->file, 1);
--- 1368,1375 ----
  
  	    if (cvswrite
  		&& !file_is_dead
! 		&& !fileattr_get (finfo->file, "_watched")
! 		&& verify_write (finfo->repository))
  	    {
  		if (revbuf == NULL)
  		    xchmod (finfo->file, 1);
***************
*** 1764,1770 ****
  		< 0)
  		error (0, errno, "cannot change mode of file %s", finfo->file);
  	    if (cvswrite
! 		&& !fileattr_get (finfo->file, "_watched"))
  		xchmod (finfo->file, 1);
  
  	    /* Check the diff output to make sure patch will be handle it.  */
--- 1765,1772 ----
  		< 0)
  		error (0, errno, "cannot change mode of file %s", finfo->file);
  	    if (cvswrite
! 		&& !fileattr_get (finfo->file, "_watched")
! 		&& verify_write (finfo->repository))
  		xchmod (finfo->file, 1);
  
  	    /* Check the diff output to make sure patch will be handle it.  */
@


1.24
log
@recurse.c (verify_access): return success automatically if
!local_authentication.

This fixes the misinterpretation of "CVS/" subdirectories in the
repository, because in local mode this function (like all the verify_*
functions) now just falls back on Unix file permissions and doesn't
attempt to interpret anything in the repository.
@
text
@d3 1
a3 1
--- ./config.h.in	Mon Jul 17 11:52:19 2000
d18 1
a18 1
--- ./configure	Mon Jul 17 11:52:45 2000
d2729 1
a2729 1
--- ./configure.in	Mon Jul 17 11:52:19 2000
d2789 1
a2789 1
--- ./doc/cvs.texinfo	Mon Jul 17 11:52:19 2000
d2890 1
a2890 1
--- ./src/Makefile.in	Mon Jul 17 11:52:19 2000
d2929 1
a2929 1
--- ./src/add.c	Mon Jul 17 11:52:19 2000
d2943 2
a2944 2
*** ./src/admin.c	Thu Jul  6 12:45:19 2000
--- ./src/admin.c	Mon Jul 17 11:52:19 2000
d2946 1
a2946 1
*** 453,459 ****
d2954 1
a2954 1
--- 453,459 ----
d2963 1
a2963 1
*** 853,857 ****
d2969 1
a2969 1
--- 853,856 ----
d2972 1
a2972 1
--- ./src/checkout.c	Mon Jul 17 11:52:19 2000
d2990 1
a2990 1
--- ./src/client.c	Mon Jul 17 11:52:19 2000
d3027 2
a3028 2
*** ./src/commit.c	Thu Jun 22 11:25:33 2000
--- ./src/commit.c	Mon Jul 17 11:52:19 2000
d3083 1
a3083 1
--- ./src/cvs.h	Mon Jul 17 11:52:19 2000
d3209 1
a3209 1
--- ./src/diff.c	Mon Jul 17 11:52:19 2000
d3229 1
a3229 1
--- ./src/edit.c	Mon Jul 17 11:52:19 2000
d3330 1
a3330 1
--- ./src/error.c	Mon Jul 17 11:52:19 2000
d3345 1
a3345 1
--- ./src/import.c	Mon Jul 17 11:52:19 2000
d3360 1
a3360 1
--- ./src/local_auth.c	Mon Jul 17 11:52:19 2000
d3809 2
a3810 2
*** ./src/lock.c	Wed Dec 15 11:53:21 1999
--- ./src/lock.c	Mon Jul 17 11:52:19 2000
d3831 1
a3831 1
--- ./src/log.c	Mon Jul 17 11:52:19 2000
d3851 1
a3851 1
--- ./src/login.c	Mon Jul 17 11:52:19 2000
d3871 1
a3871 1
--- ./src/main.c	Mon Jul 17 11:52:19 2000
d3954 2
a3955 2
*** ./src/mkmodules.c	Thu Mar 23 16:52:25 2000
--- ./src/mkmodules.c	Mon Jul 17 11:52:19 2000
d3957 2
a3958 2
*** 336,341 ****
--- 336,346 ----
d3971 2
a3972 2
*** 354,359 ****
--- 359,365 ----
d3981 2
a3982 2
*** 852,857 ****
--- 858,866 ----
d3994 1
a3994 1
--- ./src/mysqlsubr.c	Mon Jul 17 11:52:19 2000
d4077 1
a4077 1
--- ./src/parseinfo.c	Mon Jul 17 11:52:19 2000
d4123 1
a4123 1
--- ./src/patch.c	Mon Jul 17 11:52:19 2000
d4158 1
a4158 1
--- ./src/rcs.c	Mon Jul 17 11:52:19 2000
d4178 1
a4178 1
--- ./src/recurse.c	Mon Jul 17 11:52:19 2000
d4320 1
a4320 1
--- ./src/remove.c	Mon Jul 17 11:52:19 2000
d4358 1
a4358 1
--- ./src/rtag.c	Mon Jul 17 11:52:19 2000
d4395 1
a4395 1
--- ./src/scramble.c	Mon Jul 17 11:52:19 2000
d4471 2
a4472 2
*** ./src/server.c	Mon Jul 17 10:56:22 2000
--- ./src/server.c	Mon Jul 17 11:52:19 2000
d4819 1
a4819 1
--- ./src/status.c	Mon Jul 17 11:52:19 2000
d4839 1
a4839 1
--- ./src/tag.c	Mon Jul 17 11:52:19 2000
d4892 2
a4893 2
*** ./src/update.c	Mon Jul 17 10:56:22 2000
--- ./src/update.c	Mon Jul 17 11:52:19 2000
d4929 1
a4929 1
*** 1367,1373 ****
d4937 1
a4937 1
--- 1367,1374 ----
d4947 1
a4947 1
*** 1763,1769 ****
d4955 1
a4955 1
--- 1764,1771 ----
d4966 1
a4966 1
--- ./src/watch.c	Mon Jul 17 11:52:19 2000
@


1.23
log
@Brought up-to-date with latest cvs sources, prior to debugging the
CVS/_fileattr_ in repository problem.
@
text
@d4203 1
a4203 1
+     if (permproc == NULL)
@


1.22
log
@Compensate for latest changes, and remove sanity.sh lossage, and
remove doc/*.info* lossage.
@
text
@d2 2
a3 2
*** ./config.h.in	Wed Jun 21 12:06:25 2000
--- ./config.h.in	Thu Jul  6 14:19:57 2000
d5 2
a6 2
*** 88,93 ****
--- 88,96 ----
d17 2
a18 2
*** ./configure	Wed Jun 21 12:06:25 2000
--- ./configure	Thu Jul  6 14:20:26 2000
d1183 45
a1227 1
*** 1984,1995 ****
d1231 1
a1231 1
! echo "configure:1988: checking for $ac_func" >&5
d1236 1
a1236 1
! #line 1993 "configure"
d1240 1
a1240 1
--- 1988,1999 ----
d1244 1
a1244 1
! echo "configure:1992: checking for $ac_func" >&5
d1249 1
a1249 1
! #line 1997 "configure"
d1254 1
a1254 1
*** 2012,2018 ****
d1258 1
a1258 1
! if { (eval echo configure:2016: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1262 1
a1262 1
--- 2016,2022 ----
d1266 1
a1266 1
! if { (eval echo configure:2020: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1271 2
a1272 2
*** 2041,2052 ****
  for ac_func in fchmod fsync ftime mktemp putenv vprintf ftruncate timezone getpagesize initgroups fchdir sigaction sigprocmask sigvec sigsetmask sigblock tempnam tzset readlink wait3
d1275 1
a1275 1
! echo "configure:2045: checking for $ac_func" >&5
d1280 1
a1280 1
! #line 2050 "configure"
d1284 2
a1285 2
--- 2045,2056 ----
  for ac_func in fchmod fsync ftime mktemp putenv vprintf ftruncate timezone getpagesize initgroups fchdir sigaction sigprocmask sigvec sigsetmask sigblock tempnam tzset readlink wait3
d1288 1
a1288 1
! echo "configure:2049: checking for $ac_func" >&5
d1293 1
a1293 1
! #line 2054 "configure"
d1298 1
a1298 1
*** 2069,2075 ****
d1302 1
a1302 1
! if { (eval echo configure:2073: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1306 1
a1306 1
--- 2073,2079 ----
d1310 1
a1310 1
! if { (eval echo configure:2077: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1315 1
a1315 1
*** 2113,2129 ****
d1319 1
a1319 1
! echo "configure:2117: checking for vfork.h" >&5
d1324 1
a1324 1
! #line 2122 "configure"
d1329 1
a1329 1
! { (eval echo configure:2127: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
d1333 1
a1333 1
--- 2117,2133 ----
d1337 1
a1337 1
! echo "configure:2121: checking for vfork.h" >&5
d1342 1
a1342 1
! #line 2126 "configure"
d1347 1
a1347 1
! { (eval echo configure:2131: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
d1352 1
a1352 1
*** 2148,2165 ****
d1356 1
a1356 1
! echo "configure:2152: checking for working vfork" >&5
d1362 1
a1362 1
! echo "configure:2158: checking for vfork" >&5
d1367 1
a1367 1
! #line 2163 "configure"
d1371 1
a1371 1
--- 2152,2169 ----
d1375 1
a1375 1
! echo "configure:2156: checking for working vfork" >&5
d1381 1
a1381 1
! echo "configure:2162: checking for vfork" >&5
d1386 1
a1386 1
! #line 2167 "configure"
d1391 1
a1391 1
*** 2182,2188 ****
d1395 1
a1395 1
! if { (eval echo configure:2186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1399 1
a1399 1
--- 2186,2192 ----
d1403 1
a1403 1
! if { (eval echo configure:2190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1408 1
a1408 1
*** 2204,2210 ****
d1412 1
a1412 1
! #line 2208 "configure"
d1416 1
a1416 1
--- 2208,2214 ----
d1420 1
a1420 1
! #line 2212 "configure"
d1425 1
a1425 1
*** 2299,2305 ****
d1429 1
a1429 1
! if { (eval echo configure:2303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1433 1
a1433 1
--- 2303,2309 ----
d1437 1
a1437 1
! if { (eval echo configure:2307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1442 1
a1442 1
*** 2322,2328 ****
d1446 1
a1446 1
! echo "configure:2326: checking whether closedir returns void" >&5
d1450 1
a1450 1
--- 2326,2332 ----
d1454 1
a1454 1
! echo "configure:2330: checking whether closedir returns void" >&5
d1459 1
a1459 1
*** 2330,2342 ****
d1463 1
a1463 1
! #line 2334 "configure"
d1469 1
a1469 1
! if { (eval echo configure:2340: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1473 1
a1473 1
--- 2334,2346 ----
d1477 1
a1477 1
! #line 2338 "configure"
d1483 1
a1483 1
! if { (eval echo configure:2344: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1488 1
a1488 1
*** 2361,2374 ****
d1492 1
a1492 1
! echo "configure:2365: checking for library containing getspnam" >&5
d1499 1
a1499 1
! #line 2372 "configure"
d1503 1
a1503 1
--- 2365,2378 ----
d1507 1
a1507 1
! echo "configure:2369: checking for library containing getspnam" >&5
d1514 1
a1514 1
! #line 2376 "configure"
d1519 1
a1519 1
*** 2379,2385 ****
d1523 1
a1523 1
! if { (eval echo configure:2383: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1527 1
a1527 1
--- 2383,2389 ----
d1531 1
a1531 1
! if { (eval echo configure:2387: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1536 1
a1536 1
*** 2390,2396 ****
d1540 1
a1540 1
! #line 2394 "configure"
d1544 1
a1544 1
--- 2394,2400 ----
d1548 1
a1548 1
! #line 2398 "configure"
d1553 1
a1553 1
*** 2401,2407 ****
d1557 1
a1557 1
! if { (eval echo configure:2405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1561 1
a1561 1
--- 2405,2411 ----
d1565 1
a1565 1
! if { (eval echo configure:2409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1570 1
a1570 1
*** 2426,2432 ****
d1574 1
a1574 1
! echo "configure:2430: checking whether utime accepts a null argument" >&5
d1578 1
a1578 1
--- 2430,2436 ----
d1582 1
a1582 1
! echo "configure:2434: checking whether utime accepts a null argument" >&5
d1587 1
a1587 1
*** 2436,2442 ****
d1591 1
a1591 1
! #line 2440 "configure"
d1595 1
a1595 1
--- 2440,2446 ----
d1599 1
a1599 1
! #line 2444 "configure"
d1604 1
a1604 1
*** 2447,2453 ****
d1608 1
a1608 1
! if { (eval echo configure:2451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1612 1
a1612 1
--- 2451,2457 ----
d1616 1
a1616 1
! if { (eval echo configure:2455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1621 1
a1621 1
*** 2471,2477 ****
d1625 1
a1625 1
! echo "configure:2475: checking for long file names" >&5
d1629 1
a1629 1
--- 2475,2481 ----
d1633 1
a1633 1
! echo "configure:2479: checking for long file names" >&5
d1638 1
a1638 1
*** 2516,2522 ****
d1642 1
a1642 1
! echo "configure:2520: checking for working fnmatch" >&5
d1646 1
a1646 1
--- 2520,2526 ----
d1650 1
a1650 1
! echo "configure:2524: checking for working fnmatch" >&5
d1655 1
a1655 1
*** 2527,2537 ****
d1659 1
a1659 1
! #line 2531 "configure"
d1663 1
a1663 1
! if { (eval echo configure:2535: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1667 1
a1667 1
--- 2531,2541 ----
d1671 1
a1671 1
! #line 2535 "configure"
d1675 1
a1675 1
! if { (eval echo configure:2539: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1680 1
a1680 1
*** 2559,2565 ****
d1684 1
a1684 1
! echo "configure:2563: checking for main in -lnsl" >&5
d1688 1
a1688 1
--- 2563,2569 ----
d1692 1
a1692 1
! echo "configure:2567: checking for main in -lnsl" >&5
d1697 1
a1697 1
*** 2567,2580 ****
d1701 1
a1701 1
! #line 2571 "configure"
d1708 1
a1708 1
! if { (eval echo configure:2578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1712 1
a1712 1
--- 2571,2584 ----
d1716 1
a1716 1
! #line 2575 "configure"
d1723 1
a1723 1
! if { (eval echo configure:2582: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1728 1
a1728 1
*** 2591,2604 ****
d1732 1
a1732 1
! echo "configure:2595: checking for library containing connect" >&5
d1739 1
a1739 1
! #line 2602 "configure"
d1743 1
a1743 1
--- 2595,2608 ----
d1747 1
a1747 1
! echo "configure:2599: checking for library containing connect" >&5
d1754 1
a1754 1
! #line 2606 "configure"
d1759 1
a1759 1
*** 2609,2615 ****
d1763 1
a1763 1
! if { (eval echo configure:2613: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1767 1
a1767 1
--- 2613,2619 ----
d1771 1
a1771 1
! if { (eval echo configure:2617: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1776 1
a1776 1
*** 2620,2626 ****
d1780 1
a1780 1
! #line 2624 "configure"
d1784 1
a1784 1
--- 2624,2630 ----
d1788 1
a1788 1
! #line 2628 "configure"
d1793 1
a1793 1
*** 2631,2637 ****
d1797 1
a1797 1
! if { (eval echo configure:2635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1801 1
a1801 1
--- 2635,2641 ----
d1805 1
a1805 1
! if { (eval echo configure:2639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1810 1
a1810 1
*** 2658,2671 ****
d1814 1
a1814 1
! echo "configure:2662: checking for library containing connect" >&5
d1821 1
a1821 1
! #line 2669 "configure"
d1825 1
a1825 1
--- 2662,2675 ----
d1829 1
a1829 1
! echo "configure:2666: checking for library containing connect" >&5
d1836 1
a1836 1
! #line 2673 "configure"
d1841 1
a1841 1
*** 2676,2682 ****
d1845 1
a1845 1
! if { (eval echo configure:2680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1849 1
a1849 1
--- 2680,2686 ----
d1853 1
a1853 1
! if { (eval echo configure:2684: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1858 1
a1858 1
*** 2687,2693 ****
d1862 1
a1862 1
! #line 2691 "configure"
d1866 1
a1866 1
--- 2691,2697 ----
d1870 1
a1870 1
! #line 2695 "configure"
d1875 1
a1875 1
*** 2698,2704 ****
d1879 1
a1879 1
! if { (eval echo configure:2702: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1883 1
a1883 1
--- 2702,2708 ----
d1887 1
a1887 1
! if { (eval echo configure:2706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1892 1
a1892 1
*** 2725,2738 ****
d1896 1
a1896 1
! echo "configure:2729: checking for library containing gethostbyname" >&5
d1903 1
a1903 1
! #line 2736 "configure"
d1907 1
a1907 1
--- 2729,2742 ----
d1911 1
a1911 1
! echo "configure:2733: checking for library containing gethostbyname" >&5
d1918 1
a1918 1
! #line 2740 "configure"
d1923 1
a1923 1
*** 2743,2749 ****
d1927 1
a1927 1
! if { (eval echo configure:2747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1931 1
a1931 1
--- 2747,2753 ----
d1935 1
a1935 1
! if { (eval echo configure:2751: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1940 1
a1940 1
*** 2754,2760 ****
d1944 1
a1944 1
! #line 2758 "configure"
d1948 1
a1948 1
--- 2758,2764 ----
d1952 1
a1952 1
! #line 2762 "configure"
d1957 1
a1957 1
*** 2765,2771 ****
d1961 1
a1961 1
! if { (eval echo configure:2769: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1965 1
a1965 1
--- 2769,2775 ----
d1969 1
a1969 1
! if { (eval echo configure:2773: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1974 1
a1974 1
*** 2798,2816 ****
d1978 1
a1978 1
! echo "configure:2802: checking for krb.h" >&5
d1983 1
a1983 1
! #line 2807 "configure"
d1990 1
a1990 1
! if { (eval echo configure:2814: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1994 1
a1994 1
--- 2802,2820 ----
d1998 1
a1998 1
! echo "configure:2806: checking for krb.h" >&5
d2003 1
a2003 1
! #line 2811 "configure"
d2010 1
a2010 1
! if { (eval echo configure:2818: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2015 1
a2015 1
*** 2819,2832 ****
d2019 1
a2019 1
! #line 2823 "configure"
d2026 1
a2026 1
! if { (eval echo configure:2830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2030 1
a2030 1
--- 2823,2836 ----
d2034 1
a2034 1
! #line 2827 "configure"
d2041 1
a2041 1
! if { (eval echo configure:2834: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2046 1
a2046 1
*** 2839,2852 ****
d2050 1
a2050 1
! #line 2843 "configure"
d2057 1
a2057 1
! if { (eval echo configure:2850: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2061 1
a2061 1
--- 2843,2856 ----
d2065 1
a2065 1
! #line 2847 "configure"
d2072 1
a2072 1
! if { (eval echo configure:2854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2077 1
a2077 1
*** 2857,2870 ****
d2081 1
a2081 1
! #line 2861 "configure"
d2088 1
a2088 1
! if { (eval echo configure:2868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2092 1
a2092 1
--- 2861,2874 ----
d2096 1
a2096 1
! #line 2865 "configure"
d2103 1
a2103 1
! if { (eval echo configure:2872: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2108 1
a2108 1
*** 2875,2888 ****
d2112 1
a2112 1
! #line 2879 "configure"
d2119 1
a2119 1
! if { (eval echo configure:2886: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2123 1
a2123 1
--- 2879,2892 ----
d2127 1
a2127 1
! #line 2883 "configure"
d2134 1
a2134 1
! if { (eval echo configure:2890: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2139 1
a2139 1
*** 2905,2911 ****
d2143 1
a2143 1
! echo "configure:2909: checking for printf in -lkrb" >&5
d2147 1
a2147 1
--- 2909,2915 ----
d2151 1
a2151 1
! echo "configure:2913: checking for printf in -lkrb" >&5
d2156 1
a2156 1
*** 2913,2919 ****
d2160 1
a2160 1
! #line 2917 "configure"
d2164 1
a2164 1
--- 2917,2923 ----
d2168 1
a2168 1
! #line 2921 "configure"
d2173 1
a2173 1
*** 2924,2930 ****
d2177 1
a2177 1
! if { (eval echo configure:2928: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2181 1
a2181 1
--- 2928,2934 ----
d2185 1
a2185 1
! if { (eval echo configure:2932: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2190 1
a2190 1
*** 2946,2952 ****
d2194 1
a2194 1
! echo "configure:2950: checking for open in -lkrb" >&5
d2198 1
a2198 1
--- 2950,2956 ----
d2202 1
a2202 1
! echo "configure:2954: checking for open in -lkrb" >&5
d2207 1
a2207 1
*** 2954,2960 ****
d2211 1
a2211 1
! #line 2958 "configure"
d2215 1
a2215 1
--- 2958,2964 ----
d2219 1
a2219 1
! #line 2962 "configure"
d2224 1
a2224 1
*** 2965,2971 ****
d2228 1
a2228 1
! if { (eval echo configure:2969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2232 1
a2232 1
--- 2969,2975 ----
d2236 1
a2236 1
! if { (eval echo configure:2973: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2241 1
a2241 1
*** 2990,2996 ****
d2245 1
a2245 1
! echo "configure:2994: checking for printf in -lkrb" >&5
d2249 1
a2249 1
--- 2994,3000 ----
d2253 1
a2253 1
! echo "configure:2998: checking for printf in -lkrb" >&5
d2258 1
a2258 1
*** 2998,3004 ****
d2262 1
a2262 1
! #line 3002 "configure"
d2266 1
a2266 1
--- 3002,3008 ----
d2270 1
a2270 1
! #line 3006 "configure"
d2275 1
a2275 1
*** 3009,3015 ****
d2279 1
a2279 1
! if { (eval echo configure:3013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2283 1
a2283 1
--- 3013,3019 ----
d2287 1
a2287 1
! if { (eval echo configure:3017: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2292 1
a2292 1
*** 3043,3049 ****
d2296 1
a2296 1
! echo "configure:3047: checking for printf in -ldes" >&5
d2300 1
a2300 1
--- 3047,3053 ----
d2304 1
a2304 1
! echo "configure:3051: checking for printf in -ldes" >&5
d2309 1
a2309 1
*** 3051,3057 ****
d2313 1
a2313 1
! #line 3055 "configure"
d2317 1
a2317 1
--- 3055,3061 ----
d2321 1
a2321 1
! #line 3059 "configure"
d2326 1
a2326 1
*** 3062,3068 ****
d2330 1
a2330 1
! if { (eval echo configure:3066: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2334 1
a2334 1
--- 3066,3072 ----
d2338 1
a2338 1
! if { (eval echo configure:3070: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2343 1
a2343 1
*** 3091,3102 ****
d2347 1
a2347 1
! echo "configure:3095: checking for $ac_func" >&5
d2352 1
a2352 1
! #line 3100 "configure"
d2356 1
a2356 1
--- 3095,3106 ----
d2360 1
a2360 1
! echo "configure:3099: checking for $ac_func" >&5
d2365 1
a2365 1
! #line 3104 "configure"
d2370 1
a2370 1
*** 3119,3125 ****
d2374 1
a2374 1
! if { (eval echo configure:3123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2378 1
a2378 1
--- 3123,3129 ----
d2382 1
a2382 1
! if { (eval echo configure:3127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2387 1
a2387 1
*** 3160,3176 ****
d2391 1
a2391 1
! echo "configure:3164: checking for $ac_hdr" >&5
d2396 1
a2396 1
! #line 3169 "configure"
d2401 1
a2401 1
! { (eval echo configure:3174: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
d2405 1
a2405 1
--- 3164,3180 ----
d2409 1
a2409 1
! echo "configure:3168: checking for $ac_hdr" >&5
d2414 1
a2414 1
! #line 3173 "configure"
d2419 1
a2419 1
! { (eval echo configure:3178: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
d2424 1
a2424 1
*** 3216,3222 ****
d2428 1
a2428 1
! #line 3220 "configure"
d2432 1
a2432 1
--- 3220,3226 ----
d2436 1
a2436 1
! #line 3224 "configure"
d2441 1
a2441 1
*** 3232,3238 ****
d2445 1
a2445 1
! #line 3236 "configure"
d2449 1
a2449 1
--- 3236,3242 ----
d2453 1
a2453 1
! #line 3240 "configure"
d2458 1
a2458 1
*** 3251,3257 ****
d2462 1
a2462 1
! echo "configure:3255: checking for compile in -lgen" >&5
d2466 1
a2466 1
--- 3255,3261 ----
d2470 1
a2470 1
! echo "configure:3259: checking for compile in -lgen" >&5
d2475 1
a2475 1
*** 3259,3265 ****
d2479 1
a2479 1
! #line 3263 "configure"
d2483 1
a2483 1
--- 3263,3269 ----
d2487 1
a2487 1
! #line 3267 "configure"
d2492 1
a2492 1
*** 3270,3276 ****
d2496 1
a2496 1
! if { (eval echo configure:3274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2500 1
a2500 1
--- 3274,3280 ----
d2504 1
a2504 1
! if { (eval echo configure:3278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2509 1
a2509 1
*** 3319,3330 ****
d2513 1
a2513 1
! echo "configure:3323: checking for gethostname" >&5
d2518 1
a2518 1
! #line 3328 "configure"
d2522 1
a2522 1
--- 3323,3334 ----
d2526 1
a2526 1
! echo "configure:3327: checking for gethostname" >&5
d2531 1
a2531 1
! #line 3332 "configure"
d2536 1
a2536 1
*** 3347,3353 ****
d2540 1
a2540 1
! if { (eval echo configure:3351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2544 1
a2544 1
--- 3351,3357 ----
d2548 1
a2548 1
! if { (eval echo configure:3355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2553 1
a2553 1
*** 3412,3425 ****
d2557 1
a2557 1
! echo "configure:3416: checking for library containing crypt" >&5
d2564 1
a2564 1
! #line 3423 "configure"
d2568 1
a2568 1
--- 3416,3429 ----
d2572 1
a2572 1
! echo "configure:3420: checking for library containing crypt" >&5
d2579 1
a2579 1
! #line 3427 "configure"
d2584 1
a2584 1
*** 3430,3436 ****
d2588 1
a2588 1
! if { (eval echo configure:3434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2592 1
a2592 1
--- 3434,3440 ----
d2596 1
a2596 1
! if { (eval echo configure:3438: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2601 1
a2601 1
*** 3441,3447 ****
d2605 1
a2605 1
! #line 3445 "configure"
d2609 1
a2609 1
--- 3445,3451 ----
d2613 1
a2613 1
! #line 3449 "configure"
d2618 1
a2618 1
*** 3452,3458 ****
d2622 1
a2622 1
! if { (eval echo configure:3456: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2626 1
a2626 1
--- 3456,3462 ----
d2630 1
a2630 1
! if { (eval echo configure:3460: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2635 1
a2635 1
*** 3481,3500 ****
d2640 1
a2640 1
! echo "configure:3486: checking for cygwin32" >&5
d2645 1
a2645 1
! #line 3491 "configure"
d2652 1
a2652 1
! if { (eval echo configure:3498: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
d2656 1
a2656 1
--- 3485,3554 ----
d2678 1
a2678 1
+ echo "configure:3507: checking for MySQL directory" >&5
d2711 1
a2711 1
! echo "configure:3540: checking for cygwin32" >&5
d2716 1
a2716 1
! #line 3545 "configure"
d2723 1
a2723 1
! if { (eval echo configure:3552: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
d2728 2
a2729 2
*** ./configure.in	Wed Jun 21 12:06:25 2000
--- ./configure.in	Thu Jul  6 14:19:57 2000
d2731 2
a2732 2
*** 270,275 ****
--- 270,323 ----
d2788 2
a2789 2
*** ./doc/cvs.texinfo	Thu Jul  6 14:13:54 2000
--- ./doc/cvs.texinfo	Thu Jul  6 14:19:57 2000
d2890 1
a2890 1
--- ./src/Makefile.in	Thu Jul  6 14:19:57 2000
d2929 1
a2929 1
--- ./src/add.c	Thu Jul  6 14:19:57 2000
d2944 1
a2944 1
--- ./src/admin.c	Thu Jul  6 14:19:57 2000
d2972 1
a2972 1
--- ./src/checkout.c	Thu Jul  6 14:19:57 2000
d2990 1
a2990 1
--- ./src/client.c	Thu Jul  6 14:19:57 2000
d3028 1
a3028 1
--- ./src/commit.c	Thu Jul  6 14:19:57 2000
d3082 2
a3083 2
*** ./src/cvs.h	Wed Jun 28 09:04:18 2000
--- ./src/cvs.h	Thu Jul  6 14:19:57 2000
d3156 1
a3156 1
*** 860,866 ****
d3164 1
a3164 1
--- 878,884 ----
d3173 2
a3174 2
*** 874,879 ****
--- 892,923 ----
d3209 1
a3209 1
--- ./src/diff.c	Thu Jul  6 14:19:57 2000
d3229 1
a3229 1
--- ./src/edit.c	Thu Jul  6 14:19:57 2000
d3330 1
a3330 1
--- ./src/error.c	Thu Jul  6 14:19:57 2000
d3344 2
a3345 2
*** ./src/import.c	Thu Jun 22 11:25:33 2000
--- ./src/import.c	Thu Jul  6 14:19:57 2000
d3360 1
a3360 1
--- ./src/local_auth.c	Thu Jul  6 14:19:57 2000
d3810 1
a3810 1
--- ./src/lock.c	Thu Jul  6 14:19:57 2000
d3831 1
a3831 1
--- ./src/log.c	Thu Jul  6 14:19:57 2000
d3850 2
a3851 2
*** ./src/login.c	Mon Nov 29 23:11:12 1999
--- ./src/login.c	Thu Jul  6 14:19:57 2000
d3870 2
a3871 2
*** ./src/main.c	Thu Jul  6 12:45:19 2000
--- ./src/main.c	Thu Jul  6 14:19:57 2000
d3873 2
a3874 2
*** 237,242 ****
--- 237,243 ----
d3883 1
a3883 1
*** 432,438 ****
d3891 1
a3891 1
--- 433,440 ----
d3901 2
a3902 2
*** 608,613 ****
--- 610,618 ----
d3913 2
a3914 2
*** 1001,1006 ****
--- 1006,1030 ----
d3941 2
a3942 2
*** 1042,1047 ****
--- 1066,1075 ----
d3955 1
a3955 1
--- ./src/mkmodules.c	Thu Jul  6 14:19:57 2000
d3994 1
a3994 1
--- ./src/mysqlsubr.c	Thu Jul  6 14:19:57 2000
d4077 1
a4077 1
--- ./src/parseinfo.c	Thu Jul  6 14:19:57 2000
d4123 1
a4123 1
--- ./src/patch.c	Thu Jul  6 14:19:57 2000
d4157 2
a4158 2
*** ./src/rcs.c	Thu Jul  6 12:45:19 2000
--- ./src/rcs.c	Thu Jul  6 14:19:57 2000
d4160 1
a4160 1
*** 8493,8499 ****
d4168 1
a4168 1
--- 8493,8499 ----
d4178 1
a4178 1
--- ./src/recurse.c	Thu Jul  6 14:19:57 2000
d4320 1
a4320 1
--- ./src/remove.c	Thu Jul  6 14:19:57 2000
d4358 1
a4358 1
--- ./src/rtag.c	Thu Jul  6 14:19:57 2000
d4395 1
a4395 1
--- ./src/scramble.c	Thu Jul  6 14:19:57 2000
d4471 2
a4472 2
*** ./src/server.c	Thu Jul  6 12:45:19 2000
--- ./src/server.c	Thu Jul  6 14:19:57 2000
d4486 1
a4486 1
*** 5249,5256 ****
d4495 1
a4495 1
--- 5252,5259 ----
d4505 2
a4506 2
*** 5261,5266 ****
--- 5264,5273 ----
d4518 2
a4519 2
*** 5424,5429 ****
--- 5431,5593 ----
d4684 2
a4685 2
*** 5437,5442 ****
--- 5601,5612 ----
d4699 2
a4700 2
*** 5697,5702 ****
--- 5867,5879 ----
d4715 1
a4715 1
*** 5723,5730 ****
d4724 1
a4724 1
--- 5900,5910 ----
d4737 1
a4737 1
*** 5734,5740 ****
d4745 1
a4745 1
--- 5914,5921 ----
d4755 1
a4755 1
*** 5822,5828 ****
d4763 1
a4763 1
--- 6003,6010 ----
d4773 1
a4773 1
*** 5914,5923 ****
d4784 1
a4784 1
--- 6096,6109 ----
d4800 1
a4800 1
*** 5934,5940 ****
d4808 1
a4808 1
--- 6120,6127 ----
d4819 1
a4819 1
--- ./src/status.c	Thu Jul  6 14:19:57 2000
d4839 1
a4839 1
--- ./src/tag.c	Thu Jul  6 14:19:57 2000
d4892 2
a4893 2
*** ./src/update.c	Wed Jun 28 09:04:19 2000
--- ./src/update.c	Thu Jul  6 14:19:57 2000
d4966 1
a4966 1
--- ./src/watch.c	Thu Jul  6 14:19:57 2000
@


1.21
log
@Massage to compensate for latest changes to master tree.
@
text
@d3 1
a3 1
--- ./config.h.in	Thu Jul  6 13:55:53 2000
d18 1
a18 1
--- ./configure	Thu Jul  6 13:55:54 2000
d2685 1
a2685 1
--- ./configure.in	Thu Jul  6 13:55:54 2000
a2742 406
diff --exclude=CVS -crN ../pristine-ccvs/doc/cvs.info ./doc/cvs.info
*** ./doc/cvs.info	Tue May  9 11:16:05 2000
--- ./doc/cvs.info	Thu Jul  6 12:50:20 2000
***************
*** 26,38 ****
  Indirect:
  cvs.info-1: 971
  cvs.info-2: 49286
! cvs.info-3: 97172
! cvs.info-4: 145904
! cvs.info-5: 195793
! cvs.info-6: 245438
! cvs.info-7: 284824
! cvs.info-8: 332477
! cvs.info-9: 374646
  
  Tag Table:
  (Indirect)
--- 26,38 ----
  Indirect:
  cvs.info-1: 971
  cvs.info-2: 49286
! cvs.info-3: 97144
! cvs.info-4: 145876
! cvs.info-5: 195763
! cvs.info-6: 245290
! cvs.info-7: 284676
! cvs.info-8: 332329
! cvs.info-9: 374498
  
  Tag Table:
  (Indirect)
***************
*** 76,224 ****
  Node: Starting a new project85140
  Node: Setting up the files85884
  Node: From files86508
! Node: From other version control systems88514
! Node: From scratch91082
! Node: Defining the module91818
! Node: Revisions92799
! Node: Revision numbers94005
! Node: Versions revisions releases95042
! Node: Assigning revisions95624
! Node: Tags97172
! Node: Tagging the working directory102533
! Node: Tagging by date/tag103921
! Node: Modifying tags105286
! Node: Tagging add/remove107196
! Node: Sticky tags108830
! Node: Branching and merging111846
! Node: Branches motivation113143
! Node: Creating a branch114154
! Node: Accessing branches115714
! Node: Branches and revisions118971
! Node: Magic branch numbers121687
! Node: Merging a branch123179
! Node: Merging more than once125207
! Node: Merging two revisions127688
! Node: Merging adds and removals129013
! Node: Merging and keywords129762
! Node: Recursive behavior132543
! Node: Adding and removing134371
! Node: Adding files135265
! Node: Removing files137938
! Node: Removing directories141360
! Node: Moving files142492
! Node: Outside143139
! Node: Inside144054
! Node: Rename by copying144902
! Node: Moving directories145904
! Node: History browsing147307
! Node: log messages147859
! Node: history database148181
! Node: user-defined logging148663
! Node: annotate150469
! Node: Binary files151610
! Node: Binary why152246
! Node: Binary howto154482
! Node: Multiple developers157345
! Node: File status159503
! Node: Updating a file162372
! Node: Conflicts example163670
! Node: Informing others167729
! Node: Concurrency168269
! Node: Watches170028
! Node: Setting a watch171418
! Node: Getting Notified172714
! Node: Editing files176089
! Node: Watch information178603
! Node: Watches Compatibility179441
! Node: Choosing a model180314
! Node: Revision management182989
! Node: When to commit183592
! Node: Keyword substitution184700
! Node: Keyword list185683
! Node: Using keywords188009
! Node: Avoiding substitution189651
! Node: Substitution modes190547
! Node: Log keyword193134
! Node: Tracking sources194274
! Node: First import195793
! Node: Update imports197127
! Node: Reverting local changes198602
! Node: Binary files in imports199294
! Node: Keywords in imports199603
! Node: Multiple vendor branches200742
! Node: Builds202436
! Node: Special Files205118
! Node: CVS commands205764
! Node: Structure207208
! Node: Exit status208479
! Node: ~/.cvsrc209471
! Node: Global options211481
! Node: Common options216164
! Node: admin223774
! Node: admin options224771
! Node: checkout236185
! Node: checkout options238946
! Node: checkout examples243293
! Node: commit243570
! Node: commit options245438
! Node: commit examples246838
! Node: diff249194
! Node: diff options250078
! Node: diff examples252188
! Node: export253148
! Node: export options254400
! Node: history255474
! Node: history options256255
! Node: import259753
! Node: import options262361
! Node: import output263616
! Node: import examples264693
! Node: log264861
! Node: log options266009
! Node: log examples269265
! Node: rdiff269411
! Node: rdiff options270719
! Node: rdiff examples272377
! Node: release273343
! Node: release options274640
! Node: release output275319
! Node: release examples276834
! Node: update277305
! Node: update options278115
! Node: update output281992
! Node: Invoking CVS284824
! Node: Administrative files304530
! Node: modules306004
! Node: Alias modules307352
! Node: Regular modules308406
! Node: Ampersand modules309796
! Node: Excluding directories311035
! Node: Module options311582
! Node: Module program options313624
! Node: Wrappers315134
! Node: commit files316838
! Node: syntax318546
! Node: commitinfo319426
! Node: verifymsg320944
! Node: editinfo323389
! Node: editinfo example325675
! Node: loginfo326969
! Node: loginfo example329318
! Node: Keeping a checked out copy330153
! Node: rcsinfo331170
! Node: cvsignore332477
! Node: checkoutlist335744
! Node: history file337076
! Node: Variables337731
! Node: config340548
! Node: Environment variables343620
! Node: Compatibility348210
! Node: Troubleshooting349213
! Node: Error messages349836
! Node: Connection365202
! Node: Other problems368576
! Node: Credits369510
! Node: BUGS370899
! Node: Index374646
  
  End Tag Table
--- 76,224 ----
  Node: Starting a new project85140
  Node: Setting up the files85884
  Node: From files86508
! Node: From other version control systems88486
! Node: From scratch91054
! Node: Defining the module91790
! Node: Revisions92771
! Node: Revision numbers93977
! Node: Versions revisions releases95014
! Node: Assigning revisions95596
! Node: Tags97144
! Node: Tagging the working directory102505
! Node: Tagging by date/tag103893
! Node: Modifying tags105258
! Node: Tagging add/remove107168
! Node: Sticky tags108802
! Node: Branching and merging111818
! Node: Branches motivation113115
! Node: Creating a branch114126
! Node: Accessing branches115686
! Node: Branches and revisions118943
! Node: Magic branch numbers121659
! Node: Merging a branch123151
! Node: Merging more than once125179
! Node: Merging two revisions127660
! Node: Merging adds and removals128985
! Node: Merging and keywords129734
! Node: Recursive behavior132515
! Node: Adding and removing134343
! Node: Adding files135237
! Node: Removing files137910
! Node: Removing directories141332
! Node: Moving files142464
! Node: Outside143111
! Node: Inside144026
! Node: Rename by copying144874
! Node: Moving directories145876
! Node: History browsing147279
! Node: log messages147831
! Node: history database148153
! Node: user-defined logging148635
! Node: annotate150441
! Node: Binary files151582
! Node: Binary why152218
! Node: Binary howto154454
! Node: Multiple developers157317
! Node: File status159475
! Node: Updating a file162344
! Node: Conflicts example163642
! Node: Informing others167701
! Node: Concurrency168241
! Node: Watches170000
! Node: Setting a watch171390
! Node: Getting Notified172686
! Node: Editing files176059
! Node: Watch information178573
! Node: Watches Compatibility179411
! Node: Choosing a model180284
! Node: Revision management182959
! Node: When to commit183562
! Node: Keyword substitution184670
! Node: Keyword list185653
! Node: Using keywords187979
! Node: Avoiding substitution189621
! Node: Substitution modes190517
! Node: Log keyword193104
! Node: Tracking sources194244
! Node: First import195763
! Node: Update imports197097
! Node: Reverting local changes198572
! Node: Binary files in imports199264
! Node: Keywords in imports199573
! Node: Multiple vendor branches200712
! Node: Builds202406
! Node: Special Files205088
! Node: CVS commands205734
! Node: Structure207178
! Node: Exit status208449
! Node: ~/.cvsrc209441
! Node: Global options211451
! Node: Common options216134
! Node: admin223744
! Node: admin options224741
! Node: checkout236037
! Node: checkout options238798
! Node: checkout examples243145
! Node: commit243422
! Node: commit options245290
! Node: commit examples246690
! Node: diff249046
! Node: diff options249930
! Node: diff examples252040
! Node: export253000
! Node: export options254252
! Node: history255326
! Node: history options256107
! Node: import259605
! Node: import options262213
! Node: import output263468
! Node: import examples264545
! Node: log264713
! Node: log options265861
! Node: log examples269117
! Node: rdiff269263
! Node: rdiff options270571
! Node: rdiff examples272229
! Node: release273195
! Node: release options274492
! Node: release output275171
! Node: release examples276686
! Node: update277157
! Node: update options277967
! Node: update output281844
! Node: Invoking CVS284676
! Node: Administrative files304382
! Node: modules305856
! Node: Alias modules307204
! Node: Regular modules308258
! Node: Ampersand modules309648
! Node: Excluding directories310887
! Node: Module options311434
! Node: Module program options313476
! Node: Wrappers314986
! Node: commit files316690
! Node: syntax318398
! Node: commitinfo319278
! Node: verifymsg320796
! Node: editinfo323241
! Node: editinfo example325527
! Node: loginfo326821
! Node: loginfo example329170
! Node: Keeping a checked out copy330005
! Node: rcsinfo331022
! Node: cvsignore332329
! Node: checkoutlist335596
! Node: history file336928
! Node: Variables337583
! Node: config340400
! Node: Environment variables343472
! Node: Compatibility348062
! Node: Troubleshooting349065
! Node: Error messages349688
! Node: Connection365054
! Node: Other problems368428
! Node: Credits369362
! Node: BUGS370751
! Node: Index374498
  
  End Tag Table
diff --exclude=CVS -crN ../pristine-ccvs/doc/cvs.info-2 ./doc/cvs.info-2
*** ./doc/cvs.info-2	Tue May  9 11:16:05 2000
--- ./doc/cvs.info-2	Thu Jul  6 12:50:20 2000
***************
*** 871,883 ****
  directory.
  
       $ cd ..
!      $ mv DIR DIR.orig
!      $ cvs checkout yoyodyne/DIR       # Explanation below
!      $ diff -r DIR.orig yoyodyne/DIR
!      $ rm -r DIR.orig
  
  Erasing the original sources is a good idea, to make sure that you do
! not accidentally edit them in DIR, bypassing CVS.  Of course, it would
  be wise to make sure that you have a backup of the sources before you
  remove them.
  
--- 871,882 ----
  directory.
  
       $ cd ..
!      $ cvs checkout yoyodyne/RDIR       # Explanation below
!      $ diff -r WDIR yoyodyne/RDIR
!      $ rm -r WDIR
  
  Erasing the original sources is a good idea, to make sure that you do
! not accidentally edit them in WDIR, bypassing CVS.  Of course, it would
  be wise to make sure that you have a backup of the sources before you
  remove them.
  
diff --exclude=CVS -crN ../pristine-ccvs/doc/cvs.info-4 ./doc/cvs.info-4
*** ./doc/cvs.info-4	Tue May  9 11:16:05 2000
--- ./doc/cvs.info-4	Thu Jul  6 12:50:20 2000
***************
*** 771,777 ****
  on standard input.  The standard thing to put in the `notify' file is
  the single line:
  
!      ALL mail %s -s \"CVS notification\"
  
     This causes users to be notified by electronic mail.
  
--- 771,777 ----
  on standard input.  The standard thing to put in the `notify' file is
  the single line:
  
!      ALL mail %s -s "CVS notification"
  
     This causes users to be notified by electronic mail.
  
diff --exclude=CVS -crN ../pristine-ccvs/doc/cvs.info-5 ./doc/cvs.info-5
*** ./doc/cvs.info-5	Tue May  9 11:16:05 2000
--- ./doc/cvs.info-5	Thu Jul  6 12:50:20 2000
***************
*** 914,922 ****
  
       If FILE is omitted, obtain the text from standard input,
       terminated by end-of-file or by a line containing `.' by itself.
!      Prompt for the text if interaction is possible; see `-I'.  Reading
!      from standard input does not work for client/server CVS and may
!      change in a future release of CVS.
  
  `-t-STRING'
       Similar to `-tFILE'. Write descriptive text from the STRING into
--- 914,920 ----
  
       If FILE is omitted, obtain the text from standard input,
       terminated by end-of-file or by a line containing `.' by itself.
!      Prompt for the text if interaction is possible; see `-I'.
  
  `-t-STRING'
       Similar to `-tFILE'. Write descriptive text from the STRING into
d2744 2
a2745 2
*** ./doc/cvs.texinfo	Thu Jul  6 12:45:19 2000
--- ./doc/cvs.texinfo	Thu Jul  6 13:55:54 2000
a2843 84
diff --exclude=CVS -crN ../pristine-ccvs/doc/cvsclient.info ./doc/cvsclient.info
*** ./doc/cvsclient.info	Tue May  9 11:16:05 2000
--- ./doc/cvsclient.info	Thu Jul  6 12:50:20 2000
***************
*** 10,16 ****
  Indirect:
  cvsclient.info-1: 240
  cvsclient.info-2: 24962
! cvsclient.info-3: 63659
  
  Tag Table:
  (Indirect)
--- 10,16 ----
  Indirect:
  cvsclient.info-1: 240
  cvsclient.info-2: 24962
! cvsclient.info-3: 63682
  
  Tag Table:
  (Indirect)
***************
*** 28,40 ****
  Node: Dates22903
  Node: Request intro23942
  Node: Requests24962
! Node: Response intro60381
! Node: Response pathnames61748
! Node: Responses63659
! Node: Text tags79677
! Node: Example81391
! Node: Requirements85171
! Node: Obsolete86079
! Node: Protocol Notes86817
  
  End Tag Table
--- 28,40 ----
  Node: Dates22903
  Node: Request intro23942
  Node: Requests24962
! Node: Response intro60404
! Node: Response pathnames61771
! Node: Responses63682
! Node: Text tags79700
! Node: Example81414
! Node: Requirements85194
! Node: Obsolete86102
! Node: Protocol Notes86840
  
  End Tag Table
diff --exclude=CVS -crN ../pristine-ccvs/doc/cvsclient.info-2 ./doc/cvsclient.info-2
*** ./doc/cvsclient.info-2	Tue May  9 11:16:05 2000
--- ./doc/cvsclient.info-2	Thu Jul  6 12:50:20 2000
***************
*** 25,31 ****
  
       The `Root' request must be sent only once, and it must be sent
       before any requests other than `Valid-responses',
!      `valid-requests', `UseUnchanged', `Set' or `init'.
  
  `Valid-responses REQUEST-LIST \n'
       Response expected: no.  Tell the server what responses the client
--- 25,32 ----
  
       The `Root' request must be sent only once, and it must be sent
       before any requests other than `Valid-responses',
!      `valid-requests', `UseUnchanged', `Set', `Global_option', or
!      `init'.
  
  `Valid-responses REQUEST-LIST \n'
       Response expected: no.  Tell the server what responses the client
diff --exclude=CVS -crN ../pristine-ccvs/src/ChangeLog ./src/ChangeLog
*** ./src/ChangeLog	Thu Jul  6 12:45:19 2000
--- ./src/ChangeLog	Thu Jul  6 13:15:50 2000
***************
*** 1,3 ****
--- 1,8 ----
+ 2000-07-06  Karl Fogel  <kfogel@@red-bean.com>
+ 
+ 	* sanity.sh (pserver-14): remove this test for portability
+ 	reasons (it was only recently added for the 2000-07-04 change).
+ 
  2000-07-06  Larry Jones  <larry.jones@@sdrc.com>
  
  	* main.c (main): Catch SIGABRT to try to clean up after assertion
d2846 1
a2846 1
--- ./src/Makefile.in	Thu Jul  6 13:55:54 2000
d2885 1
a2885 1
--- ./src/add.c	Thu Jul  6 13:55:54 2000
d2900 1
a2900 1
--- ./src/admin.c	Thu Jul  6 13:55:54 2000
d2928 1
a2928 1
--- ./src/checkout.c	Thu Jul  6 13:55:54 2000
d2946 1
a2946 1
--- ./src/client.c	Thu Jul  6 13:55:54 2000
d2984 1
a2984 1
--- ./src/commit.c	Thu Jul  6 13:55:54 2000
d3039 1
a3039 1
--- ./src/cvs.h	Thu Jul  6 13:55:54 2000
d3165 1
a3165 1
--- ./src/diff.c	Thu Jul  6 13:55:54 2000
d3185 1
a3185 1
--- ./src/edit.c	Thu Jul  6 13:55:54 2000
d3286 1
a3286 1
--- ./src/error.c	Thu Jul  6 13:55:54 2000
d3301 1
a3301 1
--- ./src/import.c	Thu Jul  6 13:55:54 2000
d3316 1
a3316 1
--- ./src/local_auth.c	Thu Jul  6 13:55:54 2000
d3766 1
a3766 1
--- ./src/lock.c	Thu Jul  6 13:55:54 2000
d3787 1
a3787 1
--- ./src/log.c	Thu Jul  6 13:55:54 2000
d3807 1
a3807 1
--- ./src/login.c	Thu Jul  6 13:55:54 2000
d3827 1
a3827 1
--- ./src/main.c	Thu Jul  6 13:55:54 2000
d3911 1
a3911 1
--- ./src/mkmodules.c	Thu Jul  6 13:55:54 2000
d3950 1
a3950 1
--- ./src/mysqlsubr.c	Thu Jul  6 13:55:54 2000
d4033 1
a4033 1
--- ./src/parseinfo.c	Thu Jul  6 13:55:54 2000
d4079 1
a4079 1
--- ./src/patch.c	Thu Jul  6 13:55:54 2000
d4114 1
a4114 1
--- ./src/rcs.c	Thu Jul  6 13:55:54 2000
d4134 1
a4134 1
--- ./src/recurse.c	Thu Jul  6 13:55:54 2000
d4276 1
a4276 1
--- ./src/remove.c	Thu Jul  6 13:55:54 2000
d4314 1
a4314 1
--- ./src/rtag.c	Thu Jul  6 13:55:54 2000
a4348 380
diff --exclude=CVS -crN ../pristine-ccvs/src/sanity.sh ./src/sanity.sh
*** ./src/sanity.sh	Thu Jul  6 12:45:19 2000
--- ./src/sanity.sh	Thu Jul  6 13:55:54 2000
***************
*** 7093,7180 ****
  	  mkdir 1
  	  cd 1
  
! 	  dotest modules-143 "${testcvs} -q co first-dir" ""
  
  	  cd first-dir
  	  mkdir subdir
! 	  dotest modules-143a "${testcvs} add subdir" \
! "Directory ${TESTDIR}/cvsroot/first-dir/subdir added to the repository"
! 
  	  cd subdir
  	  mkdir ssdir
! 	  dotest modules-143b "${testcvs} add ssdir" \
! "Directory ${TESTDIR}/cvsroot/first-dir/subdir/ssdir added to the repository"
  
  	  touch a b
  
! 	  dotest modules-144 "${testcvs} add a b" \
! "${PROG} [a-z]*: scheduling file .a. for addition
! ${PROG} [a-z]*: scheduling file .b. for addition
! ${PROG} [a-z]*: use .${PROG} commit. to add these files permanently"
  
! 	  dotest modules-145 "${testcvs} ci -m added" \
! "${PROG} [a-z]*: Examining .
! ${PROG} [a-z]*: Examining ssdir
! RCS file: ${TESTDIR}/cvsroot/first-dir/subdir/a,v
! done
! Checking in a;
! ${TESTDIR}/cvsroot/first-dir/subdir/a,v  <--  a
! initial revision: 1\.1
! done
! RCS file: ${TESTDIR}/cvsroot/first-dir/subdir/b,v
! done
! Checking in b;
! ${TESTDIR}/cvsroot/first-dir/subdir/b,v  <--  b
! initial revision: 1\.1
! done"
  
  	  cd ..
! 	  dotest modules-146 "${testcvs} -q co CVSROOT" \
! "U CVSROOT/checkoutlist
! U CVSROOT/commitinfo
! U CVSROOT/config
! U CVSROOT/cvswrappers
! U CVSROOT/editinfo
! U CVSROOT/loginfo
! U CVSROOT/modules
! U CVSROOT/notify
! U CVSROOT/rcsinfo
! U CVSROOT/taginfo
! U CVSROOT/verifymsg"
  
  	  # Here we test that CVS can deal with CVSROOT (whose repository
  	  # is at top level) in the same directory as subdir (whose repository
  	  # is a subdirectory of first-dir).  TODO: Might want to check that
  	  # files can actually get updated in this state.
! 	  dotest modules-147 "${testcvs} -q update" ""
! 
! 	  cat >CVSROOT/modules <<EOF
! realmodule first-dir/subdir a
! dirmodule first-dir/subdir
! namedmodule -d nameddir first-dir/subdir
! aliasmodule -a first-dir/subdir/a
! aliasnested -a first-dir/subdir/ssdir
! topfiles -a first-dir/file1 first-dir/file2
! world -a .
! statusmod -s Mungeable
! # Options must come before arguments.  It is possible this should
! # be relaxed at some point (though the result would be bizarre for
! # -a); for now test the current behavior.
! bogusalias first-dir/subdir/a -a
! EOF
! 	  dotest modules-148 "${testcvs} ci -m 'add modules' CVSROOT/modules" \
! "Checking in CVSROOT/modules;
! ${TESTDIR}/cvsroot/CVSROOT/modules,v  <--  modules
! new revision: 1\.5; previous revision: 1\.4
! done
! ${PROG} [a-z]*: Rebuilding administrative file database"
  
  	  cd ..
  	  # The "statusmod" module contains an error; trying to use it
  	  # will produce "modules file missing directory" I think.
  	  # However, that shouldn't affect the ability of "cvs co -c" or
  	  # "cvs co -s" to do something reasonable with it.
! 	  dotest modules-148a0 "${testcvs} co -c" 'aliasmodule  -a first-dir/subdir/a
  aliasnested  -a first-dir/subdir/ssdir
  bogusalias   first-dir/subdir/a -a
  dirmodule    first-dir/subdir
--- 7093,7168 ----
  	  mkdir 1
  	  cd 1
  
! 	  if ${testcvs} -q co first-dir; then
! 	      pass 143
! 	  else
! 	      fail 143
! 	  fi
  
  	  cd first-dir
  	  mkdir subdir
! 	  ${testcvs} add subdir >>${LOGFILE}
  	  cd subdir
+ 
  	  mkdir ssdir
! 	  ${testcvs} add ssdir >>${LOGFILE}
  
  	  touch a b
  
! 	  if ${testcvs} add a b 2>>${LOGFILE} ; then
! 	      pass 144
! 	  else
! 	      fail 144
! 	  fi
  
! 	  if ${testcvs} ci -m added >>${LOGFILE} 2>&1; then
! 	      pass 145
! 	  else
! 	      fail 145
! 	  fi
  
  	  cd ..
! 	  if ${testcvs} -q co CVSROOT >>${LOGFILE}; then
! 	      pass 146
! 	  else
! 	      fail 146
! 	  fi
  
  	  # Here we test that CVS can deal with CVSROOT (whose repository
  	  # is at top level) in the same directory as subdir (whose repository
  	  # is a subdirectory of first-dir).  TODO: Might want to check that
  	  # files can actually get updated in this state.
! 	  if ${testcvs} -q update; then
! 	      pass 147
! 	  else
! 	      fail 147
! 	  fi
  
+ 	  echo realmodule first-dir/subdir a >CVSROOT/modules
+ 	  echo dirmodule first-dir/subdir >>CVSROOT/modules
+ 	  echo namedmodule -d nameddir first-dir/subdir >>CVSROOT/modules
+ 	  echo aliasmodule -a first-dir/subdir/a >>CVSROOT/modules
+ 	  echo aliasnested -a first-dir/subdir/ssdir >>CVSROOT/modules
+ 	  echo topfiles -a first-dir/file1 first-dir/file2 >>CVSROOT/modules
+ 	  echo world -a . >>CVSROOT/modules
+ 	  echo statusmod -s Mungeable >>CVSROOT/modules
+ 
+ 	  # Options must come before arguments.  It is possible this should
+ 	  # be relaxed at some point (though the result would be bizarre for
+ 	  # -a); for now test the current behavior.
+ 	  echo bogusalias first-dir/subdir/a -a >>CVSROOT/modules
+ 	  if ${testcvs} ci -m 'add modules' CVSROOT/modules \
+ 	      >>${LOGFILE} 2>&1; then
+ 	      pass 148
+ 	  else
+ 	      fail 148
+ 	  fi
  	  cd ..
  	  # The "statusmod" module contains an error; trying to use it
  	  # will produce "modules file missing directory" I think.
  	  # However, that shouldn't affect the ability of "cvs co -c" or
  	  # "cvs co -s" to do something reasonable with it.
! 	  dotest 148a0 "${testcvs} co -c" 'aliasmodule  -a first-dir/subdir/a
  aliasnested  -a first-dir/subdir/ssdir
  bogusalias   first-dir/subdir/a -a
  dirmodule    first-dir/subdir
***************
*** 7186,7192 ****
  	  # There is code in modules.c:save_d which explicitly skips
  	  # modules defined with -a, which is why aliasmodule is not
  	  # listed.
! 	  dotest modules-148a1 "${testcvs} co -s" \
  'statusmod    Mungeable  
  bogusalias   NONE        first-dir/subdir/a -a
  dirmodule    NONE        first-dir/subdir
--- 7174,7180 ----
  	  # There is code in modules.c:save_d which explicitly skips
  	  # modules defined with -a, which is why aliasmodule is not
  	  # listed.
! 	  dotest 148a1 "${testcvs} co -s" \
  'statusmod    Mungeable  
  bogusalias   NONE        first-dir/subdir/a -a
  dirmodule    NONE        first-dir/subdir
***************
*** 7194,7253 ****
  realmodule   NONE        first-dir/subdir a'
  
  	  # Test that real modules check out to realmodule/a, not subdir/a.
! 	  dotest modules-149a1 "${testcvs} co realmodule" "U realmodule/a"
! 	  dotest modules-149a2 "test -d realmodule && test -f realmodule/a" ""
! 	  dotest_fail modules-149a3 "test -f realmodule/b" ""
! 	  dotest modules-149a4 "${testcvs} -q co realmodule" ""
! 	  dotest modules-149a5 "echo yes | ${testcvs} release -d realmodule" \
! "You have \[0\] altered files in this repository\.
! Are you sure you want to release (and delete) directory .realmodule.: "
  
! 	  dotest_fail modules-149b1 "${testcvs} co realmodule/a" \
  "${PROG}"' [a-z]*: module `realmodule/a'\'' is a request for a file in a module which is not a directory' \
  "${PROG}"' [a-z]*: module `realmodule/a'\'' is a request for a file in a module which is not a directory
  '"${PROG}"' \[[a-z]* aborted\]: cannot expand modules'
  
  	  # Now test the ability to check out a single file from a directory
! 	  dotest modules-150c "${testcvs} co dirmodule/a" "U dirmodule/a"
! 	  dotest modules-150d "test -d dirmodule && test -f dirmodule/a" ""
! 	  dotest_fail modules-150e "test -f dirmodule/b" ""
! 	  dotest modules-150f "echo yes | ${testcvs} release -d dirmodule" \
! "You have \[0\] altered files in this repository\.
! Are you sure you want to release (and delete) directory .dirmodule.: "
  	  # Now test the ability to correctly reject a non-existent filename.
  	  # For maximum studliness we would check that an error message is
  	  # being output.
! 	  # We accept a zero exit status because it is what CVS does
! 	  # (Dec 95).  Probably the exit status should be nonzero,
! 	  # however.
! 	  dotest modules-150g1 "${testcvs} co dirmodule/nonexist" \
! "${PROG} [a-z]*: warning: new-born dirmodule/nonexist has disappeared"
  	  # We tolerate the creation of the dirmodule directory, since that
  	  # is what CVS does, not because we view that as preferable to not
  	  # creating it.
! 	  dotest_fail modules-150g2 "test -f dirmodule/a || test -f dirmodule/b" ""
  	  rm -r dirmodule
  
  	  # Now test that a module using -d checks out to the specified
  	  # directory.
! 	  dotest modules-150h1 "${testcvs} -q co namedmodule" \
! 'U nameddir/a
  U nameddir/b'
! 	  dotest modules-150h2 "test -f nameddir/a && test -f nameddir/b" ""
  	  echo add line >>nameddir/a
! 	  dotest modules-150h3 "${testcvs} -q co namedmodule" 'M nameddir/a'
  	  rm nameddir/a
! 	  dotest modules-150h4 "${testcvs} -q co namedmodule" 'U nameddir/a'
! 	  dotest modules-150h99 "echo yes | ${testcvs} release -d nameddir" \
! "You have \[0\] altered files in this repository\.
! Are you sure you want to release (and delete) directory .nameddir.: "
  
  	  # Now test that alias modules check out to subdir/a, not
  	  # aliasmodule/a.
! 	  dotest modules-151 "${testcvs} co aliasmodule" ""
! 	  dotest_fail modules-152 "test -d aliasmodule" ""
  	  echo abc >>first-dir/subdir/a
! 	  dotest modules-153 "${testcvs} -q co aliasmodule" "M first-dir/subdir/a"
  
  	  cd ..
  	  rm -r 1
--- 7182,7293 ----
  realmodule   NONE        first-dir/subdir a'
  
  	  # Test that real modules check out to realmodule/a, not subdir/a.
! 	  if ${testcvs} co realmodule >>${LOGFILE}; then
! 	      pass 149a1
! 	  else
! 	      fail 149a1
! 	  fi
! 	  if test -d realmodule && test -f realmodule/a; then
! 	      pass 149a2
! 	  else
! 	      fail 149a2
! 	  fi
! 	  if test -f realmodule/b; then
! 	      fail 149a3
! 	  else
! 	      pass 149a3
! 	  fi
! 	  if ${testcvs} -q co realmodule; then
! 	      pass 149a4
! 	  else
! 	      fail 149a4
! 	  fi
! 	  if echo "yes" | ${testcvs} release -d realmodule >>${LOGFILE} ; then
! 	      pass 149a5
! 	  else
! 	      fail 149a5
! 	  fi
  
! 	  dotest_fail 149b1 "${testcvs} co realmodule/a" \
  "${PROG}"' [a-z]*: module `realmodule/a'\'' is a request for a file in a module which is not a directory' \
  "${PROG}"' [a-z]*: module `realmodule/a'\'' is a request for a file in a module which is not a directory
  '"${PROG}"' \[[a-z]* aborted\]: cannot expand modules'
  
  	  # Now test the ability to check out a single file from a directory
! 	  if ${testcvs} co dirmodule/a >>${LOGFILE}; then
! 	      pass 150c
! 	  else
! 	      fail 150c
! 	  fi
! 	  if test -d dirmodule && test -f dirmodule/a; then
! 	      pass 150d
! 	  else
! 	      fail 150d
! 	  fi
! 	  if test -f dirmodule/b; then
! 	      fail 150e
! 	  else
! 	      pass 150e
! 	  fi
! 	  if echo "yes" | ${testcvs} release -d dirmodule >>${LOGFILE} ; then
! 	      pass 150f
! 	  else
! 	      fail 150f
! 	  fi
  	  # Now test the ability to correctly reject a non-existent filename.
  	  # For maximum studliness we would check that an error message is
  	  # being output.
! 	  if ${testcvs} co dirmodule/nonexist >>${LOGFILE} 2>&1; then
! 	    # We accept a zero exit status because it is what CVS does
! 	    # (Dec 95).  Probably the exit status should be nonzero,
! 	    # however.
! 	      pass 150g1
! 	  else
! 	      pass 150g1
! 	  fi
  	  # We tolerate the creation of the dirmodule directory, since that
  	  # is what CVS does, not because we view that as preferable to not
  	  # creating it.
! 	  if test -f dirmodule/a || test -f dirmodule/b; then
! 	      fail 150g2
! 	  else
! 	      pass 150g2
! 	  fi
  	  rm -r dirmodule
  
  	  # Now test that a module using -d checks out to the specified
  	  # directory.
! 	  dotest 150h1 "${testcvs} -q co namedmodule" 'U nameddir/a
  U nameddir/b'
! 	  if test -f nameddir/a && test -f nameddir/b; then
! 	    pass 150h2
! 	  else
! 	    fail 150h2
! 	  fi
  	  echo add line >>nameddir/a
! 	  dotest 150h3 "${testcvs} -q co namedmodule" 'M nameddir/a'
  	  rm nameddir/a
! 	  dotest 150h4 "${testcvs} -q co namedmodule" 'U nameddir/a'
! 	  if echo "yes" | ${testcvs} release -d nameddir >>${LOGFILE} ; then
! 	    pass 150h99
! 	  else
! 	    fail 150h99
! 	  fi
  
  	  # Now test that alias modules check out to subdir/a, not
  	  # aliasmodule/a.
! 	  if ${testcvs} co aliasmodule >>${LOGFILE}; then
! 	      pass 151
! 	  else
! 	      fail 151
! 	  fi
! 	  if test -d aliasmodule; then
! 	      fail 152
! 	  else
! 	      pass 152
! 	  fi
  	  echo abc >>first-dir/subdir/a
! 	  dotest 153 "${testcvs} -q co aliasmodule" "M first-dir/subdir/a"
  
  	  cd ..
  	  rm -r 1
***************
*** 20133,20147 ****
  Amquiteunabletocomeupwithinterestingpasswordsanymore
  END AUTH REQUEST
  EOF
- 
-             # Test protection from D.o.S. attack during pserver auth phase.
-             #
-             # The unacceptably long line of 'x's should get cut off
-             # after PATH_MAX chars -- see calls to getline_safe() in
-             # server.c -- so even though no newline is ever sent, the
-             # server should claim a bad protocol start.
- 	    dotest_fail pserver-14 "(while true; do echo -n x; done) | ${testcvs} --allow-root=${CVSROOT_DIRNAME} pserver" \
- "${DOTSTAR} bad auth protocol start: ${DOTSTAR}"
  
  	    # Clean up.
  	    echo "# comments only" >config
--- 20173,20178 ----
d4351 1
a4351 1
--- ./src/scramble.c	Thu Jul  6 13:55:54 2000
d4428 1
a4428 1
--- ./src/server.c	Thu Jul  6 13:55:54 2000
d4775 1
a4775 1
--- ./src/status.c	Thu Jul  6 13:55:54 2000
d4795 1
a4795 1
--- ./src/tag.c	Thu Jul  6 13:55:54 2000
d4849 1
a4849 1
--- ./src/update.c	Thu Jul  6 13:55:54 2000
d4922 1
a4922 1
--- ./src/watch.c	Thu Jul  6 13:55:54 2000
@


1.20
log
@Remove reverse patch to ChangeLog -- we don't need that.
@
text
@d2 2
a3 2
*** ./config.h.in	Thu Jun 22 11:30:33 2000
--- ./config.h.in	Thu Jun 29 14:20:15 2000
d17 2
a18 2
*** ./configure	Thu Jun 22 11:30:33 2000
--- ./configure	Thu Jun 29 14:20:15 2000
d2684 2
a2685 2
*** ./configure.in	Thu Jun 22 11:30:33 2000
--- ./configure.in	Thu Jun 29 14:20:15 2000
d2743 406
d3150 2
a3151 2
*** ./doc/cvs.texinfo	Wed Jun 14 10:41:56 2000
--- ./doc/cvs.texinfo	Thu Jun 29 14:20:15 2000
d3250 84
d3335 2
a3336 2
*** ./src/Makefile.in	Tue Oct  6 16:04:30 1998
--- ./src/Makefile.in	Thu Jun 29 14:20:15 2000
d3374 2
a3375 2
*** ./src/add.c	Thu Jun 29 14:19:34 2000
--- ./src/add.c	Thu Jun 29 14:20:15 2000
d3389 2
a3390 2
*** ./src/admin.c	Tue Jun 13 14:30:44 2000
--- ./src/admin.c	Thu Jun 29 14:20:15 2000
d3392 1
a3392 1
*** 434,440 ****
d3400 1
a3400 1
--- 434,440 ----
d3409 1
a3409 1
*** 847,851 ****
d3415 1
a3415 1
--- 847,850 ----
d3417 2
a3418 2
*** ./src/checkout.c	Thu Jun 29 14:19:34 2000
--- ./src/checkout.c	Thu Jun 29 14:20:15 2000
d3435 2
a3436 2
*** ./src/client.c	Thu Jun 29 14:19:34 2000
--- ./src/client.c	Thu Jun 29 14:20:15 2000
d3438 1
a3438 1
*** 3830,3836 ****
d3446 1
a3446 1
--- 3830,3836 ----
d3455 1
a3455 1
*** 5518,5524 ****
d3463 1
a3463 1
--- 5518,5525 ----
d3473 2
a3474 2
*** ./src/commit.c	Thu Jun 22 11:30:35 2000
--- ./src/commit.c	Thu Jun 29 14:20:15 2000
d3528 2
a3529 2
*** ./src/cvs.h	Thu Jun 29 14:19:34 2000
--- ./src/cvs.h	Thu Jun 29 14:20:15 2000
d3654 2
a3655 2
*** ./src/diff.c	Wed Apr 14 17:12:26 1999
--- ./src/diff.c	Thu Jun 29 14:20:15 2000
d3674 2
a3675 2
*** ./src/edit.c	Tue Jun 13 14:30:44 2000
--- ./src/edit.c	Thu Jun 29 14:20:15 2000
d3775 2
a3776 2
*** ./src/error.c	Thu Jun 29 14:19:34 2000
--- ./src/error.c	Thu Jun 29 14:20:15 2000
d3790 2
a3791 2
*** ./src/import.c	Thu Jun 22 11:30:35 2000
--- ./src/import.c	Thu Jun 29 14:20:15 2000
d3805 2
a3806 2
*** ./src/local_auth.c	Wed Dec 31 16:00:00 1969
--- ./src/local_auth.c	Mon Jul  3 15:08:28 2000
d4255 2
a4256 2
*** ./src/lock.c	Wed Dec 15 09:53:21 1999
--- ./src/lock.c	Mon Jul  3 15:09:24 2000
d4276 2
a4277 2
*** ./src/log.c	Thu Jun 22 11:30:35 2000
--- ./src/log.c	Thu Jun 29 14:20:15 2000
d4296 2
a4297 2
*** ./src/login.c	Mon Nov 29 21:11:12 1999
--- ./src/login.c	Thu Jun 29 14:20:15 2000
d4316 2
a4317 2
*** ./src/main.c	Thu Jun 22 11:30:35 2000
--- ./src/main.c	Thu Jun 29 14:20:15 2000
d4329 1
a4329 1
*** 427,433 ****
d4337 1
a4337 1
--- 428,435 ----
d4347 2
a4348 2
*** 603,608 ****
--- 605,613 ----
d4359 2
a4360 2
*** 998,1003 ****
--- 1003,1027 ----
d4387 2
a4388 2
*** 1039,1044 ****
--- 1063,1072 ----
d4400 2
a4401 2
*** ./src/mkmodules.c	Thu Mar 23 14:52:25 2000
--- ./src/mkmodules.c	Thu Jun 29 14:20:15 2000
d4439 2
a4440 2
*** ./src/mysqlsubr.c	Wed Dec 31 16:00:00 1969
--- ./src/mysqlsubr.c	Thu Jun 29 14:20:15 2000
d4522 2
a4523 2
*** ./src/parseinfo.c	Mon Mar 13 11:15:31 2000
--- ./src/parseinfo.c	Thu Jun 29 14:20:15 2000
d4568 2
a4569 2
*** ./src/patch.c	Wed Jun 14 12:38:15 2000
--- ./src/patch.c	Thu Jun 29 14:20:15 2000
d4571 2
a4572 2
*** 323,328 ****
--- 323,334 ----
d4586 1
a4586 1
*** 352,358 ****
d4594 1
a4594 1
--- 358,364 ----
d4603 2
a4604 2
*** ./src/rcs.c	Thu Jun 29 14:19:34 2000
--- ./src/rcs.c	Thu Jun 29 14:20:15 2000
d4606 1
a4606 1
*** 8490,8496 ****
d4614 1
a4614 1
--- 8490,8496 ----
d4623 2
a4624 2
*** ./src/recurse.c	Thu Jun 22 11:30:35 2000
--- ./src/recurse.c	Thu Jun 29 14:20:15 2000
d4765 2
a4766 2
*** ./src/remove.c	Thu Jun 22 11:30:35 2000
--- ./src/remove.c	Thu Jun 29 14:20:15 2000
d4803 2
a4804 2
*** ./src/rtag.c	Wed Jun 14 12:38:15 2000
--- ./src/rtag.c	Thu Jun 29 14:20:15 2000
d4840 2
a4841 2
*** ./src/sanity.sh	Mon Jul  3 15:20:31 2000
--- ./src/sanity.sh	Wed Jun 14 13:40:53 2000
d4865 1
a4865 1
! 
d4922 1
a4922 1
! 
d4957 1
a4957 1
! 
d4980 20
a4999 20
! 
! 	  echo realmodule first-dir/subdir a >CVSROOT/modules
! 	  echo dirmodule first-dir/subdir >>CVSROOT/modules
! 	  echo namedmodule -d nameddir first-dir/subdir >>CVSROOT/modules
! 	  echo aliasmodule -a first-dir/subdir/a >>CVSROOT/modules
! 	  echo aliasnested -a first-dir/subdir/ssdir >>CVSROOT/modules
! 	  echo topfiles -a first-dir/file1 first-dir/file2 >>CVSROOT/modules
! 	  echo world -a . >>CVSROOT/modules
! 	  echo statusmod -s Mungeable >>CVSROOT/modules
! 
! 	  # Options must come before arguments.  It is possible this should
! 	  # be relaxed at some point (though the result would be bizarre for
! 	  # -a); for now test the current behavior.
! 	  echo bogusalias first-dir/subdir/a -a >>CVSROOT/modules
! 	  if ${testcvs} ci -m 'add modules' CVSROOT/modules \
! 	      >>${LOGFILE} 2>&1; then
! 	      pass 148
! 	  else
! 	      fail 148
! 	  fi
d5201 18
d5220 2
a5221 2
*** ./src/scramble.c	Fri Jun 27 13:16:08 1997
--- ./src/scramble.c	Thu Jun 29 14:20:15 2000
d5297 2
a5298 2
*** ./src/server.c	Thu Jun 29 14:19:34 2000
--- ./src/server.c	Thu Jun 29 14:20:15 2000
d5312 1
a5312 1
*** 5246,5253 ****
d5321 1
a5321 1
--- 5249,5256 ----
d5331 2
a5332 2
*** 5258,5263 ****
--- 5261,5270 ----
d5344 2
a5345 2
*** 5421,5426 ****
--- 5428,5590 ----
d5510 2
a5511 2
*** 5434,5439 ****
--- 5598,5609 ----
d5525 2
a5526 2
*** 5694,5699 ****
--- 5864,5876 ----
d5541 1
a5541 1
*** 5720,5727 ****
d5550 1
a5550 1
--- 5897,5907 ----
d5563 1
a5563 1
*** 5731,5737 ****
d5571 1
a5571 1
--- 5911,5918 ----
d5581 1
a5581 1
*** 5819,5825 ****
d5589 1
a5589 1
--- 6000,6007 ----
d5599 1
a5599 1
*** 5911,5920 ****
d5610 1
a5610 1
--- 6093,6106 ----
d5626 1
a5626 1
*** 5931,5937 ****
d5634 1
a5634 1
--- 6117,6124 ----
d5644 2
a5645 2
*** ./src/status.c	Tue Jun  1 14:36:33 1999
--- ./src/status.c	Thu Jun 29 14:20:15 2000
d5664 2
a5665 2
*** ./src/tag.c	Wed Jun 14 12:32:51 2000
--- ./src/tag.c	Thu Jun 29 14:20:15 2000
d5718 2
a5719 2
*** ./src/update.c	Thu Jun 29 14:19:34 2000
--- ./src/update.c	Thu Jun 29 14:20:15 2000
d5791 2
a5792 2
*** ./src/watch.c	Tue Jun 13 14:30:44 2000
--- ./src/watch.c	Thu Jun 29 14:20:15 2000
@


1.19
log
@Deal with top-level directories (i.e., Root=CVSROOT/Emptydir) by
checking for '\0' as a directory separator of last resort in
comparisons against CVSroot_directory.

If match still fails in find_perms(), then try to resolve
CVSroot_directory as a symlink.
@
text
@a2843 14
diff --exclude=CVS -crN ../pristine-ccvs/src/ChangeLog ./src/ChangeLog
*** ./src/ChangeLog	Mon Jul  3 15:20:31 2000
--- ./src/ChangeLog	Thu Jun 29 14:19:34 2000
***************
*** 1,8 ****
- 2000-07-03  Larry Jones  <larry.jones@@sdrc.com>
- 
- 	* sanity.sh (modules): Rewrite using dotest.  Add "modules-"
- 	prefix to test names.
- 
  2000-06-28  Larry Jones  <larry.jones@@sdrc.com>
  
  	* error.c (error_exit): Call rcs_cleanup () to release any rcs locks.
--- 1,3 ----
@


1.18
log
@Reinstate CVSroot_directory symlink resolution (from revision 1.14 of
this patch):

If CVSroot_directory does not match repository, then try resolving it
as a symlink and matching again. If succeed, set CVSroot_directory to
the real directory and continue.
@
text
@d2 2
a3 2
*** ./config.h.in	Wed Jun 21 12:06:25 2000
--- ./config.h.in	Thu Jun 29 14:02:50 2000
d17 2
a18 2
*** ./configure	Wed Jun 21 12:06:25 2000
--- ./configure	Thu Jun 29 14:02:50 2000
d2684 2
a2685 2
*** ./configure.in	Wed Jun 21 12:06:25 2000
--- ./configure.in	Thu Jun 29 14:02:50 2000
d2744 2
a2745 2
*** ./doc/cvs.texinfo	Thu Jun 15 12:33:31 2000
--- ./doc/cvs.texinfo	Thu Jun 29 14:02:50 2000
d2844 14
d2859 2
a2860 2
*** ./src/Makefile.in	Tue Oct  6 18:04:30 1998
--- ./src/Makefile.in	Thu Jun 29 14:02:50 2000
d2898 2
a2899 2
*** ./src/add.c	Wed Jun 28 09:04:18 2000
--- ./src/add.c	Thu Jun 29 14:02:50 2000
d2913 2
a2914 2
*** ./src/admin.c	Tue Jun 13 16:50:10 2000
--- ./src/admin.c	Thu Jun 29 14:02:50 2000
d2941 2
a2942 2
*** ./src/checkout.c	Wed Jun 28 09:04:18 2000
--- ./src/checkout.c	Thu Jun 29 14:02:50 2000
d2959 2
a2960 2
*** ./src/client.c	Thu Jun 29 14:01:50 2000
--- ./src/client.c	Thu Jun 29 14:02:50 2000
d2997 2
a2998 2
*** ./src/commit.c	Thu Jun 22 11:25:33 2000
--- ./src/commit.c	Thu Jun 29 14:02:50 2000
d3052 2
a3053 2
*** ./src/cvs.h	Wed Jun 28 09:04:18 2000
--- ./src/cvs.h	Thu Jun 29 14:02:50 2000
d3178 2
a3179 2
*** ./src/diff.c	Wed Apr 14 19:12:26 1999
--- ./src/diff.c	Thu Jun 29 14:02:50 2000
d3198 2
a3199 2
*** ./src/edit.c	Tue Jun 13 16:50:10 2000
--- ./src/edit.c	Thu Jun 29 14:02:50 2000
d3299 2
a3300 2
*** ./src/error.c	Wed Jun 28 09:04:18 2000
--- ./src/error.c	Thu Jun 29 14:03:24 2000
d3314 2
a3315 2
*** ./src/import.c	Thu Jun 22 11:25:33 2000
--- ./src/import.c	Thu Jun 29 14:02:50 2000
d3329 2
a3330 2
*** ./src/local_auth.c	Wed Dec 31 18:00:00 1969
--- ./src/local_auth.c	Thu Jun 29 14:11:16 2000
d3333 1
a3333 1
--- 1,441 ----
d3542 2
a3543 1
+    if ((! strncmp (dir, CVSroot_directory, rootlen)) && (dir[rootlen] == '/'))
d3551 1
a3551 1
+         * either CVSroot_directory or repository/plus/subdir has a
d3569 3
a3571 1
+        if (((strncmp (dir, root, rootlen)) == 0) && (dir[rootlen] == '/')) {
d3779 2
a3780 2
*** ./src/lock.c	Wed Dec 15 11:53:21 1999
--- ./src/lock.c	Thu Jun 29 14:02:50 2000
d3800 2
a3801 2
*** ./src/log.c	Thu Jun 22 11:25:33 2000
--- ./src/log.c	Thu Jun 29 14:02:50 2000
d3820 2
a3821 2
*** ./src/login.c	Mon Nov 29 23:11:12 1999
--- ./src/login.c	Thu Jun 29 14:02:50 2000
d3840 2
a3841 2
*** ./src/main.c	Wed Jun 21 12:06:27 2000
--- ./src/main.c	Thu Jun 29 14:02:50 2000
d3924 2
a3925 2
*** ./src/mkmodules.c	Thu Mar 23 16:52:25 2000
--- ./src/mkmodules.c	Thu Jun 29 14:02:50 2000
d3963 2
a3964 2
*** ./src/mysqlsubr.c	Wed Dec 31 18:00:00 1969
--- ./src/mysqlsubr.c	Thu Jun 29 14:02:50 2000
d4046 2
a4047 2
*** ./src/parseinfo.c	Mon Mar 13 13:15:31 2000
--- ./src/parseinfo.c	Thu Jun 29 14:02:50 2000
d4092 2
a4093 2
*** ./src/patch.c	Thu Jun 15 12:33:32 2000
--- ./src/patch.c	Thu Jun 29 14:02:50 2000
d4127 2
a4128 2
*** ./src/rcs.c	Wed Jun 28 09:04:19 2000
--- ./src/rcs.c	Thu Jun 29 14:02:50 2000
d4147 2
a4148 2
*** ./src/recurse.c	Thu Jun 22 11:25:33 2000
--- ./src/recurse.c	Thu Jun 29 14:02:50 2000
d4289 2
a4290 2
*** ./src/remove.c	Thu Jun 22 11:25:33 2000
--- ./src/remove.c	Thu Jun 29 14:02:50 2000
d4327 2
a4328 2
*** ./src/rtag.c	Thu Jun 15 12:33:32 2000
--- ./src/rtag.c	Thu Jun 29 14:02:50 2000
d4363 362
d4726 2
a4727 2
*** ./src/scramble.c	Fri Jun 27 15:16:08 1997
--- ./src/scramble.c	Thu Jun 29 14:02:50 2000
d4803 2
a4804 2
*** ./src/server.c	Wed Jun 28 09:04:19 2000
--- ./src/server.c	Thu Jun 29 14:02:50 2000
d5150 2
a5151 2
*** ./src/status.c	Tue Jun  1 16:36:33 1999
--- ./src/status.c	Thu Jun 29 14:02:50 2000
d5170 2
a5171 2
*** ./src/tag.c	Thu Jun 15 12:33:32 2000
--- ./src/tag.c	Thu Jun 29 14:02:50 2000
d5224 2
a5225 2
*** ./src/update.c	Wed Jun 28 09:04:19 2000
--- ./src/update.c	Thu Jun 29 14:02:50 2000
d5297 2
a5298 2
*** ./src/watch.c	Tue Jun 13 16:50:11 2000
--- ./src/watch.c	Thu Jun 29 14:02:50 2000
@


1.17
log
@Adjust for Larry Jone's recent plugging of memory leaks in client.c,
server.c, root.c, and update.c

Get rid of all references to tigris in configure.in, regenerate
configure.
@
text
@d3 1
a3 1
--- ./config.h.in	Fri Jun 23 12:54:26 2000
d18 1
a18 1
--- ./configure	Fri Jun 23 12:59:38 2000
d2685 1
a2685 1
--- ./configure.in	Fri Jun 23 12:59:33 2000
d2745 1
a2745 1
--- ./doc/cvs.texinfo	Fri Jun 23 12:54:26 2000
d2846 1
a2846 1
--- ./src/Makefile.in	Fri Jun 23 12:54:26 2000
d2884 2
a2885 2
*** ./src/add.c	Tue Jun 13 16:50:10 2000
--- ./src/add.c	Fri Jun 23 12:54:26 2000
d2900 1
a2900 1
--- ./src/admin.c	Fri Jun 23 12:54:26 2000
d2927 2
a2928 2
*** ./src/checkout.c	Thu Jun 15 12:33:32 2000
--- ./src/checkout.c	Fri Jun 23 12:54:26 2000
d2945 2
a2946 2
*** ./src/client.c	Fri Jun 23 12:53:55 2000
--- ./src/client.c	Fri Jun 23 12:55:12 2000
d2948 1
a2948 1
*** 3822,3828 ****
d2956 1
a2956 1
--- 3822,3828 ----
d2965 1
a2965 1
*** 5510,5516 ****
d2973 1
a2973 1
--- 5510,5517 ----
d2984 1
a2984 1
--- ./src/commit.c	Fri Jun 23 12:54:26 2000
d3038 2
a3039 2
*** ./src/cvs.h	Thu Jun 15 12:33:32 2000
--- ./src/cvs.h	Fri Jun 23 12:54:26 2000
d3165 1
a3165 1
--- ./src/diff.c	Fri Jun 23 12:54:26 2000
d3185 1
a3185 1
--- ./src/edit.c	Fri Jun 23 12:54:26 2000
d3285 2
a3286 2
*** ./src/error.c	Thu Jun 15 12:33:32 2000
--- ./src/error.c	Fri Jun 23 12:54:26 2000
d3288 2
a3289 3
*** 65,70 ****
--- 65,73 ----
  error_exit PROTO ((void))
d3291 2
a3292 1
      Lock_Cleanup();
d3301 1
a3301 1
--- ./src/import.c	Fri Jun 23 12:54:26 2000
d3316 1
a3316 1
--- ./src/local_auth.c	Fri Jun 23 12:54:26 2000
d3319 1
a3319 1
--- 1,405 ----
d3514 1
d3528 37
a3564 2
+    if ((! strncmp (dir, CVSroot_directory, rootlen))
+        && (dir[rootlen] == '/'))
d3763 1
a3763 1
--- ./src/lock.c	Fri Jun 23 12:54:26 2000
d3784 1
a3784 1
--- ./src/log.c	Fri Jun 23 12:54:26 2000
d3804 1
a3804 1
--- ./src/login.c	Fri Jun 23 12:54:26 2000
d3824 1
a3824 1
--- ./src/main.c	Fri Jun 23 12:54:26 2000
d3908 1
a3908 1
--- ./src/mkmodules.c	Fri Jun 23 12:54:26 2000
d3947 1
a3947 1
--- ./src/mysqlsubr.c	Fri Jun 23 12:54:26 2000
d4030 1
a4030 1
--- ./src/parseinfo.c	Fri Jun 23 12:54:26 2000
d4076 1
a4076 1
--- ./src/patch.c	Fri Jun 23 12:54:26 2000
d4110 2
a4111 2
*** ./src/rcs.c	Fri Jun 16 14:42:55 2000
--- ./src/rcs.c	Fri Jun 23 12:54:26 2000
d4113 1
a4113 1
*** 8493,8499 ****
d4121 1
a4121 1
--- 8493,8499 ----
d4131 1
a4131 1
--- ./src/recurse.c	Fri Jun 23 12:54:26 2000
d4273 1
a4273 1
--- ./src/remove.c	Fri Jun 23 12:54:26 2000
d4311 1
a4311 1
--- ./src/rtag.c	Fri Jun 23 12:54:26 2000
d4348 1
a4348 1
--- ./src/scramble.c	Fri Jun 23 12:54:26 2000
d4424 2
a4425 2
*** ./src/server.c	Fri Jun 23 12:53:55 2000
--- ./src/server.c	Fri Jun 23 12:56:05 2000
d4439 2
a4440 2
*** 5244,5251 ****
  	CVS_Username = xstrdup (username);
d4448 2
a4449 2
--- 5247,5254 ----
  	CVS_Username = xstrdup (username);
d4458 2
a4459 2
*** 5256,5261 ****
--- 5259,5268 ----
d4471 2
a4472 2
*** 5419,5424 ****
--- 5426,5588 ----
d4637 2
a4638 2
*** 5432,5437 ****
--- 5596,5607 ----
d4652 2
a4653 2
*** 5692,5697 ****
--- 5862,5874 ----
d4668 1
a4668 1
*** 5719,5726 ****
d4677 1
a4677 1
--- 5896,5906 ----
d4690 1
a4690 1
*** 5730,5736 ****
d4698 1
a4698 1
--- 5910,5917 ----
d4708 1
a4708 1
*** 5818,5824 ****
d4716 1
a4716 1
--- 5999,6006 ----
d4726 1
a4726 1
*** 5910,5919 ****
d4737 1
a4737 1
--- 6092,6105 ----
d4753 1
a4753 1
*** 5930,5936 ****
d4761 1
a4761 1
--- 6116,6123 ----
d4772 1
a4772 1
--- ./src/status.c	Fri Jun 23 12:54:26 2000
d4792 1
a4792 1
--- ./src/tag.c	Fri Jun 23 12:54:26 2000
d4845 2
a4846 2
*** ./src/update.c	Fri Jun 23 12:53:55 2000
--- ./src/update.c	Fri Jun 23 12:54:26 2000
d4882 1
a4882 1
*** 1366,1372 ****
d4890 1
a4890 1
--- 1366,1373 ----
d4900 1
a4900 1
*** 1762,1768 ****
d4908 1
a4908 1
--- 1763,1770 ----
d4919 1
a4919 1
--- ./src/watch.c	Fri Jun 23 12:54:26 2000
@


1.16
log
@Massage to compensate for latest CVS tree changes (there were
conflicts in `configure', so regenerated from `configure.in').
@
text
@d3 1
a3 1
--- ./config.h.in	Thu Jun 22 11:27:25 2000
d18 1
a18 1
--- ./configure	Thu Jun 22 11:27:41 2000
d21 1
a21 1
--- 23,34 ----
a28 2
+ ac_help="$ac_help
+   --enable-tigris        enable Tigris support"
d41 1
a41 1
--- 545,551 ----
d45 1
a45 1
! echo "configure:549: checking for $ac_word" >&5
d58 1
a58 1
--- 589,595 ----
d62 1
a62 1
! echo "configure:593: checking for $ac_word" >&5
d75 1
a75 1
--- 621,627 ----
d79 1
a79 1
! echo "configure:625: checking for $ac_word" >&5
d92 1
a92 1
--- 651,657 ----
d96 1
a96 1
! echo "configure:655: checking for $ac_word" >&5
d109 1
a109 1
--- 702,708 ----
d113 1
a113 1
! echo "configure:706: checking for $ac_word" >&5
d126 1
a126 1
--- 734,740 ----
d130 1
a130 1
! echo "configure:738: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
d148 1
a148 1
--- 745,756 ----
d152 1
a152 1
! #line 749 "configure"
d157 1
a157 1
! if { (eval echo configure:754: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d175 1
a175 1
--- 776,787 ----
d179 1
a179 1
! echo "configure:780: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
d184 1
a184 1
! echo "configure:785: checking whether we are using GNU C" >&5
d197 1
a197 1
--- 790,796 ----
d201 1
a201 1
! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:794: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
d214 1
a214 1
--- 809,815 ----
d218 1
a218 1
! echo "configure:813: checking whether ${CC-cc} accepts -g" >&5
d231 1
a231 1
--- 871,877 ----
d235 1
a235 1
! echo "configure:875: checking for a BSD compatible install" >&5
d248 1
a248 1
--- 924,930 ----
d252 1
a252 1
! echo "configure:928: checking whether ${MAKE-make} sets \${MAKE}" >&5
d265 1
a265 1
--- 953,959 ----
d269 1
a269 1
! echo "configure:957: checking for $ac_word" >&5
d282 1
a282 1
--- 985,991 ----
d286 1
a286 1
! echo "configure:989: checking for $ac_word" >&5
d299 1
a299 1
--- 1019,1025 ----
d303 1
a303 1
! echo "configure:1023: checking for $ac_word" >&5
d316 1
a316 1
--- 1055,1061 ----
d320 1
a320 1
! echo "configure:1059: checking for $ac_word" >&5
d333 1
a333 1
--- 1092,1098 ----
d337 1
a337 1
! echo "configure:1096: checking $ac_msg" >&5
d350 1
a350 1
--- 1119,1125 ----
d354 1
a354 1
! echo "configure:1123: checking how to run the C preprocessor" >&5
d373 1
a373 1
--- 1134,1146 ----
d377 1
a377 1
! #line 1138 "configure"
d383 1
a383 1
! { (eval echo configure:1144: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
d402 1
a402 1
--- 1151,1163 ----
d406 1
a406 1
! #line 1155 "configure"
d412 1
a412 1
! { (eval echo configure:1161: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
d431 1
a431 1
--- 1168,1180 ----
d435 1
a435 1
! #line 1172 "configure"
d441 1
a441 1
! { (eval echo configure:1178: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
d456 1
a456 1
--- 1199,1207 ----
d460 1
a460 1
! echo "configure:1203: checking for AIX" >&5
d462 1
a462 1
! #line 1205 "configure"
d485 1
a485 1
--- 1224,1240 ----
d489 1
a489 1
! echo "configure:1228: checking for minix/config.h" >&5
d494 1
a494 1
! #line 1233 "configure"
d499 1
a499 1
! { (eval echo configure:1238: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
d512 1
a512 1
--- 1272,1278 ----
d516 1
a516 1
! echo "configure:1276: checking for POSIXized ISC" >&5
d534 1
a534 1
--- 1302,1313 ----
d538 1
a538 1
! echo "configure:1306: checking for $ac_hdr that defines DIR" >&5
d543 1
a543 1
! #line 1311 "configure"
d556 1
a556 1
--- 1315,1321 ----
d560 1
a560 1
! if { (eval echo configure:1319: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
d573 1
a573 1
--- 1340,1346 ----
d577 1
a577 1
! echo "configure:1344: checking for opendir in -ldir" >&5
d590 1
a590 1
--- 1348,1354 ----
d594 1
a594 1
! #line 1352 "configure"
d607 1
a607 1
--- 1359,1365 ----
d611 1
a611 1
! if { (eval echo configure:1363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d624 1
a624 1
--- 1381,1387 ----
d628 1
a628 1
! echo "configure:1385: checking for opendir in -lx" >&5
d641 1
a641 1
--- 1389,1395 ----
d645 1
a645 1
! #line 1393 "configure"
d658 1
a658 1
--- 1400,1406 ----
d662 1
a662 1
! if { (eval echo configure:1404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d680 1
a680 1
--- 1423,1434 ----
d684 1
a684 1
! echo "configure:1427: checking for ANSI C header files" >&5
d689 1
a689 1
! #line 1432 "configure"
d702 1
a702 1
--- 1436,1442 ----
d706 1
a706 1
! { (eval echo configure:1440: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
d719 1
a719 1
--- 1453,1459 ----
d723 1
a723 1
! #line 1457 "configure"
d736 1
a736 1
--- 1471,1477 ----
d740 1
a740 1
! #line 1475 "configure"
d753 1
a753 1
--- 1492,1498 ----
d757 1
a757 1
! #line 1496 "configure"
d770 1
a770 1
--- 1503,1509 ----
d774 1
a774 1
! if { (eval echo configure:1507: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d792 1
a792 1
--- 1527,1538 ----
d796 1
a796 1
! echo "configure:1531: checking for sys/wait.h that is POSIX.1 compatible" >&5
d801 1
a801 1
! #line 1536 "configure"
d814 1
a814 1
--- 1548,1554 ----
d818 1
a818 1
! if { (eval echo configure:1552: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
d841 1
a841 1
--- 1575,1591 ----
d845 1
a845 1
! echo "configure:1579: checking for $ac_hdr" >&5
d850 1
a850 1
! #line 1584 "configure"
d855 1
a855 1
! { (eval echo configure:1589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
d873 1
a873 1
--- 1612,1623 ----
d877 1
a877 1
! echo "configure:1616: checking whether stat file-mode macros are broken" >&5
d882 1
a882 1
! #line 1621 "configure"
d900 1
a900 1
--- 1668,1679 ----
d904 1
a904 1
! echo "configure:1672: checking whether time.h and sys/time.h may both be included" >&5
d909 1
a909 1
! #line 1677 "configure"
d922 1
a922 1
--- 1682,1688 ----
d926 1
a926 1
! if { (eval echo configure:1686: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
d950 1
a950 1
--- 1704,1721 ----
d954 1
a954 1
! echo "configure:1708: checking for working const" >&5
d959 1
a959 1
! #line 1713 "configure"
d978 1
a978 1
--- 1758,1764 ----
d982 1
a982 1
! if { (eval echo configure:1762: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
d1000 1
a1000 1
--- 1779,1790 ----
d1004 1
a1004 1
! echo "configure:1783: checking for uid_t in sys/types.h" >&5
d1009 1
a1009 1
! #line 1788 "configure"
d1027 1
a1027 1
--- 1813,1824 ----
d1031 1
a1031 1
! echo "configure:1817: checking for mode_t" >&5
d1036 1
a1036 1
! #line 1822 "configure"
d1054 1
a1054 1
--- 1846,1857 ----
d1058 1
a1058 1
! echo "configure:1850: checking for pid_t" >&5
d1063 1
a1063 1
! #line 1855 "configure"
d1081 1
a1081 1
--- 1879,1890 ----
d1085 1
a1085 1
! echo "configure:1883: checking for size_t" >&5
d1090 1
a1090 1
! #line 1888 "configure"
d1108 1
a1108 1
--- 1912,1923 ----
d1112 1
a1112 1
! echo "configure:1916: checking return type of signal handlers" >&5
d1117 1
a1117 1
! #line 1921 "configure"
d1130 1
a1130 1
--- 1934,1940 ----
d1134 1
a1134 1
! if { (eval echo configure:1938: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
d1152 1
a1152 1
--- 1954,1965 ----
d1156 1
a1156 1
! echo "configure:1958: checking for st_blksize in struct stat" >&5
d1161 1
a1161 1
! #line 1963 "configure"
d1174 1
a1174 1
--- 1967,1973 ----
d1178 1
a1178 1
! if { (eval echo configure:1971: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
d1196 1
a1196 1
--- 1990,2001 ----
d1200 1
a1200 1
! echo "configure:1994: checking for $ac_func" >&5
d1205 1
a1205 1
! #line 1999 "configure"
d1218 1
a1218 1
--- 2018,2024 ----
d1222 1
a1222 1
! if { (eval echo configure:2022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1240 1
a1240 1
--- 2047,2058 ----
d1244 1
a1244 1
! echo "configure:2051: checking for $ac_func" >&5
d1249 1
a1249 1
! #line 2056 "configure"
d1262 1
a1262 1
--- 2075,2081 ----
d1266 1
a1266 1
! if { (eval echo configure:2079: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1289 1
a1289 1
--- 2119,2135 ----
d1293 1
a1293 1
! echo "configure:2123: checking for vfork.h" >&5
d1298 1
a1298 1
! #line 2128 "configure"
d1303 1
a1303 1
! { (eval echo configure:2133: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
d1327 1
a1327 1
--- 2154,2171 ----
d1331 1
a1331 1
! echo "configure:2158: checking for working vfork" >&5
d1337 1
a1337 1
! echo "configure:2164: checking for vfork" >&5
d1342 1
a1342 1
! #line 2169 "configure"
d1355 1
a1355 1
--- 2188,2194 ----
d1359 1
a1359 1
! if { (eval echo configure:2192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1372 1
a1372 1
--- 2210,2216 ----
d1376 1
a1376 1
! #line 2214 "configure"
d1389 1
a1389 1
--- 2305,2311 ----
d1393 1
a1393 1
! if { (eval echo configure:2309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1406 1
a1406 1
--- 2328,2334 ----
d1410 1
a1410 1
! echo "configure:2332: checking whether closedir returns void" >&5
d1429 1
a1429 1
--- 2336,2348 ----
d1433 1
a1433 1
! #line 2340 "configure"
d1439 1
a1439 1
! if { (eval echo configure:2346: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1459 1
a1459 1
--- 2367,2380 ----
d1463 1
a1463 1
! echo "configure:2371: checking for library containing getspnam" >&5
d1470 1
a1470 1
! #line 2378 "configure"
d1483 1
a1483 1
--- 2385,2391 ----
d1487 1
a1487 1
! if { (eval echo configure:2389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1500 1
a1500 1
--- 2396,2402 ----
d1504 1
a1504 1
! #line 2400 "configure"
d1517 1
a1517 1
--- 2407,2413 ----
d1521 1
a1521 1
! if { (eval echo configure:2411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1534 1
a1534 1
--- 2432,2438 ----
d1538 1
a1538 1
! echo "configure:2436: checking whether utime accepts a null argument" >&5
d1551 1
a1551 1
--- 2442,2448 ----
d1555 1
a1555 1
! #line 2446 "configure"
d1568 1
a1568 1
--- 2453,2459 ----
d1572 1
a1572 1
! if { (eval echo configure:2457: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1585 1
a1585 1
--- 2477,2483 ----
d1589 1
a1589 1
! echo "configure:2481: checking for long file names" >&5
d1602 1
a1602 1
--- 2522,2528 ----
d1606 1
a1606 1
! echo "configure:2526: checking for working fnmatch" >&5
d1623 1
a1623 1
--- 2533,2543 ----
d1627 1
a1627 1
! #line 2537 "configure"
d1631 1
a1631 1
! if { (eval echo configure:2541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1644 1
a1644 1
--- 2565,2571 ----
d1648 1
a1648 1
! echo "configure:2569: checking for main in -lnsl" >&5
d1668 1
a1668 1
--- 2573,2586 ----
d1672 1
a1672 1
! #line 2577 "configure"
d1679 1
a1679 1
! if { (eval echo configure:2584: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1699 1
a1699 1
--- 2597,2610 ----
d1703 1
a1703 1
! echo "configure:2601: checking for library containing connect" >&5
d1710 1
a1710 1
! #line 2608 "configure"
d1723 1
a1723 1
--- 2615,2621 ----
d1727 1
a1727 1
! if { (eval echo configure:2619: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1740 1
a1740 1
--- 2626,2632 ----
d1744 1
a1744 1
! #line 2630 "configure"
d1757 1
a1757 1
--- 2637,2643 ----
d1761 1
a1761 1
! if { (eval echo configure:2641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1781 1
a1781 1
--- 2664,2677 ----
d1785 1
a1785 1
! echo "configure:2668: checking for library containing connect" >&5
d1792 1
a1792 1
! #line 2675 "configure"
d1805 1
a1805 1
--- 2682,2688 ----
d1809 1
a1809 1
! if { (eval echo configure:2686: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1822 1
a1822 1
--- 2693,2699 ----
d1826 1
a1826 1
! #line 2697 "configure"
d1839 1
a1839 1
--- 2704,2710 ----
d1843 1
a1843 1
! if { (eval echo configure:2708: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1863 1
a1863 1
--- 2731,2744 ----
d1867 1
a1867 1
! echo "configure:2735: checking for library containing gethostbyname" >&5
d1874 1
a1874 1
! #line 2742 "configure"
d1887 1
a1887 1
--- 2749,2755 ----
d1891 1
a1891 1
! if { (eval echo configure:2753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1904 1
a1904 1
--- 2760,2766 ----
d1908 1
a1908 1
! #line 2764 "configure"
d1921 1
a1921 1
--- 2771,2777 ----
d1925 1
a1925 1
! if { (eval echo configure:2775: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1950 1
a1950 1
--- 2804,2822 ----
d1954 1
a1954 1
! echo "configure:2808: checking for krb.h" >&5
d1959 1
a1959 1
! #line 2813 "configure"
d1966 1
a1966 1
! if { (eval echo configure:2820: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1986 1
a1986 1
--- 2825,2838 ----
d1990 1
a1990 1
! #line 2829 "configure"
d1997 1
a1997 1
! if { (eval echo configure:2836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2017 1
a2017 1
--- 2845,2858 ----
d2021 1
a2021 1
! #line 2849 "configure"
d2028 1
a2028 1
! if { (eval echo configure:2856: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2048 1
a2048 1
--- 2863,2876 ----
d2052 1
a2052 1
! #line 2867 "configure"
d2059 1
a2059 1
! if { (eval echo configure:2874: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2079 1
a2079 1
--- 2881,2894 ----
d2083 1
a2083 1
! #line 2885 "configure"
d2090 1
a2090 1
! if { (eval echo configure:2892: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2103 1
a2103 1
--- 2911,2917 ----
d2107 1
a2107 1
! echo "configure:2915: checking for printf in -lkrb" >&5
d2120 1
a2120 1
--- 2919,2925 ----
d2124 1
a2124 1
! #line 2923 "configure"
d2137 1
a2137 1
--- 2930,2936 ----
d2141 1
a2141 1
! if { (eval echo configure:2934: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2154 1
a2154 1
--- 2952,2958 ----
d2158 1
a2158 1
! echo "configure:2956: checking for open in -lkrb" >&5
d2171 1
a2171 1
--- 2960,2966 ----
d2175 1
a2175 1
! #line 2964 "configure"
d2188 1
a2188 1
--- 2971,2977 ----
d2192 1
a2192 1
! if { (eval echo configure:2975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2205 1
a2205 1
--- 2996,3002 ----
d2209 1
a2209 1
! echo "configure:3000: checking for printf in -lkrb" >&5
d2222 1
a2222 1
--- 3004,3010 ----
d2226 1
a2226 1
! #line 3008 "configure"
d2239 1
a2239 1
--- 3015,3021 ----
d2243 1
a2243 1
! if { (eval echo configure:3019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2256 1
a2256 1
--- 3049,3055 ----
d2260 1
a2260 1
! echo "configure:3053: checking for printf in -ldes" >&5
d2273 1
a2273 1
--- 3057,3063 ----
d2277 1
a2277 1
! #line 3061 "configure"
d2290 1
a2290 1
--- 3068,3074 ----
d2294 1
a2294 1
! if { (eval echo configure:3072: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2312 1
a2312 1
--- 3097,3108 ----
d2316 1
a2316 1
! echo "configure:3101: checking for $ac_func" >&5
d2321 1
a2321 1
! #line 3106 "configure"
d2334 1
a2334 1
--- 3125,3131 ----
d2338 1
a2338 1
! if { (eval echo configure:3129: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2361 1
a2361 1
--- 3166,3182 ----
d2365 1
a2365 1
! echo "configure:3170: checking for $ac_hdr" >&5
d2370 1
a2370 1
! #line 3175 "configure"
d2375 1
a2375 1
! { (eval echo configure:3180: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
d2388 1
a2388 1
--- 3222,3228 ----
d2392 1
a2392 1
! #line 3226 "configure"
d2405 1
a2405 1
--- 3238,3244 ----
d2409 1
a2409 1
! #line 3242 "configure"
d2422 1
a2422 1
--- 3257,3263 ----
d2426 1
a2426 1
! echo "configure:3261: checking for compile in -lgen" >&5
d2439 1
a2439 1
--- 3265,3271 ----
d2443 1
a2443 1
! #line 3269 "configure"
d2456 1
a2456 1
--- 3276,3282 ----
d2460 1
a2460 1
! if { (eval echo configure:3280: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2478 1
a2478 1
--- 3325,3336 ----
d2482 1
a2482 1
! echo "configure:3329: checking for gethostname" >&5
d2487 1
a2487 1
! #line 3334 "configure"
d2500 1
a2500 1
--- 3353,3359 ----
d2504 1
a2504 1
! if { (eval echo configure:3357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2524 1
a2524 1
--- 3418,3431 ----
d2528 1
a2528 1
! echo "configure:3422: checking for library containing crypt" >&5
d2535 1
a2535 1
! #line 3429 "configure"
d2548 1
a2548 1
--- 3436,3442 ----
d2552 1
a2552 1
! if { (eval echo configure:3440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2565 1
a2565 1
--- 3447,3453 ----
d2569 1
a2569 1
! #line 3451 "configure"
d2582 1
a2582 1
--- 3458,3464 ----
d2586 1
a2586 1
! if { (eval echo configure:3462: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2612 1
a2612 1
--- 3487,3576 ----
d2634 1
a2634 1
+ echo "configure:3509: checking for MySQL directory" >&5
a2659 20
+ 
+ # Check whether --enable-tigris or --disable-tigris was given.
+ if test "${enable_tigris+set}" = set; then
+   enableval="$enable_tigris"
+   case "${enableval}" in
+     yes) tigris=true ;;
+     no) tigris=false ;;
+     *) { echo "configure: error: bad value ${enableval} for Tigris option" 1>&2; exit 1; } ;;
+    esac
+ else
+   tigris=false
+ fi
+ 
+ if test "$tigris" = "true"; then
+   cat >> confdefs.h <<\EOF
+ #define TIGRIS 1
+ EOF
+ 
+ fi
+ 
d2667 1
a2667 1
! echo "configure:3562: checking for cygwin32" >&5
d2672 1
a2672 1
! #line 3567 "configure"
d2679 1
a2679 1
! if { (eval echo configure:3574: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
d2685 1
a2685 1
--- ./configure.in	Thu Jun 22 11:27:25 2000
d2688 1
a2688 1
--- 270,341 ----
a2728 18
+ dnl
+ dnl Tigris support. Know about modules and projects and things. Requires
+ dnl MySQL support, although configure doesn't know that yet.
+ dnl
+ dnl Use --enable-tigris
+ 
+ AC_ARG_ENABLE(tigris,
+   [  --enable-tigris        enable Tigris support],
+   [case "${enableval}" in
+     yes) tigris=true ;;
+     no) tigris=false ;;
+     *) AC_MSG_ERROR(bad value ${enableval} for Tigris option) ;;
+    esac],
+   [tigris=false])
+ if test "$tigris" = "true"; then
+   AC_DEFINE(TIGRIS)
+ fi
+ 
d2745 1
a2745 1
--- ./doc/cvs.texinfo	Thu Jun 22 11:27:25 2000
d2846 1
a2846 1
--- ./src/Makefile.in	Thu Jun 22 11:27:25 2000
d2885 1
a2885 1
--- ./src/add.c	Thu Jun 22 11:27:25 2000
d2900 1
a2900 1
--- ./src/admin.c	Thu Jun 22 11:27:25 2000
d2928 1
a2928 1
--- ./src/checkout.c	Thu Jun 22 11:27:25 2000
d2945 2
a2946 2
*** ./src/client.c	Thu Jun 22 11:25:33 2000
--- ./src/client.c	Thu Jun 22 11:27:25 2000
d2965 1
a2965 1
*** 5487,5493 ****
d2968 1
a2968 1
  	 send_dirent_proc, (DIRLEAVEPROC)NULL, (void *) &args,
d2973 1
a2973 1
--- 5487,5494 ----
d2976 1
a2976 1
  	 send_dirent_proc, (DIRLEAVEPROC)NULL, (void *) &args,
d2984 1
a2984 1
--- ./src/commit.c	Thu Jun 22 11:27:25 2000
d3039 1
a3039 1
--- ./src/cvs.h	Thu Jun 22 11:27:25 2000
d3165 1
a3165 1
--- ./src/diff.c	Thu Jun 22 11:27:25 2000
d3185 1
a3185 1
--- ./src/edit.c	Thu Jun 22 11:27:25 2000
d3286 1
a3286 1
--- ./src/error.c	Thu Jun 22 11:27:25 2000
d3301 1
a3301 1
--- ./src/import.c	Thu Jun 22 11:27:25 2000
d3316 1
a3316 1
--- ./src/local_auth.c	Thu Jun 22 11:27:25 2000
d3727 1
a3727 1
--- ./src/lock.c	Thu Jun 22 11:27:25 2000
d3748 1
a3748 1
--- ./src/log.c	Thu Jun 22 11:27:25 2000
d3768 1
a3768 1
--- ./src/login.c	Thu Jun 22 11:27:25 2000
d3788 1
a3788 1
--- ./src/main.c	Thu Jun 22 11:27:25 2000
d3872 1
a3872 1
--- ./src/mkmodules.c	Thu Jun 22 11:27:25 2000
d3911 1
a3911 1
--- ./src/mysqlsubr.c	Thu Jun 22 11:27:25 2000
d3994 1
a3994 1
--- ./src/parseinfo.c	Thu Jun 22 11:27:25 2000
d4040 1
a4040 1
--- ./src/patch.c	Thu Jun 22 11:27:25 2000
d4075 1
a4075 1
--- ./src/rcs.c	Thu Jun 22 11:27:25 2000
d4095 1
a4095 1
--- ./src/recurse.c	Thu Jun 22 11:27:25 2000
d4237 1
a4237 1
--- ./src/remove.c	Thu Jun 22 11:27:25 2000
d4275 1
a4275 1
--- ./src/rtag.c	Thu Jun 22 11:27:25 2000
d4312 1
a4312 1
--- ./src/scramble.c	Thu Jun 22 11:27:25 2000
d4388 2
a4389 2
*** ./src/server.c	Thu Jun 22 11:25:33 2000
--- ./src/server.c	Thu Jun 22 11:27:25 2000
d4391 2
a4392 2
*** 796,801 ****
--- 796,804 ----
d4403 1
a4403 1
*** 5236,5243 ****
d4412 1
a4412 1
--- 5239,5246 ----
d4422 2
a4423 2
*** 5248,5253 ****
--- 5251,5260 ----
d4435 2
a4436 2
*** 5411,5416 ****
--- 5418,5580 ----
d4601 2
a4602 2
*** 5424,5429 ****
--- 5588,5599 ----
d4616 2
a4617 2
*** 5684,5689 ****
--- 5854,5866 ----
d4632 1
a4632 1
*** 5710,5717 ****
d4641 1
a4641 1
--- 5887,5897 ----
d4654 1
a4654 1
*** 5721,5727 ****
d4659 1
d4662 1
a4662 2
      free (username);
--- 5901,5908 ----
d4668 1
a4670 1
      free (username);
d4672 1
a4672 1
*** 5808,5814 ****
d4680 1
a4680 1
--- 5989,5996 ----
d4690 1
a4690 1
*** 5900,5909 ****
d4701 1
a4701 1
--- 6082,6095 ----
d4717 1
a4717 1
*** 5920,5926 ****
d4725 1
a4725 1
--- 6106,6113 ----
d4736 1
a4736 1
--- ./src/status.c	Thu Jun 22 11:27:25 2000
d4756 1
a4756 1
--- ./src/tag.c	Thu Jun 22 11:27:25 2000
d4809 2
a4810 2
*** ./src/update.c	Fri Jun 16 14:42:55 2000
--- ./src/update.c	Thu Jun 22 11:27:25 2000
d4812 1
a4812 1
*** 488,494 ****
d4820 1
a4820 1
--- 488,494 ----
d4829 1
a4829 1
*** 504,510 ****
d4837 1
a4837 1
--- 504,510 ----
d4846 1
a4846 1
*** 1369,1375 ****
d4854 1
a4854 1
--- 1369,1376 ----
d4864 1
a4864 1
*** 1765,1771 ****
d4872 1
a4872 1
--- 1766,1773 ----
d4883 1
a4883 1
--- ./src/watch.c	Thu Jun 22 11:27:25 2000
@


1.15
log
@Oops, don't include any Emacs backup files in the patch (sheesh).
@
text
@d2 2
a3 2
*** ./config.h.in	Tue Jun  2 10:29:50 1998
--- ./config.h.in	Fri Jun 16 15:10:33 2000
d17 2
a18 2
*** ./configure	Thu Feb 17 10:41:22 2000
--- ./configure	Fri Jun 16 15:10:33 2000
d1273 1
a1273 1
*** 2105,2121 ****
d1277 1
a1277 1
! echo "configure:2109: checking for vfork.h" >&5
d1282 1
a1282 1
! #line 2114 "configure"
d1287 1
a1287 1
! { (eval echo configure:2119: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
d1291 1
a1291 1
--- 2111,2127 ----
d1295 1
a1295 1
! echo "configure:2115: checking for vfork.h" >&5
d1300 1
a1300 1
! #line 2120 "configure"
d1305 1
a1305 1
! { (eval echo configure:2125: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
d1310 1
a1310 1
*** 2140,2157 ****
d1314 1
a1314 1
! echo "configure:2144: checking for working vfork" >&5
d1320 1
a1320 1
! echo "configure:2150: checking for vfork" >&5
d1325 1
a1325 1
! #line 2155 "configure"
d1329 1
a1329 1
--- 2146,2163 ----
d1333 1
a1333 1
! echo "configure:2150: checking for working vfork" >&5
d1339 1
a1339 1
! echo "configure:2156: checking for vfork" >&5
d1344 1
a1344 1
! #line 2161 "configure"
d1349 1
a1349 1
*** 2174,2180 ****
d1353 1
a1353 1
! if { (eval echo configure:2178: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1357 1
a1357 1
--- 2180,2186 ----
d1361 1
a1361 1
! if { (eval echo configure:2184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1366 1
a1366 1
*** 2196,2202 ****
d1370 1
a1370 1
! #line 2200 "configure"
d1374 1
a1374 1
--- 2202,2208 ----
d1378 1
a1378 1
! #line 2206 "configure"
d1383 1
a1383 1
*** 2291,2297 ****
d1387 1
a1387 1
! if { (eval echo configure:2295: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1391 1
a1391 1
--- 2297,2303 ----
d1395 1
a1395 1
! if { (eval echo configure:2301: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1400 1
a1400 1
*** 2314,2320 ****
d1404 1
a1404 1
! echo "configure:2318: checking whether closedir returns void" >&5
d1408 1
a1408 1
--- 2320,2326 ----
d1412 1
a1412 1
! echo "configure:2324: checking whether closedir returns void" >&5
d1417 1
a1417 1
*** 2322,2334 ****
d1421 1
a1421 1
! #line 2326 "configure"
d1427 1
a1427 1
! if { (eval echo configure:2332: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1431 1
a1431 1
--- 2328,2340 ----
d1435 1
a1435 1
! #line 2332 "configure"
d1441 1
a1441 1
! if { (eval echo configure:2338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1446 1
a1446 1
*** 2353,2366 ****
d1450 1
a1450 1
! echo "configure:2357: checking for library containing getspnam" >&5
d1457 1
a1457 1
! #line 2364 "configure"
d1461 1
a1461 1
--- 2359,2372 ----
d1465 1
a1465 1
! echo "configure:2363: checking for library containing getspnam" >&5
d1472 1
a1472 1
! #line 2370 "configure"
d1477 1
a1477 1
*** 2371,2377 ****
d1481 1
a1481 1
! if { (eval echo configure:2375: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1485 1
a1485 1
--- 2377,2383 ----
d1489 1
a1489 1
! if { (eval echo configure:2381: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1494 1
a1494 1
*** 2382,2388 ****
d1498 1
a1498 1
! #line 2386 "configure"
d1502 1
a1502 1
--- 2388,2394 ----
d1506 1
a1506 1
! #line 2392 "configure"
d1511 1
a1511 1
*** 2393,2399 ****
d1515 1
a1515 1
! if { (eval echo configure:2397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1519 1
a1519 1
--- 2399,2405 ----
d1523 1
a1523 1
! if { (eval echo configure:2403: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1528 1
a1528 1
*** 2418,2424 ****
d1532 1
a1532 1
! echo "configure:2422: checking whether utime accepts a null argument" >&5
d1536 1
a1536 1
--- 2424,2430 ----
d1540 1
a1540 1
! echo "configure:2428: checking whether utime accepts a null argument" >&5
d1545 1
a1545 1
*** 2428,2434 ****
d1549 1
a1549 1
! #line 2432 "configure"
d1553 1
a1553 1
--- 2434,2440 ----
d1557 1
a1557 1
! #line 2438 "configure"
d1562 1
a1562 1
*** 2439,2445 ****
d1566 1
a1566 1
! if { (eval echo configure:2443: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1570 1
a1570 1
--- 2445,2451 ----
d1574 1
a1574 1
! if { (eval echo configure:2449: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1579 1
a1579 1
*** 2463,2469 ****
d1583 1
a1583 1
! echo "configure:2467: checking for long file names" >&5
d1587 1
a1587 1
--- 2469,2475 ----
d1591 1
a1591 1
! echo "configure:2473: checking for long file names" >&5
d1596 1
a1596 1
*** 2508,2514 ****
d1600 1
a1600 1
! echo "configure:2512: checking for working fnmatch" >&5
d1604 1
a1604 1
--- 2514,2520 ----
d1608 1
a1608 1
! echo "configure:2518: checking for working fnmatch" >&5
d1613 1
a1613 1
*** 2519,2529 ****
d1617 1
a1617 1
! #line 2523 "configure"
d1621 1
a1621 1
! if { (eval echo configure:2527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1625 1
a1625 1
--- 2525,2535 ----
d1629 1
a1629 1
! #line 2529 "configure"
d1633 1
a1633 1
! if { (eval echo configure:2533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
d1638 1
a1638 1
*** 2551,2557 ****
d1642 1
a1642 1
! echo "configure:2555: checking for main in -lnsl" >&5
d1646 1
a1646 1
--- 2557,2563 ----
d1650 1
a1650 1
! echo "configure:2561: checking for main in -lnsl" >&5
d1655 1
a1655 1
*** 2559,2572 ****
d1659 1
a1659 1
! #line 2563 "configure"
d1666 1
a1666 1
! if { (eval echo configure:2570: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1670 1
a1670 1
--- 2565,2578 ----
d1674 1
a1674 1
! #line 2569 "configure"
d1681 1
a1681 1
! if { (eval echo configure:2576: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1686 1
a1686 1
*** 2583,2596 ****
d1690 1
a1690 1
! echo "configure:2587: checking for library containing connect" >&5
d1697 1
a1697 1
! #line 2594 "configure"
d1701 1
a1701 1
--- 2589,2602 ----
d1705 1
a1705 1
! echo "configure:2593: checking for library containing connect" >&5
d1712 1
a1712 1
! #line 2600 "configure"
d1717 1
a1717 1
*** 2601,2607 ****
d1721 1
a1721 1
! if { (eval echo configure:2605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1725 1
a1725 1
--- 2607,2613 ----
d1729 1
a1729 1
! if { (eval echo configure:2611: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1734 1
a1734 1
*** 2612,2618 ****
d1738 1
a1738 1
! #line 2616 "configure"
d1742 1
a1742 1
--- 2618,2624 ----
d1746 1
a1746 1
! #line 2622 "configure"
d1751 1
a1751 1
*** 2623,2629 ****
d1755 1
a1755 1
! if { (eval echo configure:2627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1759 1
a1759 1
--- 2629,2635 ----
d1763 1
a1763 1
! if { (eval echo configure:2633: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1768 1
a1768 1
*** 2650,2663 ****
d1772 1
a1772 1
! echo "configure:2654: checking for library containing connect" >&5
d1779 1
a1779 1
! #line 2661 "configure"
d1783 1
a1783 1
--- 2656,2669 ----
d1787 1
a1787 1
! echo "configure:2660: checking for library containing connect" >&5
d1794 1
a1794 1
! #line 2667 "configure"
d1799 1
a1799 1
*** 2668,2674 ****
d1803 1
a1803 1
! if { (eval echo configure:2672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1807 1
a1807 1
--- 2674,2680 ----
d1811 1
a1811 1
! if { (eval echo configure:2678: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1816 1
a1816 1
*** 2679,2685 ****
d1820 1
a1820 1
! #line 2683 "configure"
d1824 1
a1824 1
--- 2685,2691 ----
d1828 1
a1828 1
! #line 2689 "configure"
d1833 1
a1833 1
*** 2690,2696 ****
d1837 1
a1837 1
! if { (eval echo configure:2694: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1841 1
a1841 1
--- 2696,2702 ----
d1845 1
a1845 1
! if { (eval echo configure:2700: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1850 1
a1850 1
*** 2717,2730 ****
d1854 1
a1854 1
! echo "configure:2721: checking for library containing gethostbyname" >&5
d1861 1
a1861 1
! #line 2728 "configure"
d1865 1
a1865 1
--- 2723,2736 ----
d1869 1
a1869 1
! echo "configure:2727: checking for library containing gethostbyname" >&5
d1876 1
a1876 1
! #line 2734 "configure"
d1881 1
a1881 1
*** 2735,2741 ****
d1885 1
a1885 1
! if { (eval echo configure:2739: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1889 1
a1889 1
--- 2741,2747 ----
d1893 1
a1893 1
! if { (eval echo configure:2745: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1898 1
a1898 1
*** 2746,2752 ****
d1902 1
a1902 1
! #line 2750 "configure"
d1906 1
a1906 1
--- 2752,2758 ----
d1910 1
a1910 1
! #line 2756 "configure"
d1915 1
a1915 1
*** 2757,2763 ****
d1919 1
a1919 1
! if { (eval echo configure:2761: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1923 1
a1923 1
--- 2763,2769 ----
d1927 1
a1927 1
! if { (eval echo configure:2767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1932 1
a1932 1
*** 2790,2808 ****
d1936 1
a1936 1
! echo "configure:2794: checking for krb.h" >&5
d1941 1
a1941 1
! #line 2799 "configure"
d1948 1
a1948 1
! if { (eval echo configure:2806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1952 1
a1952 1
--- 2796,2814 ----
d1956 1
a1956 1
! echo "configure:2800: checking for krb.h" >&5
d1961 1
a1961 1
! #line 2805 "configure"
d1968 1
a1968 1
! if { (eval echo configure:2812: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1973 1
a1973 1
*** 2811,2824 ****
d1977 1
a1977 1
! #line 2815 "configure"
d1984 1
a1984 1
! if { (eval echo configure:2822: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d1988 1
a1988 1
--- 2817,2830 ----
d1992 1
a1992 1
! #line 2821 "configure"
d1999 1
a1999 1
! if { (eval echo configure:2828: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2004 1
a2004 1
*** 2831,2844 ****
d2008 1
a2008 1
! #line 2835 "configure"
d2015 1
a2015 1
! if { (eval echo configure:2842: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2019 1
a2019 1
--- 2837,2850 ----
d2023 1
a2023 1
! #line 2841 "configure"
d2030 1
a2030 1
! if { (eval echo configure:2848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2035 1
a2035 1
*** 2849,2862 ****
d2039 1
a2039 1
! #line 2853 "configure"
d2046 1
a2046 1
! if { (eval echo configure:2860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2050 1
a2050 1
--- 2855,2868 ----
d2054 1
a2054 1
! #line 2859 "configure"
d2061 1
a2061 1
! if { (eval echo configure:2866: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2066 1
a2066 1
*** 2867,2880 ****
d2070 1
a2070 1
! #line 2871 "configure"
d2077 1
a2077 1
! if { (eval echo configure:2878: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2081 1
a2081 1
--- 2873,2886 ----
d2085 1
a2085 1
! #line 2877 "configure"
d2092 1
a2092 1
! if { (eval echo configure:2884: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2097 1
a2097 1
*** 2897,2903 ****
d2101 1
a2101 1
! echo "configure:2901: checking for printf in -lkrb" >&5
d2105 1
a2105 1
--- 2903,2909 ----
d2109 1
a2109 1
! echo "configure:2907: checking for printf in -lkrb" >&5
d2114 1
a2114 1
*** 2905,2911 ****
d2118 1
a2118 1
! #line 2909 "configure"
d2122 1
a2122 1
--- 2911,2917 ----
d2126 1
a2126 1
! #line 2915 "configure"
d2131 1
a2131 1
*** 2916,2922 ****
d2135 1
a2135 1
! if { (eval echo configure:2920: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2139 1
a2139 1
--- 2922,2928 ----
d2143 1
a2143 1
! if { (eval echo configure:2926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2148 1
a2148 1
*** 2938,2944 ****
d2152 1
a2152 1
! echo "configure:2942: checking for open in -lkrb" >&5
d2156 1
a2156 1
--- 2944,2950 ----
d2160 1
a2160 1
! echo "configure:2948: checking for open in -lkrb" >&5
d2165 1
a2165 1
*** 2946,2952 ****
d2169 1
a2169 1
! #line 2950 "configure"
d2173 1
a2173 1
--- 2952,2958 ----
d2177 1
a2177 1
! #line 2956 "configure"
d2182 1
a2182 1
*** 2957,2963 ****
d2186 1
a2186 1
! if { (eval echo configure:2961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2190 1
a2190 1
--- 2963,2969 ----
d2194 1
a2194 1
! if { (eval echo configure:2967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2199 1
a2199 1
*** 2982,2988 ****
d2203 1
a2203 1
! echo "configure:2986: checking for printf in -lkrb" >&5
d2207 1
a2207 1
--- 2988,2994 ----
d2211 1
a2211 1
! echo "configure:2992: checking for printf in -lkrb" >&5
d2216 1
a2216 1
*** 2990,2996 ****
d2220 1
a2220 1
! #line 2994 "configure"
d2224 1
a2224 1
--- 2996,3002 ----
d2228 1
a2228 1
! #line 3000 "configure"
d2233 1
a2233 1
*** 3001,3007 ****
d2237 1
a2237 1
! if { (eval echo configure:3005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2241 1
a2241 1
--- 3007,3013 ----
d2245 1
a2245 1
! if { (eval echo configure:3011: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2250 1
a2250 1
*** 3035,3041 ****
d2254 1
a2254 1
! echo "configure:3039: checking for printf in -ldes" >&5
d2258 1
a2258 1
--- 3041,3047 ----
d2262 1
a2262 1
! echo "configure:3045: checking for printf in -ldes" >&5
d2267 1
a2267 1
*** 3043,3049 ****
d2271 1
a2271 1
! #line 3047 "configure"
d2275 1
a2275 1
--- 3049,3055 ----
d2279 1
a2279 1
! #line 3053 "configure"
d2284 1
a2284 1
*** 3054,3060 ****
d2288 1
a2288 1
! if { (eval echo configure:3058: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2292 1
a2292 1
--- 3060,3066 ----
d2296 1
a2296 1
! if { (eval echo configure:3064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2301 1
a2301 1
*** 3083,3094 ****
d2305 1
a2305 1
! echo "configure:3087: checking for $ac_func" >&5
d2310 1
a2310 1
! #line 3092 "configure"
d2314 1
a2314 1
--- 3089,3100 ----
d2318 1
a2318 1
! echo "configure:3093: checking for $ac_func" >&5
d2323 1
a2323 1
! #line 3098 "configure"
d2328 1
a2328 1
*** 3111,3117 ****
d2332 1
a2332 1
! if { (eval echo configure:3115: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2336 1
a2336 1
--- 3117,3123 ----
d2340 1
a2340 1
! if { (eval echo configure:3121: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2345 1
a2345 1
*** 3152,3168 ****
d2349 1
a2349 1
! echo "configure:3156: checking for $ac_hdr" >&5
d2354 1
a2354 1
! #line 3161 "configure"
d2359 1
a2359 1
! { (eval echo configure:3166: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
d2363 1
a2363 1
--- 3158,3174 ----
d2367 1
a2367 1
! echo "configure:3162: checking for $ac_hdr" >&5
d2372 1
a2372 1
! #line 3167 "configure"
d2377 1
a2377 1
! { (eval echo configure:3172: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
d2382 1
a2382 1
*** 3208,3214 ****
d2386 1
a2386 1
! #line 3212 "configure"
d2390 1
a2390 1
--- 3214,3220 ----
d2394 1
a2394 1
! #line 3218 "configure"
d2399 1
a2399 1
*** 3224,3230 ****
d2403 1
a2403 1
! #line 3228 "configure"
d2407 1
a2407 1
--- 3230,3236 ----
d2411 1
a2411 1
! #line 3234 "configure"
d2416 1
a2416 1
*** 3243,3249 ****
d2420 1
a2420 1
! echo "configure:3247: checking for compile in -lgen" >&5
d2424 1
a2424 1
--- 3249,3255 ----
d2428 1
a2428 1
! echo "configure:3253: checking for compile in -lgen" >&5
d2433 1
a2433 1
*** 3251,3257 ****
d2437 1
a2437 1
! #line 3255 "configure"
d2441 1
a2441 1
--- 3257,3263 ----
d2445 1
a2445 1
! #line 3261 "configure"
d2450 1
a2450 1
*** 3262,3268 ****
d2454 1
a2454 1
! if { (eval echo configure:3266: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2458 1
a2458 1
--- 3268,3274 ----
d2462 1
a2462 1
! if { (eval echo configure:3272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2467 1
a2467 1
*** 3311,3322 ****
d2471 1
a2471 1
! echo "configure:3315: checking for gethostname" >&5
d2476 1
a2476 1
! #line 3320 "configure"
d2480 1
a2480 1
--- 3317,3328 ----
d2484 1
a2484 1
! echo "configure:3321: checking for gethostname" >&5
d2489 1
a2489 1
! #line 3326 "configure"
d2494 1
a2494 1
*** 3339,3345 ****
d2498 1
a2498 1
! if { (eval echo configure:3343: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2502 1
a2502 1
--- 3345,3351 ----
d2506 1
a2506 1
! if { (eval echo configure:3349: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2511 1
a2511 1
*** 3404,3417 ****
d2515 1
a2515 1
! echo "configure:3408: checking for library containing crypt" >&5
d2522 1
a2522 1
! #line 3415 "configure"
d2526 1
a2526 1
--- 3410,3423 ----
d2530 1
a2530 1
! echo "configure:3414: checking for library containing crypt" >&5
d2537 1
a2537 1
! #line 3421 "configure"
d2542 1
a2542 1
*** 3422,3428 ****
d2546 1
a2546 1
! if { (eval echo configure:3426: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2550 1
a2550 1
--- 3428,3434 ----
d2554 1
a2554 1
! if { (eval echo configure:3432: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2559 1
a2559 1
*** 3433,3439 ****
d2563 1
a2563 1
! #line 3437 "configure"
d2567 1
a2567 1
--- 3439,3445 ----
d2571 1
a2571 1
! #line 3443 "configure"
d2576 1
a2576 1
*** 3444,3450 ****
d2580 1
a2580 1
! if { (eval echo configure:3448: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2584 1
a2584 1
--- 3450,3456 ----
d2588 1
a2588 1
! if { (eval echo configure:3454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
d2593 1
a2593 1
*** 3473,3492 ****
d2598 1
a2598 1
! echo "configure:3478: checking for cygwin32" >&5
d2603 1
a2603 1
! #line 3483 "configure"
d2610 1
a2610 1
! if { (eval echo configure:3490: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
d2614 1
a2614 1
--- 3479,3568 ----
d2636 1
a2636 1
+ echo "configure:3501: checking for MySQL directory" >&5
d2689 1
a2689 1
! echo "configure:3554: checking for cygwin32" >&5
d2694 1
a2694 1
! #line 3559 "configure"
d2701 1
a2701 1
! if { (eval echo configure:3566: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
d2706 2
a2707 2
*** ./configure.in	Thu Feb 17 10:41:22 2000
--- ./configure.in	Fri Jun 16 15:10:33 2000
d2709 2
a2710 2
*** 264,269 ****
--- 264,335 ----
d2784 2
a2785 2
*** ./doc/cvs.texinfo	Wed Jun 14 10:41:56 2000
--- ./doc/cvs.texinfo	Fri Jun 16 15:10:33 2000
d2885 2
a2886 2
*** ./src/Makefile.in	Tue Oct  6 16:04:30 1998
--- ./src/Makefile.in	Fri Jun 16 15:10:33 2000
d2924 2
a2925 2
*** ./src/add.c	Tue Jun 13 14:30:44 2000
--- ./src/add.c	Fri Jun 16 15:10:33 2000
d2939 2
a2940 2
*** ./src/admin.c	Tue Jun 13 14:30:44 2000
--- ./src/admin.c	Fri Jun 16 15:10:33 2000
d2967 2
a2968 2
*** ./src/checkout.c	Thu Jun 15 08:33:30 2000
--- ./src/checkout.c	Fri Jun 16 15:10:33 2000
d2985 2
a2986 2
*** ./src/client.c	Wed Jun 14 12:37:02 2000
--- ./src/client.c	Fri Jun 16 15:10:33 2000
d2988 1
a2988 1
*** 3817,3823 ****
d2996 1
a2996 1
--- 3817,3823 ----
d3005 1
a3005 1
*** 5482,5488 ****
d3013 1
a3013 1
--- 5482,5489 ----
d3023 2
a3024 2
*** ./src/commit.c	Mon Jun 12 14:47:32 2000
--- ./src/commit.c	Fri Jun 16 15:10:33 2000
d3026 1
a3026 1
*** 452,458 ****
d3034 1
a3034 1
--- 452,458 ----
d3043 1
a3043 1
*** 633,639 ****
d3051 1
a3051 1
--- 633,640 ----
d3061 1
a3061 1
*** 648,654 ****
d3069 1
a3069 1
--- 649,655 ----
d3078 2
a3079 2
*** ./src/cvs.h	Wed Jun 14 12:38:15 2000
--- ./src/cvs.h	Fri Jun 16 15:10:33 2000
d3204 2
a3205 2
*** ./src/diff.c	Wed Apr 14 17:12:26 1999
--- ./src/diff.c	Fri Jun 16 15:10:33 2000
d3224 2
a3225 2
*** ./src/edit.c	Tue Jun 13 14:30:44 2000
--- ./src/edit.c	Fri Jun 16 15:10:33 2000
d3325 2
a3326 2
*** ./src/error.c	Wed Jun 14 12:37:03 2000
--- ./src/error.c	Fri Jun 16 15:10:33 2000
d3340 2
a3341 2
*** ./src/import.c	Tue May 16 11:57:15 2000
--- ./src/import.c	Fri Jun 16 15:10:33 2000
d3343 2
a3344 2
*** 277,282 ****
--- 277,285 ----
d3355 2
a3356 2
*** ./src/local_auth.c	Wed Dec 31 16:00:00 1969
--- ./src/local_auth.c	Fri Jun 16 17:00:54 2000
d3359 1
a3359 1
--- 1,432 ----
a3553 1
+    int matched_root = 0;
d3567 2
a3568 28
+    if ((! strncmp (dir, CVSroot_directory, rootlen)) && (dir[rootlen] == '/'))
+    {
+        matched_root = 1;
+    }
+    else  /* If no match, try resolving as a symlink and matching again. */
+    {
+        char *root;
+        root = xstrdup (CVSroot_directory);
+        resolve_symlink (&root);
+        rootlen = strlen (root);
+        if ((! strncmp (dir, root, rootlen)) && (dir[rootlen] == '/')) {
+            matched_root = 1;
+        }
+ 
+        /* We cannot guarantee that CVSroot_directory was malloc'd, so
+         * we don't free it, just reassign.
+         *
+         * FIXME: in general, CVS is not prepared for the case where
+         * either the CVSroot_directory or repository/plus/subdir are a
+         * symlink.  Reassigning CVSroot_directory here solves part of
+         * the problem (for `rtag', it gets us past an assertion in
+         * lock.c), but there are other places in the code that just do
+         * direct strncmp()'s, and those may still fail.
+         */
+        CVSroot_directory = root;
+    }
+ 
+    if (matched_root)
d3766 2
a3767 2
*** ./src/lock.c	Wed Dec 15 09:53:21 1999
--- ./src/lock.c	Fri Jun 16 15:10:33 2000
d3787 2
a3788 2
*** ./src/log.c	Tue Jun 13 14:30:44 2000
--- ./src/log.c	Fri Jun 16 15:10:33 2000
d3790 1
a3790 1
*** 344,350 ****
d3798 1
a3798 1
--- 344,350 ----
d3807 2
a3808 2
*** ./src/login.c	Mon Nov 29 21:11:12 1999
--- ./src/login.c	Fri Jun 16 15:10:33 2000
d3827 2
a3828 2
*** ./src/main.c	Thu Jun  8 08:07:53 2000
--- ./src/main.c	Fri Jun 16 15:10:33 2000
d3870 2
a3871 2
*** 993,998 ****
--- 998,1022 ----
d3898 2
a3899 2
*** 1034,1039 ****
--- 1058,1067 ----
d3911 2
a3912 2
*** ./src/mkmodules.c	Thu Mar 23 14:52:25 2000
--- ./src/mkmodules.c	Fri Jun 16 15:10:33 2000
d3950 2
a3951 2
*** ./src/mysqlsubr.c	Wed Dec 31 16:00:00 1969
--- ./src/mysqlsubr.c	Fri Jun 16 15:10:33 2000
d4033 2
a4034 2
*** ./src/parseinfo.c	Mon Mar 13 11:15:31 2000
--- ./src/parseinfo.c	Fri Jun 16 15:10:33 2000
d4079 2
a4080 2
*** ./src/patch.c	Wed Jun 14 12:38:15 2000
--- ./src/patch.c	Fri Jun 16 15:10:33 2000
d4114 2
a4115 2
*** ./src/rcs.c	Fri Jun 16 14:41:59 2000
--- ./src/rcs.c	Fri Jun 16 15:10:33 2000
d4134 2
a4135 2
*** ./src/recurse.c	Fri May 26 13:55:25 2000
--- ./src/recurse.c	Fri Jun 16 15:10:33 2000
d4231 1
a4231 1
*** 284,290 ****
d4239 1
a4239 1
--- 325,341 ----
d4258 2
a4259 2
*** 621,626 ****
--- 672,686 ----
d4276 2
a4277 2
*** ./src/remove.c	Wed Dec 23 07:15:01 1998
--- ./src/remove.c	Fri Jun 16 15:10:33 2000
d4296 1
a4296 1
*** 112,118 ****
d4304 1
a4304 1
--- 112,119 ----
d4314 2
a4315 2
*** ./src/rtag.c	Wed Jun 14 12:38:15 2000
--- ./src/rtag.c	Fri Jun 16 16:37:49 2000
d4317 1
a4317 1
*** 314,321 ****
d4322 1
a4322 1
!     
d4325 1
a4325 2
         error (1, 0, "correct the above errors first!");
--- 314,321 ----
d4330 1
a4330 1
! 
a4332 1
         error (1, 0, "correct the above errors first!");
d4342 1
a4342 1
--- 325,332 ----
a4346 1
! 
d4351 2
a4352 2
*** ./src/scramble.c	Fri Jun 27 13:16:08 1997
--- ./src/scramble.c	Fri Jun 16 15:10:33 2000
d4428 2
a4429 2
*** ./src/server.c	Wed Jun 14 12:38:15 2000
--- ./src/server.c	Fri Jun 16 15:10:33 2000
d4431 2
a4432 2
*** 792,797 ****
--- 792,800 ----
d4443 1
a4443 1
*** 5214,5221 ****
d4452 1
a4452 1
--- 5217,5224 ----
d4462 2
a4463 2
*** 5226,5231 ****
--- 5229,5238 ----
d4475 2
a4476 2
*** 5389,5394 ****
--- 5396,5558 ----
d4641 2
a4642 2
*** 5402,5407 ****
--- 5566,5577 ----
d4656 2
a4657 2
*** 5662,5667 ****
--- 5832,5844 ----
d4672 1
a4672 1
*** 5688,5695 ****
d4681 1
a4681 1
--- 5865,5875 ----
d4694 1
a4694 1
*** 5699,5705 ****
d4702 1
a4702 1
--- 5879,5886 ----
d4712 1
a4712 1
*** 5786,5792 ****
d4720 1
a4720 1
--- 5967,5974 ----
d4730 1
a4730 1
*** 5878,5887 ****
d4741 1
a4741 1
--- 6060,6073 ----
d4757 1
a4757 1
*** 5898,5904 ****
d4765 1
a4765 1
--- 6084,6091 ----
d4775 2
a4776 2
*** ./src/status.c	Tue Jun  1 14:36:33 1999
--- ./src/status.c	Fri Jun 16 15:10:33 2000
d4795 2
a4796 2
*** ./src/tag.c	Wed Jun 14 12:32:51 2000
--- ./src/tag.c	Fri Jun 16 15:10:33 2000
d4849 2
a4850 2
*** ./src/update.c	Fri Jun 16 14:41:59 2000
--- ./src/update.c	Fri Jun 16 15:10:33 2000
d4922 2
a4923 2
*** ./src/watch.c	Tue Jun 13 14:30:44 2000
--- ./src/watch.c	Fri Jun 16 15:10:33 2000
@


1.14
log
@If CVSroot_directory does not match repository, then try resolving it
as a symlink and matching again.  If succeed, set CVSroot_directory to
the real directory and continue.
@
text
@a3791 434
diff --exclude=CVS -crN ../pristine-ccvs/src/local_auth.c~ ./src/local_auth.c~
*** ./src/local_auth.c~	Wed Dec 31 16:00:00 1969
--- ./src/local_auth.c~	Fri Jun 16 16:50:03 2000
***************
*** 0 ****
--- 1,428 ----
+ /* local_auth.c: subroutines for getting auth info from a mysql database.
+  * 
+  * This file is part of GNU CVS.
+  * 
+  * GNU CVS 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, 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.  
+  * 
+  * Last modified by: Karl Fogel <kfogel@@collab.net>
+  */
+ 
+ #include "cvs.h"
+ 
+ /* Use only special local auth systems (such as DB, etc) */
+ int local_authentication = 0;
+ 
+ #ifdef MYSQL_SUPPORT
+ 
+ /* Fill in the value of PERMS according to the results of QUERY.
+  * 0 means no access, 1 means read-only, 2 means read-write.
+  *
+  * Return value is number of rows processed; 0 means this query
+  * retrieved no rows, which may be of interest to the caller!
+  */
+ static int
+ find_tigris_privs_query (mysql, perms, query)
+      MYSQL *mysql;
+      int *perms;
+      char *query;
+ {
+     MYSQL_RES *res;
+     MYSQL_ROW row;
+     int rows_found = 0;
+ 
+     mysql_real_query (mysql, query, strlen (query));
+     res = mysql_use_result (mysql);
+     /* Check for 'Y's in the results.
+      * We presume that read is the first column, and write is the second.
+      */
+     while ((row = mysql_fetch_row (res))) 
+     {
+         rows_found++;
+ 	if (row[0] && (row[0][0] == 'Y') && (*perms == 0))
+ 	    *perms = 1;
+ 	if (row[1] && (row[1][0] == 'Y') && (*perms != 2))
+ 	    *perms = 2;
+     }
+     mysql_free_result (res);
+ 
+     return rows_found;
+ }
+ 
+ 
+ /* Check for permission to read/write (for us, write and create are
+  * the same) from the Tigris database.  Note that domain level privs
+  * supercede project level, which supercede module level.  At this
+  * time there is no way to remove privs from someone who has them
+  * higher up. 
+  *
+  * Returns 0 for no privs, 1 for read-only privs, and 2 for read-write
+  * privs (we assume that if write privs exist, read ones do as well).
+  */
+ static int
+ find_tigris_privs (project, project_len, module, module_len)
+      const char *project;
+      int project_len; 
+      const char *module;
+      int module_len;
+ {
+     char *username;
+     int perms = 0;
+ 
+     /* This will give the CVS username, or the actual login name. Either way,
+      * this is what we want to use for privileges
+      */
+     username = getcaller ();
+     
+     if (CVS_mysql == NULL) 
+     {
+ 	error (1, 0 , "database connection not established");
+     } 
+     else 
+     {
+ 	char *query;
+ 
+ 	/*** STEP 1: check domain-level configs ***/
+ 
+ 	/* SELECT checkout_priv,commit_priv FROM domain_privs WHERE username =
+ 	 * '<usr>'
+ 	 * strlen ("SELECT... WHERE username = ''\0") = 72
+ 	 */
+ 	query = xmalloc (72 + strlen(username) + 64 /* for good measure */);
+ 	sprintf (query, "SELECT checkout_priv,commit_priv FROM domain_privs "
+                  "WHERE username = '%s'", username);
+ 	find_tigris_privs_query (CVS_mysql, &perms, query);
+ 	free (query);
+ 	
+ 	/*** STEP 2: check project_priv and project_modules configs ***/
+ 
+ 	if ((perms != 2) && (project != NULL)) 
+         {
+             /* If there is an entry in the module_modules table for
+              * this user/project/module, then we want to abide by it.
+              * Otherwise, we just ask the privileges in the
+              * project_privs table.
+              */
+ 
+             int rows = 0;   /* Number of rows retrieved by query. */
+ 
+ 	    if (module != NULL) 
+             {
+ 		/* SELECT checkout_priv,commit_priv FROM
+ 		 * project_privs,project_modules WHERE
+ 		 * project_privs.project = '<project>' AND
+ 		 * project_privs.username = '<user>' AND
+ 		 * project_modules.project = '<project>' AND
+ 		 * project_modules.module = '<mod>' and
+ 		 * project_modules.private = 'N'
+ 		 * strlen (...) = 232 */
+ 		query = xmalloc (232 + (2 * project_len) + module_len
+                                  + strlen (username) + 64);
+ 		sprintf (query, "SELECT checkout_priv,commit_priv FROM "
+                          "project_privs,project_modules WHERE "
+                          "project_privs.project = '%.*s' AND "
+                          "project_privs.username = '%s' AND "
+                          "project_modules.project = '%.*s' AND "
+                          "project_modules.module = '%.*s' AND "
+                          "project_modules.private = 'N'",
+                          project_len, project, username,
+                          project_len, project, module_len, module);
+                 rows = find_tigris_privs_query (CVS_mysql, &perms, query);
+                 free (query);
+ 	    }
+ 
+             /* If the above retrieved no rows, then there are no
+              * explicit permissions for this module, so look at
+              * project-level permissions instead.
+              */
+             if (rows == 0)
+             {
+ 		/* SELECT checkout_priv,commit_priv FROM project_privs
+ 		 * WHERE project = '<project>' AND username = '<user>'
+ 		 * strlen("SELECT ch...= '' AND username = ''\0") = 90
+ 		 */
+ 		query = xmalloc (90 + project_len + strlen (username) + 64);
+ 		sprintf (query, "SELECT checkout_priv,commit_priv FROM "
+                          "project_privs WHERE project = '%.*s' AND "
+                          "username = '%s'",
+                          project_len, project, username);
+                 find_tigris_privs_query (CVS_mysql, &perms, query);
+                 free (query);
+ 	    }
+ 	}
+ 
+ 	/*** STEP 3: check module_privs table ***/
+ 
+ 	/* SELECT checkout_priv,commit_priv FROM module_privs WHERE
+ 	 * project = '<project>' AND module = '<module>'
+ 	 * AND username = '<user>'
+ 	 * strlen ("SEl... '' AND module = '' AND username = ''\0") = 105
+ 	 */
+ 	if ((perms != 2) && (project != NULL) && (module != NULL)) 
+         {
+ 	    query = xmalloc (105 + project_len + module_len
+                              + strlen (username) + 64);
+ 	    sprintf (query, "SELECT checkout_priv,commit_priv FROM "
+                      "module_privs WHERE project = '%.*s' AND "
+                      "module = '%.*s' AND username = '%s'",
+                      project_len, project, module_len, module, username);
+ 	    find_tigris_privs_query (CVS_mysql, &perms, query);
+ 	    free (query);
+ 	}
+     }
+     
+     return perms;
+ }
+ 
+ #endif /* MYSQL_SUPPORT */
+ 
+ 
+ static int
+ find_perms (dir, perm)
+    const char *dir;
+    char *perm;
+ {
+    int rootlen;
+    int retval = 1;
+    char all_perms[4];
+    int matched_root = 0;
+ 
+    all_perms[0] = '\0';
+ 
+    if (! local_authentication)
+    {
+       strcpy (perm, "rwc");
+       return 0;
+    }
+ 
+ #ifdef MYSQL_SUPPORT
+ 
+    rootlen = strlen (CVSroot_directory);
+ 
+    if ((! strncmp (dir, CVSroot_directory, rootlen)) && (dir[rootlen] == '/'))
+    {
+        matched_root = 1;
+    }
+    else  /* If no match, try resolving as a symlink and matching again. */
+    {
+        char *root;
+        root = xstrdup (CVSroot_directory);
+        resolve_symlink (&root);
+        rootlen = strlen (root);
+        if ((! strncmp (dir, root, rootlen)) && (dir[rootlen] == '/')) {
+            matched_root = 1;
+        }
+ 
+        /* kff todo: worry about allocation? */
+        CVSroot_directory = root;
+ #if 0
+        /* CVSroot_directory is not used after this point, so we don't
+           need to replace it with the real root we just discovered. */
+        free (root);
+ #endif
+    }
+ 
+    if (matched_root)
+    {
+        const char *project, *module, *path;
+        int modlen, projlen;
+        int privs;
+ 
+        if (dir[rootlen] == '/')
+        {
+ 	   project = dir + rootlen + 1;   /* points to project/module/path */
+ 	   module = strchr (project, '/');
+ 	   if (module != NULL)
+            {
+ 	       projlen = module++ - project;
+ 	       path = strchr (module, '/');
+ 	       if (path != NULL) {
+ 		   modlen = path++ - module;
+ 	       } 
+                else {
+ 		   modlen = strlen (module);
+ 	       }
+ 	   } 
+            else 
+            {
+ 	       projlen = strlen (project);
+ 	       modlen = 0;
+ 	       path = NULL;
+ 	   }
+        }
+        else
+        {
+ 	   path = module = project = NULL;
+ 	   modlen = projlen = 0;
+        }
+ 
+        if (privs = find_tigris_privs (project, projlen, module, modlen))
+        {
+ 	   strcpy (perm, privs == 2 ? "rwc" : "r");
+ 	   retval = 0;
+        }
+ 
+ #if 0
+        /* uncomment for debugging */
+        printf ("PROJ: %.*s MOD: %.*s DIR: %s\n", projlen, project,
+                modlen, module, path);
+ #endif
+    } 
+    else 
+    {
+        strcpy (perm, "");
+    }
+ 
+    return retval;
+ 
+ #else  /* ! MYSQL_SUPPORT */
+    strcpy (perm, "rwc");
+    return 0;
+ #endif /* MYSQL_SUPPORT */
+ 
+ }
+ 
+ 
+ int
+ verify_read (dir)
+    const char *dir;
+ {
+    char perm[4];
+ 
+    if (find_perms (dir, perm))
+       return 0;
+    else
+       if (strchr (perm, 'r') == NULL)
+ 	 return 0;
+       else
+ 	 return 1;
+ }
+ 
+ 
+ int
+ verify_write (dir)
+    const char *dir;
+ {
+    char perm[4];
+ 
+    if (find_perms (dir, perm))
+       return 0;
+    else
+       if (strchr(perm, 'w') == NULL)
+ 	 return 0;
+       else
+ 	 return 1;
+ }
+ 
+ 
+ int
+ verify_create (dir)
+    const char *dir;
+ {
+    char perm[4];
+ 
+    if (find_perms (dir, perm))
+       return 0;
+    else
+    {
+       if (strchr(perm, 'c') == NULL)
+ 	 return 0;
+       else
+ 	 return 1;
+    }
+ }
+ 
+ 
+ /* kff todo: this func apparently never returns true in the Tigris
+  * repository, because it's looking for a file CVSROOT/admin, which we
+  * don't have.  And it's not consulting the database at all.  Ask
+  * Jason what our policy is going to be.
+  *
+  * The way to start using this function is to modify find_perms() to
+  * put an `a' into the permstring, then strchr() for `a'.
+  */
+ int
+ verify_admin ()
+ {
+    static int is_admin_set = 0;    /* Non-zero if been here already. */
+    static int is_the_admin = 0;    /* What was discovered last time here. */
+ 
+    char *filename;
+    FILE *fp;
+    char *linebuf = NULL;
+    int  linebuf_len;
+    char *name;
+ 
+ 
+    if (! local_authentication)
+       return 1;
+ 
+    if (is_admin_set)
+    {
+       return (is_the_admin);
+    }
+    else
+    {
+       is_admin_set = 1;
+ 
+       filename = xmalloc (strlen (CVSroot_directory)
+ 			  + strlen ("/CVSROOT")
+ 			  + strlen ("/admin")
+ 			  + 1);
+ 
+       strcpy (filename, CVSroot_directory);
+       strcat (filename, "/CVSROOT");
+       strcat (filename, "/admin");
+ 
+       fp = CVS_FOPEN (filename, "r");
+       if (fp != NULL)
+       {
+ 	 if (getline (&linebuf, &linebuf_len, fp) >= 0)
+ 	 {
+ 	    name = strtok (linebuf, "\n");
+ 	    if (strcmp (getcaller(), name) == 0)
+ 	       is_the_admin = 1;
+ 	    free (linebuf);
+ 	 }
+ 	 if (ferror (fp))
+ 	    error (1, errno, "cannot read %s", filename);
+ 	 if (fclose (fp) < 0)
+ 	    error (0, errno, "cannot close %s", filename);
+       }
+    }
+ 
+    return (is_the_admin);
+ }
+ 
+ 
+ int
+ verify_owner (dir)
+    const char *dir;
+ {
+    char *filename;
+    char *linebuf = NULL;
+    int linebuf_len;
+    char *owner;
+    FILE *fp;
+    int retval = 0;
+ 
+    if (! local_authentication)
+       return 1;
+ 
+    if (verify_admin ())
+       return 1;
+ 
+    /* kff todo: we have this skeleton in place for finer-grained MySQL
+     * permission.  Talk to Jason about whether we actually want it or
+     * not. 
+     */
+ 
+    return 1;
+ }
@


1.13
log
@Update hunks for `watch.c'.
@
text
@d2 2
a3 2
*** ./config.h.in	Tue Jun  2 12:29:50 1998
--- ./config.h.in	Fri Jun 16 14:43:19 2000
d17 2
a18 2
*** ./configure	Thu Feb 17 12:41:22 2000
--- ./configure	Fri Jun 16 14:43:19 2000
d2706 2
a2707 2
*** ./configure.in	Thu Feb 17 12:41:22 2000
--- ./configure.in	Fri Jun 16 14:43:19 2000
d2784 2
a2785 2
*** ./doc/cvs.texinfo	Thu Jun 15 12:33:31 2000
--- ./doc/cvs.texinfo	Fri Jun 16 14:43:19 2000
d2885 2
a2886 2
*** ./src/Makefile.in	Tue Oct  6 18:04:30 1998
--- ./src/Makefile.in	Fri Jun 16 14:43:19 2000
d2924 2
a2925 2
*** ./src/add.c	Tue Jun 13 16:50:10 2000
--- ./src/add.c	Fri Jun 16 14:43:19 2000
d2939 2
a2940 2
*** ./src/admin.c	Tue Jun 13 16:50:10 2000
--- ./src/admin.c	Fri Jun 16 14:43:19 2000
d2967 2
a2968 2
*** ./src/checkout.c	Thu Jun 15 12:33:32 2000
--- ./src/checkout.c	Fri Jun 16 14:43:19 2000
d2985 2
a2986 2
*** ./src/client.c	Thu Jun 15 12:33:32 2000
--- ./src/client.c	Fri Jun 16 14:43:19 2000
d3023 2
a3024 2
*** ./src/commit.c	Tue Jun 13 16:50:10 2000
--- ./src/commit.c	Fri Jun 16 14:43:19 2000
d3078 2
a3079 2
*** ./src/cvs.h	Thu Jun 15 12:33:32 2000
--- ./src/cvs.h	Fri Jun 16 14:43:19 2000
d3204 2
a3205 2
*** ./src/diff.c	Wed Apr 14 19:12:26 1999
--- ./src/diff.c	Fri Jun 16 14:43:19 2000
d3224 2
a3225 2
*** ./src/edit.c	Tue Jun 13 16:50:10 2000
--- ./src/edit.c	Fri Jun 16 14:43:19 2000
d3325 2
a3326 2
*** ./src/error.c	Thu Jun 15 12:33:32 2000
--- ./src/error.c	Fri Jun 16 14:43:19 2000
d3340 2
a3341 2
*** ./src/import.c	Tue May 30 08:59:56 2000
--- ./src/import.c	Fri Jun 16 14:43:19 2000
d3355 2
a3356 2
*** ./src/local_auth.c	Wed Dec 31 18:00:00 1969
--- ./src/local_auth.c	Fri Jun 16 14:43:19 2000
d3359 1
a3359 1
--- 1,405 ----
d3554 1
d3568 462
a4029 2
+    if ((! strncmp (dir, CVSroot_directory, rootlen))
+        && (dir[rootlen] == '/'))
d4227 2
a4228 2
*** ./src/lock.c	Wed Dec 15 11:53:21 1999
--- ./src/lock.c	Fri Jun 16 14:43:19 2000
d4248 2
a4249 2
*** ./src/log.c	Tue Jun 13 16:50:10 2000
--- ./src/log.c	Fri Jun 16 14:43:19 2000
d4268 2
a4269 2
*** ./src/login.c	Mon Nov 29 23:11:12 1999
--- ./src/login.c	Fri Jun 16 14:43:19 2000
d4288 2
a4289 2
*** ./src/main.c	Thu Jun  8 08:35:53 2000
--- ./src/main.c	Fri Jun 16 14:43:19 2000
d4372 2
a4373 2
*** ./src/mkmodules.c	Thu Mar 23 16:52:25 2000
--- ./src/mkmodules.c	Fri Jun 16 14:43:19 2000
d4411 2
a4412 2
*** ./src/mysqlsubr.c	Wed Dec 31 18:00:00 1969
--- ./src/mysqlsubr.c	Fri Jun 16 14:43:19 2000
d4494 2
a4495 2
*** ./src/parseinfo.c	Mon Mar 13 13:15:31 2000
--- ./src/parseinfo.c	Fri Jun 16 14:43:19 2000
d4540 2
a4541 2
*** ./src/patch.c	Thu Jun 15 12:33:32 2000
--- ./src/patch.c	Fri Jun 16 14:43:19 2000
d4575 2
a4576 2
*** ./src/rcs.c	Fri Jun 16 14:42:55 2000
--- ./src/rcs.c	Fri Jun 16 14:43:19 2000
d4595 2
a4596 2
*** ./src/recurse.c	Tue May 30 08:59:56 2000
--- ./src/recurse.c	Fri Jun 16 14:43:19 2000
d4737 2
a4738 2
*** ./src/remove.c	Wed Dec 23 09:15:01 1998
--- ./src/remove.c	Fri Jun 16 14:43:19 2000
d4775 2
a4776 2
*** ./src/rtag.c	Thu Jun 15 12:33:32 2000
--- ./src/rtag.c	Fri Jun 16 14:43:19 2000
d4778 1
a4778 1
*** 314,320 ****
d4783 1
a4783 1
      
d4786 2
a4787 1
--- 314,320 ----
d4792 1
a4792 1
      
d4795 1
d4805 1
a4805 1
--- 325,331 ----
d4810 1
d4815 2
a4816 2
*** ./src/scramble.c	Fri Jun 27 15:16:08 1997
--- ./src/scramble.c	Fri Jun 16 14:43:19 2000
d4892 2
a4893 2
*** ./src/server.c	Thu Jun 15 12:33:32 2000
--- ./src/server.c	Fri Jun 16 14:43:19 2000
d5239 2
a5240 2
*** ./src/status.c	Tue Jun  1 16:36:33 1999
--- ./src/status.c	Fri Jun 16 14:43:19 2000
d5259 2
a5260 2
*** ./src/tag.c	Thu Jun 15 12:33:32 2000
--- ./src/tag.c	Fri Jun 16 14:43:19 2000
d5313 2
a5314 2
*** ./src/update.c	Fri Jun 16 14:42:55 2000
--- ./src/update.c	Fri Jun 16 14:43:19 2000
d5386 2
a5387 2
*** ./src/watch.c	Tue Jun 13 16:50:11 2000
--- ./src/watch.c	Fri Jun 16 14:43:19 2000
@


1.12
log
@Rebuild patch against most recent changes to CVS, in preparation
for installation on NetBeans (after phone conversation w/ Niels).
@
text
@d3 1
a3 1
--- ./config.h.in	Thu Jun 15 12:46:26 2000
d18 1
a18 1
--- ./configure	Thu Jun 15 12:46:26 2000
d2707 1
a2707 1
--- ./configure.in	Thu Jun 15 12:46:26 2000
d2785 1
a2785 1
--- ./doc/cvs.texinfo	Thu Jun 15 12:46:26 2000
d2886 1
a2886 1
--- ./src/Makefile.in	Thu Jun 15 12:46:26 2000
d2925 1
a2925 1
--- ./src/add.c	Thu Jun 15 12:46:26 2000
d2940 1
a2940 1
--- ./src/admin.c	Thu Jun 15 12:46:26 2000
d2968 1
a2968 1
--- ./src/checkout.c	Thu Jun 15 12:46:26 2000
d2986 1
a2986 1
--- ./src/client.c	Thu Jun 15 12:46:26 2000
d3024 1
a3024 1
--- ./src/commit.c	Thu Jun 15 12:46:26 2000
d3079 1
a3079 1
--- ./src/cvs.h	Thu Jun 15 12:46:26 2000
d3205 1
a3205 1
--- ./src/diff.c	Thu Jun 15 12:46:26 2000
d3225 1
a3225 1
--- ./src/edit.c	Thu Jun 15 12:46:26 2000
d3326 1
a3326 1
--- ./src/error.c	Thu Jun 15 12:46:26 2000
d3341 1
a3341 1
--- ./src/import.c	Thu Jun 15 12:46:26 2000
d3356 1
a3356 1
--- ./src/local_auth.c	Thu Jun 15 12:46:26 2000
d3767 1
a3767 1
--- ./src/lock.c	Thu Jun 15 12:46:26 2000
d3788 1
a3788 1
--- ./src/log.c	Thu Jun 15 12:46:26 2000
d3808 1
a3808 1
--- ./src/login.c	Thu Jun 15 12:46:26 2000
d3828 1
a3828 1
--- ./src/main.c	Thu Jun 15 12:46:26 2000
d3912 1
a3912 1
--- ./src/mkmodules.c	Thu Jun 15 12:46:26 2000
d3951 1
a3951 1
--- ./src/mysqlsubr.c	Thu Jun 15 12:46:26 2000
d4034 1
a4034 1
--- ./src/parseinfo.c	Thu Jun 15 12:46:26 2000
d4080 1
a4080 1
--- ./src/patch.c	Thu Jun 15 12:46:51 2000
d4114 2
a4115 2
*** ./src/rcs.c	Tue Jun 13 16:50:11 2000
--- ./src/rcs.c	Thu Jun 15 12:46:26 2000
d4135 1
a4135 1
--- ./src/recurse.c	Thu Jun 15 12:46:26 2000
d4277 1
a4277 1
--- ./src/remove.c	Thu Jun 15 12:46:26 2000
d4315 1
a4315 1
--- ./src/rtag.c	Thu Jun 15 12:47:23 2000
d4352 1
a4352 1
--- ./src/scramble.c	Thu Jun 15 12:46:26 2000
d4429 1
a4429 1
--- ./src/server.c	Thu Jun 15 12:46:26 2000
d4776 1
a4776 1
--- ./src/status.c	Thu Jun 15 12:46:26 2000
d4796 1
a4796 1
--- ./src/tag.c	Thu Jun 15 12:46:26 2000
d4849 2
a4850 2
*** ./src/update.c	Tue Jun 13 16:50:11 2000
--- ./src/update.c	Thu Jun 15 12:46:26 2000
d4886 1
a4886 1
*** 1365,1371 ****
d4894 1
a4894 1
--- 1365,1372 ----
d4904 1
a4904 1
*** 1761,1767 ****
d4912 1
a4912 1
--- 1762,1769 ----
d4923 1
a4923 1
--- ./src/watch.c	Thu Jun 15 12:46:26 2000
@


1.11
log
@Reapply to compensate for Larry Jone's recent changes.
@
text
@d3 1
a3 1
--- ./config.h.in	Tue Jun 13 16:41:58 2000
d18 1
a18 1
--- ./configure	Tue Jun 13 16:41:58 2000
d2707 1
a2707 1
--- ./configure.in	Tue Jun 13 16:41:58 2000
d2784 2
a2785 2
*** ./doc/cvs.texinfo	Tue May 30 08:59:55 2000
--- ./doc/cvs.texinfo	Tue Jun 13 16:42:08 2000
d2886 1
a2886 1
--- ./src/Makefile.in	Tue Jun 13 16:42:08 2000
d2925 1
a2925 1
--- ./src/add.c	Tue Jun 13 16:42:08 2000
d2940 1
a2940 1
--- ./src/admin.c	Tue Jun 13 16:42:08 2000
d2967 2
a2968 2
*** ./src/checkout.c	Tue Jun 13 16:50:10 2000
--- ./src/checkout.c	Tue Jun 13 16:42:08 2000
d2970 2
a2971 2
*** 536,541 ****
--- 536,547 ----
d2985 2
a2986 2
*** ./src/client.c	Tue May 30 08:59:55 2000
--- ./src/client.c	Tue Jun 13 16:42:08 2000
d2988 1
a2988 1
*** 3816,3822 ****
d2996 1
a2996 1
--- 3816,3822 ----
d3005 1
a3005 1
*** 5481,5487 ****
d3013 1
a3013 1
--- 5481,5488 ----
d3024 1
a3024 1
--- ./src/commit.c	Tue Jun 13 16:42:08 2000
d3078 2
a3079 2
*** ./src/cvs.h	Tue May 30 08:59:55 2000
--- ./src/cvs.h	Tue Jun 13 16:42:08 2000
d3205 1
a3205 1
--- ./src/diff.c	Tue Jun 13 16:42:08 2000
d3225 1
a3225 1
--- ./src/edit.c	Tue Jun 13 16:42:08 2000
d3325 2
a3326 2
*** ./src/error.c	Mon Nov 29 15:39:48 1999
--- ./src/error.c	Tue Jun 13 16:42:08 2000
d3341 1
a3341 1
--- ./src/import.c	Tue Jun 13 16:42:08 2000
d3356 1
a3356 1
--- ./src/local_auth.c	Tue Jun 13 16:42:08 2000
d3767 1
a3767 1
--- ./src/lock.c	Tue Jun 13 16:42:08 2000
d3788 1
a3788 1
--- ./src/log.c	Tue Jun 13 16:42:41 2000
d3808 1
a3808 1
--- ./src/login.c	Tue Jun 13 16:42:08 2000
d3828 1
a3828 1
--- ./src/main.c	Tue Jun 13 16:42:08 2000
d3912 1
a3912 1
--- ./src/mkmodules.c	Tue Jun 13 16:42:08 2000
d3951 1
a3951 1
--- ./src/mysqlsubr.c	Tue Jun 13 16:42:08 2000
d4034 1
a4034 1
--- ./src/parseinfo.c	Tue Jun 13 16:42:08 2000
d4079 2
a4080 2
*** ./src/patch.c	Tue Jun 13 16:50:10 2000
--- ./src/patch.c	Tue Jun 13 16:42:08 2000
d4082 2
a4083 2
*** 325,330 ****
--- 325,336 ----
d4097 1
a4097 1
*** 354,360 ****
d4100 1
a4100 1
  			   *pargc - 1, argv + 1, local,
d4105 1
a4105 1
--- 360,366 ----
d4108 1
a4108 1
  			   *pargc - 1, argv + 1, local,
d4115 1
a4115 1
--- ./src/rcs.c	Tue Jun 13 16:42:08 2000
d4135 1
a4135 1
--- ./src/recurse.c	Tue Jun 13 16:42:08 2000
d4277 1
a4277 1
--- ./src/remove.c	Tue Jun 13 16:42:08 2000
d4314 2
a4315 2
*** ./src/rtag.c	Wed Dec 23 09:15:01 1998
--- ./src/rtag.c	Tue Jun 13 16:42:08 2000
d4317 1
a4317 1
*** 316,322 ****
d4320 1
a4320 1
                             *pargc - 1, argv + 1, local, which, 0, 1,
d4325 1
a4325 1
--- 316,322 ----
d4328 1
a4328 1
                             *pargc - 1, argv + 1, local, which, 0, 1,
d4334 1
a4334 1
*** 327,333 ****
d4337 1
a4337 1
  			   *pargc - 1, argv + 1, local,
d4342 1
a4342 1
--- 327,333 ----
d4345 1
a4345 1
  			   *pargc - 1, argv + 1, local,
d4352 1
a4352 1
--- ./src/scramble.c	Tue Jun 13 16:42:08 2000
d4428 2
a4429 2
*** ./src/server.c	Thu Jun  8 08:35:53 2000
--- ./src/server.c	Tue Jun 13 16:42:08 2000
d4776 1
a4776 1
--- ./src/status.c	Tue Jun 13 16:42:08 2000
d4795 2
a4796 2
*** ./src/tag.c	Tue Jun 13 16:50:11 2000
--- ./src/tag.c	Tue Jun 13 16:42:08 2000
d4850 1
a4850 1
--- ./src/update.c	Tue Jun 13 16:42:08 2000
d4923 1
a4923 1
--- ./src/watch.c	Tue Jun 13 16:42:08 2000
@


1.10
log
@local_auth.c:
(find_tigris_privs_query): return number of rows found.
(find_tigris_privs): use new return value above to determine whether
perms == 0 after a query is to be trusted, or if it just means that
the query found no rows.  If the latter, then continue with a more
appropriate query, until we have some perms we can trust.

mysqlsubr.c:
removed JimB's name from the top.  He swears he never
wrote this file, and the coding style was nothing like his.  Probably
somebody just copied and pasted a copyright notice from some other
file and didn't bother to remove his name.  Sheesh.
@
text
@d2 2
a3 2
*** ./config.h.in	Tue Jun  2 10:29:50 1998
--- ./config.h.in	Sat Jun 10 11:23:13 2000
d17 2
a18 2
*** ./configure	Thu Feb 17 10:41:22 2000
--- ./configure	Sat Jun 10 11:23:13 2000
d2706 2
a2707 2
*** ./configure.in	Thu Feb 17 10:41:22 2000
--- ./configure.in	Sat Jun 10 11:23:13 2000
a2782 3121
diff --exclude=CVS -crN ../pristine-ccvs/contrib/clmerge ./contrib/clmerge
*** ./contrib/clmerge	Wed Dec 31 16:00:00 1969
--- ./contrib/clmerge	Sat Jun 10 11:25:36 2000
***************
*** 0 ****
--- 1,152 ----
+ #! /usr/bin/perl
+ 
+ # Merge conflicted ChangeLogs
+ # tromey Mon Aug 15 1994
+ 
+ # Usage is:
+ #
+ #	cl-merge [-i] file ...
+ #
+ # With -i, it works in place (backups put in a ~ file).  Otherwise the
+ # merged ChangeLog is printed to stdout.
+ 
+ # Please report any bugs to me.  I wrote this yesterday, so there are no
+ # guarantees about its performance.  I recommend checking its output
+ # carefully.  If you do send a bug report, please include the failing
+ # ChangeLog, so I can include it in my test suite.
+ #
+ # Tom
+ # ---
+ # tromey@@busco.lanl.gov             Member, League for Programming Freedom
+ # Sadism and farce are always inexplicably linked.
+ #	-- Alexander Theroux
+ 
+ 
+ # Month->number mapping.  Used for sorting.
+ %months = ('Jan', 0,
+ 	   'Feb', 1,
+ 	   'Mar', 2,
+ 	   'Apr', 3,
+ 	   'May', 4,
+ 	   'Jun', 5,
+ 	   'Jul', 6,
+ 	   'Aug', 7,
+ 	   'Sep', 8,
+ 	   'Oct', 9,
+ 	   'Nov', 10,
+ 	   'Dec', 11);
+ 
+ # If '-i' is given, do it in-place.
+ if ($ARGV[0] eq '-i') {
+     shift (@@ARGV);
+     $^I = '~';
+ }
+ 
+ $lastkey = '';
+ $lastval = '';
+ $conf = 0;
+ %conflist = ();
+ 
+ $tjd = 0;
+ 
+ # Simple state machine.  The states:
+ #
+ # 0	Not in conflict.  Just copy input to output.
+ # 1	Beginning an entry.  Next non-blank line is key.
+ # 2	In entry.  Entry beginner transitions to state 1.
+ while (<>) {
+     if (/^<<<</ || /^====/) {
+ 	# Start of a conflict.
+ 
+ 	# Copy last key into array.
+ 	if ($lastkey ne '') {
+ 	    $conflist{$lastkey} = $lastval;
+ 
+ 	    $lastkey = '';
+ 	    $lastval = '';
+ 	}
+ 
+ 	$conf = 1;
+     } elsif (/^>>>>/) {
+ 	# End of conflict.  Output.
+ 
+ 	# Copy last key into array.
+ 	if ($lastkey ne '') {
+ 	    $conflist{$lastkey} = $lastval;
+ 
+ 	    $lastkey = '';
+ 	    $lastval = '';
+ 	}
+ 
+ 	foreach (reverse sort clcmp keys %conflist) {
+ 	    print STDERR "doing $_" if $tjd;
+ 	    print $_;
+ 	    print $conflist{$_};
+ 	}
+ 
+ 	$lastkey = '';
+ 	$lastval = '';
+ 	$conf = 0;
+ 	%conflist = ();
+     } elsif ($conf == 1) {
+ 	# Beginning an entry.  Skip empty lines.  Error if not a real
+ 	# beginner.
+ 	if (/^$/) {
+ 	    # Empty line; just skip at this point.
+ 	} elsif (/^[MTWFS]/) {
+ 	    # Looks like the name of a day; assume opener and move to
+ 	    # "in entry" state.
+ 	    $lastkey = $_;
+ 	    $conf = 2;
+ 	    print STDERR "found $_" if $tjd;
+ 	} else {
+ 	    die ("conflict crosses entry boundaries: $_");
+ 	}
+     } elsif ($conf == 2) {
+ 	# In entry.  Copy into variable until we see beginner line.
+ 	if (/^[MTWFS]/) {
+ 	    # Entry beginner line.
+ 
+ 	    # Copy last key into array.
+ 	    if ($lastkey ne '') {
+ 		$conflist{$lastkey} = $lastval;
+ 
+ 		$lastkey = '';
+ 		$lastval = '';
+ 	    }
+ 
+ 	    $lastkey = $_;
+ 	    print STDERR "found $_" if $tjd;
+ 	    $lastval = '';
+ 	} else {
+ 	    $lastval .= $_;
+ 	}
+     } else {
+ 	# Just copy.
+ 	print;
+     }
+ }
+ 
+ # Compare ChangeLog time strings like <=>.
+ #
+ # 0         1         2         3
+ # Thu Aug 11 13:22:42 1994  Tom Tromey  (tromey@@creche.colorado.edu)
+ # 0123456789012345678901234567890
+ #
+ sub clcmp {
+     # First check year.
+     $r = substr ($a, 20, 4) <=> substr ($b, 20, 4);
+ 
+     # Now check month.
+     $r = $months{substr ($a, 4, 3)} <=> $months{substr ($b, 4, 3)} if !$r;
+ 
+     # Now check day.
+     $r = substr ($a, 8, 2) <=> substr ($b, 8, 2) if !$r;
+ 
+     # Now check time (3 parts).
+     $r = substr ($a, 11, 2) <=> substr ($b, 11, 2) if !$r;
+     $r = substr ($a, 14, 2) <=> substr ($b, 14, 2) if !$r;
+     $r = substr ($a, 17, 2) <=> substr ($b, 17, 2) if !$r;
+ 
+     $r;
+ }
diff --exclude=CVS -crN ../pristine-ccvs/contrib/cln_hist ./contrib/cln_hist
*** ./contrib/cln_hist	Wed Dec 31 16:00:00 1969
--- ./contrib/cln_hist	Sat Jun 10 11:25:36 2000
***************
*** 0 ****
--- 1,91 ----
+ #! /usr/bin/perl
+ # -*-Perl-*-
+ #
+ # Contributed by David G. Grubbs <dgg@@ksr.com>
+ #
+ # Clean up the history file.  10 Record types: MAR OFT WUCG
+ #
+ # WUCG records are thrown out.
+ # MAR records are retained.
+ # T records: retain only last tag with same combined tag/module.
+ #
+ # Two passes:  Walk through the first time and remember the
+ #	1. Last Tag record with same "tag" and "module" names.
+ #	2. Last O record with unique user/module/directory, unless followed
+ #	   by a matching F record.
+ #
+ 
+ $r = $ENV{"CVSROOT"};
+ $c = "$r/CVSROOT";
+ $h = "$c/history";
+ 
+ eval "print STDERR \$die='Unknown parameter $1\n' if !defined \$$1; \$$1=\$';"
+     while ($ARGV[0] =~ /^(\w+)=/ && shift(@@ARGV));
+ exit 255 if $die;               # process any variable=value switches
+ 
+ %tags = ();
+ %outs = ();
+ 
+ #
+ # Move history file to safe place and re-initialize a new one.
+ #
+ rename($h, "$h.bak");
+ open(XX, ">$h");
+ close(XX);
+ 
+ #
+ # Pass1 -- remember last tag and checkout.
+ #
+ open(HIST, "$h.bak");
+ while (<HIST>) {
+     next if /^[MARWUCG]/;
+ 
+     # Save whole line keyed by tag|module
+     if (/^T/) {
+ 	@@tmp = split(/\|/, $_);
+ 	$tags{$tmp[4] . '|' . $tmp[5]} = $_;
+     }
+     # Save whole line
+     if (/^[OF]/) {
+ 	@@tmp = split(/\|/, $_);
+ 	$outs{$tmp[1] . '|' . $tmp[2] . '|' . $tmp[5]} = $_;
+     }
+ }
+ 
+ #
+ # Pass2 -- print out what we want to save.
+ #
+ open(SAVE, ">$h.work");
+ open(HIST, "$h.bak");
+ while (<HIST>) {
+     next if /^[FWUCG]/;
+ 
+     # If whole line matches saved (i.e. "last") one, print it.
+     if (/^T/) {
+ 	@@tmp = split(/\|/, $_);
+ 	next if $tags{$tmp[4] . '|' . $tmp[5]} ne $_;
+     }
+     # Save whole line
+     if (/^O/) {
+ 	@@tmp = split(/\|/, $_);
+ 	next if $outs{$tmp[1] . '|' . $tmp[2] . '|' . $tmp[5]} ne $_;
+     }
+ 
+     print SAVE $_;
+ }
+ 
+ #
+ # Put back the saved stuff
+ #
+ system "cat $h >> $h.work";
+ 
+ if (-s $h) {
+     rename ($h, "$h.interim");
+     print "history.interim has non-zero size.\n";
+ } else {
+     unlink($h);
+ }
+ 
+ rename ("$h.work", $h);
+ 
+ exit(0);
diff --exclude=CVS -crN ../pristine-ccvs/contrib/commit_prep ./contrib/commit_prep
*** ./contrib/commit_prep	Wed Dec 31 16:00:00 1969
--- ./contrib/commit_prep	Sat Jun 10 11:25:36 2000
***************
*** 0 ****
--- 1,215 ----
+ #! /usr/bin/perl
+ # -*-Perl-*-
+ #
+ #
+ # Perl filter to handle pre-commit checking of files.  This program
+ # records the last directory where commits will be taking place for
+ # use by the log_accum.pl script.  For new files, it forces the
+ # existence of a RCS "Id" keyword in the first ten lines of the file.
+ # For existing files, it checks version number in the "Id" line to
+ # prevent losing changes because an old version of a file was copied
+ # into the direcory.
+ #
+ # Possible future enhancements:
+ #
+ #    Check for cruft left by unresolved conflicts.  Search for
+ #    "^<<<<<<<$", "^-------$", and "^>>>>>>>$".
+ #
+ #    Look for a copyright and automagically update it to the
+ #    current year.  [[ bad idea!  -- woods ]]
+ #
+ #
+ # Contributed by David Hampton <hampton@@cisco.com>
+ #
+ # Hacked on lots by Greg A. Woods <woods@@web.net>
+ 
+ #
+ #	Configurable options
+ #
+ 
+ # Constants (remember to protect strings from RCS keyword substitution)
+ #
+ $LAST_FILE     = "/tmp/#cvs.lastdir"; # must match name in log_accum.pl
+ $ENTRIES       = "CVS/Entries";
+ 
+ # Patterns to find $Log keywords in files
+ #
+ $LogString1 = "\\\$\\Log: .* \\\$";
+ $LogString2 = "\\\$\\Log\\\$";
+ $NoLog = "%s - contains an RCS \$Log keyword.  It must not!\n";
+ 
+ # pattern to match an RCS Id keyword line with an existing ID
+ #
+ $IDstring = "\"@@\\(#\\)[^:]*:.*\\\$\Id: .*\\\$\"";
+ $NoId = "
+ %s - Does not contain a properly formatted line with the keyword \"Id:\".
+ 	I.e. no lines match \"" . $IDstring . "\".
+ 	Please see the template files for an example.\n";
+ 
+ # pattern to match an RCS Id keyword line for a new file (i.e. un-expanded)
+ #
+ $NewId = "\"@@(#)[^:]*:.*\\$\Id\\$\"";
+ 
+ $NoName = "
+ %s - The ID line should contain only \"@@(#)module/path:\$Name\$:\$\Id\$\"
+ 	for a newly created file.\n";
+ 
+ $BadName = "
+ %s - The file name '%s' in the ID line does not match
+ 	the actual filename.\n";
+ 
+ $BadVersion = "
+ %s - How dare you!!!  You replaced your copy of the file '%s',
+ 	which was based upon version %s, with an %s version based
+ 	upon %s.  Please move your '%s' out of the way, perform an
+ 	update to get the current version, and them merge your changes
+ 	into that file, then try the commit again.\n";
+ 
+ #
+ #	Subroutines
+ #
+ 
+ sub write_line {
+     local($filename, $line) = @@_;
+     open(FILE, ">$filename") || die("Cannot open $filename, stopped");
+     print(FILE $line, "\n");
+     close(FILE);
+ }
+ 
+ sub check_version {
+     local($i, $id, $rname, $version);
+     local($filename, $cvsversion) = @@_;
+ 
+     open(FILE, "<$filename") || return(0);
+ 
+     @@all_lines = ();
+     $idpos = -1;
+     $newidpos = -1;
+     for ($i = 0; <FILE>; $i++) {
+ 	chop;
+ 	push(@@all_lines, $_);
+ 	if ($_ =~ /$IDstring/) {
+ 	    $idpos = $i;
+ 	}
+ 	if ($_ =~ /$NewId/) {
+ 	    $newidpos = $i;
+ 	}
+     }
+ 
+     if (grep(/$LogString1/, @@all_lines) || grep(/$LogString2/, @@all_lines)) {
+ 	print STDERR sprintf($NoLog, $filename);
+ 	return(1);
+     }
+ 
+     if ($debug != 0) {
+ 	print STDERR sprintf("file = %s, version = %d.\n", $filename, $cvsversion{$filename});
+     }
+ 
+     if ($cvsversion{$filename} == 0) {
+ 	if ($newidpos != -1 && $all_lines[$newidpos] !~ /$NewId/) {
+ 	    print STDERR sprintf($NoName, $filename);
+ 	    return(1);
+ 	}
+ 	return(0);
+     }
+ 
+     if ($idpos == -1) {
+ 	print STDERR sprintf($NoId, $filename);
+ 	return(1);
+     }
+ 
+     $line = $all_lines[$idpos];
+     $pos = index($line, "Id: ");
+     if ($debug != 0) {
+ 	print STDERR sprintf("%d in '%s'.\n", $pos, $line);
+     }
+     ($id, $rname, $version) = split(' ', substr($line, $pos));
+     if ($rname ne "$filename,v") {
+ 	print STDERR sprintf($BadName, $filename, substr($rname, 0, length($rname)-2));
+ 	return(1);
+     }
+     if ($cvsversion{$filename} < $version) {
+ 	print STDERR sprintf($BadVersion, $filename, $filename, $cvsversion{$filename},
+ 			     "newer", $version, $filename);
+ 	return(1);
+     }
+     if ($cvsversion{$filename} > $version) {
+ 	print STDERR sprintf($BadVersion, $filename, $filename, $cvsversion{$filename},
+ 			     "older", $version, $filename);
+ 	return(1);
+     }
+     return(0);
+ }
+ 
+ #
+ #	Main Body	
+ #
+ 
+ $id = getpgrp();		# You *must* use a shell that does setpgrp()!
+ 
+ # Check each file (except dot files) for an RCS "Id" keyword.
+ #
+ $check_id = 0;
+ 
+ # Record the directory for later use by the log_accumulate stript.
+ #
+ $record_directory = 0;
+ 
+ # parse command line arguments
+ #
+ while (@@ARGV) {
+     $arg = shift @@ARGV;
+ 
+     if ($arg eq '-d') {
+ 	$debug = 1;
+ 	print STDERR "Debug turned on...\n";
+     } elsif ($arg eq '-c') {
+ 	$check_id = 1;
+     } elsif ($arg eq '-r') {
+ 	$record_directory = 1;
+     } else {
+ 	push(@@files, $arg);
+     }
+ }
+ 
+ $directory = shift @@files;
+ 
+ if ($debug != 0) {
+     print STDERR "dir   - ", $directory, "\n";
+     print STDERR "files - ", join(":", @@files), "\n";
+     print STDERR "id    - ", $id, "\n";
+ }
+ 
+ # Suck in the CVS/Entries file
+ #
+ open(ENTRIES, $ENTRIES) || die("Cannot open $ENTRIES.\n");
+ while (<ENTRIES>) {
+     local($filename, $version) = split('/', substr($_, 1));
+     $cvsversion{$filename} = $version;
+ }
+ 
+ # Now check each file name passed in, except for dot files.  Dot files
+ # are considered to be administrative files by this script.
+ #
+ if ($check_id != 0) {
+     $failed = 0;
+     foreach $arg (@@files) {
+ 	if (index($arg, ".") == 0) {
+ 	    next;
+ 	}
+ 	$failed += &check_version($arg);
+     }
+     if ($failed) {
+ 	print STDERR "\n";
+ 	exit(1);
+     }
+ }
+ 
+ # Record this directory as the last one checked.  This will be used
+ # by the log_accumulate script to determine when it is processing
+ # the final directory of a multi-directory commit.
+ #
+ if ($record_directory != 0) {
+     &write_line("$LAST_FILE.$id", $directory);
+ }
+ exit(0);
diff --exclude=CVS -crN ../pristine-ccvs/contrib/cvs2vendor ./contrib/cvs2vendor
*** ./contrib/cvs2vendor	Wed Dec 31 16:00:00 1969
--- ./contrib/cvs2vendor	Sat Jun 10 11:25:36 2000
***************
*** 0 ****
--- 1,142 ----
+ #! /bin/sh
+ #
+ #	cvs2vendor - move revsisions from files in A to files in B
+ # 
+ # The primary reason for this script is to move deltas from a
+ # non-vendor branched repository onto a fresh vendor branched one,
+ # skipping the initial checkin in assumption that it is the same in
+ # both repositories.  This way you can take a project that was moved
+ # into CVS without the benefit of the vendor branch and for all
+ # intents and purposes add the vendor branch underneath the existing
+ # deltas.
+ # 
+ # This script is also a decent example of repository maintenance using
+ # raw RCS commands (if I do say so myself! ;-).
+ # 
+ # Tags are preserved.
+ # 
+ # The timestamp of the initial vendor branch revision will be adjusted
+ # to be the same as the 1.1 revision of each source file.
+ # 
+ # Extra branches in the source directory will cause breakage.
+ # 
+ # Intermediate files are created in the current working directory
+ # where this script is started.
+ # 
+ # Written by Greg A. Woods <woods@@planix.com>, based on rcs2sccs
+ # (retains some of the rlog parsing from it).
+ # 
+ # The copyright is in the Public Domain.
+ #
+ 
+ if [ $# -ne 2 ]; then
+ 	echo USAGE: $0 srcdir dstdir
+ 	exit 2
+ fi
+ tsrcdir=$1
+ tdstdir=$2
+ 
+ revfile=/tmp/cvs2vendor_$$_rev
+ rm -f $revfile
+ 
+ commentfile=/tmp/cvs2vendor_$$_comment
+ rm -f $commentfile
+ 
+ srcdirs=`cd $tsrcdir && find . -type d -print | sed 's~^\.[/]*~~'`
+ 
+ # the "" is a trick to get $tsrcdir itself without resorting to '.'
+ for ldir in "" $srcdirs; do
+ 
+ 	srcdir=$tsrcdir/$ldir
+ 	dstdir=$tdstdir/$ldir
+ 
+ 	# Loop over every RCS file in srcdir
+ 	#
+ 	for vfile in $srcdir/*,v; do
+ 		# get rid of the ",v" at the end of the name
+ 		file=`echo $vfile | sed -e 's/,v$//'`
+ 		bfile=`basename $file`
+ 
+ 		if [ ! -d $dstdir ]; then
+ 			echo "making locally added directory $dstdir"
+ 			mkdir -p $dstdir
+ 		fi
+ 		if [ ! -f $dstdir/$bfile,v ]; then
+ 			echo "copying locally added file $dstdir/$bfile ..."
+ 			cp $vfile $dstdir
+ 			continue;
+ 		fi
+ 
+ 		# work on each rev of that file in ascending order
+ 		rlog $file | grep "^revision [0-9][0-9]*\." | awk '{print $2}' | sed -e 's/\./ /g' | sort -n -u +0 +1 +2 +3 +4 +5 +6 +7 +8 | sed -e 's/ /./g' > $revfile
+ 
+ 		for rev in `cat $revfile`; do
+ 
+ 			case "$rev" in
+ 			1.1)
+ 				newdate=`rlog -r$rev $file | grep "^date: " | awk '{printf("%s.%s\n",$2,$3); exit}' | sed -e 's~/~.~g' -e 's/:/./g' -e 's/;//' -e 's/^19//'`
+ 				olddate=`rlog -r1.1.1.1 $dstdir/$bfile | grep "^date: " | awk '{printf("%s.%s\n",$2,$3); exit}' | sed -e 's~/~.~g' -e 's/:/./g' -e 's/;//' -e 's/^19//'`
+ 				sed "s/$olddate/$newdate/" < $dstdir/$bfile,v > $dstdir/$bfile.x
+ 				mv -f $dstdir/$bfile.x $dstdir/$bfile,v
+ 				chmod -w $dstdir/$bfile,v
+ 				symname=`rlog -h $file | sed -e '1,/^symbolic names:/d' -e 's/[ 	]*//g' | awk -F: '$2 == "'"$rev"'" {printf("-n%s:1.1.1.1\n",$1)}'`
+ 				if [ -n "$symname" ]; then
+ 					echo "tagging $file with $symname ..."
+ 					rcs $symname $dstdir/$bfile,v
+ 					if [ $? != 0 ]; then
+ 						echo ERROR - rcs $symname $dstdir/$bfile,v
+ 						exit 1
+ 					fi
+ 				fi
+ 				continue			# skip first rev....
+ 				;;
+ 			esac
+ 
+ 			# get a lock on the destination local branch tip revision
+ 			co -r1 -l $dstdir/$bfile
+ 			if [ $? != 0 ]; then
+ 				echo ERROR - co -r1 -l $dstdir/$bfile
+ 				exit 1
+ 			fi
+ 			rm -f $dstdir/$bfile
+ 
+ 			# get file into current dir and get stats
+ 			date=`rlog -r$rev $file | grep "^date: " | awk '{printf("%s %s\n",$2,$3); exit}' | sed -e 's/;//'`
+ 			author=`rlog -r$rev $file | grep "^date: " | awk '{print $5; exit}' | sed -e 's/;//'`
+ 
+ 			symname=`rlog -h $file | sed -e '1,/^symbolic names:/d' -e 's/[ 	]*//g' | awk -F: '$2 == "'"$rev"'" {printf("-n%s\n",$1)}'`
+ 
+ 			rlog -r$rev $file | sed -e '/^branches: /d' -e '1,/^date: /d' -e '/^===========/d' | awk '{if ((total += length($0) + 1) < 510) print $0}' > $commentfile
+ 
+ 			echo "==> file $file, rev=$rev, date=$date, author=$author $symname"
+ 
+ 			co -p -r$rev $file > $bfile
+ 			if [ $? != 0 ]; then
+ 				echo ERROR - co -p -r$rev $file
+ 				exit 1
+ 			fi
+ 
+ 			# check file into vendor repository...
+ 			ci -f -m"`cat $commentfile`" -d"$date" $symname -w"$author" $bfile $dstdir/$bfile,v
+ 			if [ $? != 0 ]; then
+ 				echo ERROR - ci -f -m"`cat $commentfile`" -d"$date" $symname -w"$author" $bfile $dstdir/$bfile,v
+ 				exit 1
+ 			fi
+ 			rm -f $bfile
+ 
+ 			# set the default branch to the trunk...
+ 			# XXX really only need to do this once....
+ 			rcs -b1 $dstdir/$bfile
+ 			if [ $? != 0 ]; then
+ 				echo ERROR - rcs -b1 $dstdir/$bfile
+ 				exit 1
+ 			fi
+ 		done
+ 	done
+ done
+ 
+ echo cleaning up...
+ rm -f $commentfile
+ echo "       Conversion Completed Successfully"
+ 
+ exit 0
diff --exclude=CVS -crN ../pristine-ccvs/contrib/cvs_acls ./contrib/cvs_acls
*** ./contrib/cvs_acls	Wed Dec 31 16:00:00 1969
--- ./contrib/cvs_acls	Sat Jun 10 11:25:36 2000
***************
*** 0 ****
--- 1,141 ----
+ #! /usr/bin/perl
+ # -*-Perl-*-
+ #
+ # Access control lists for CVS.  dgg@@ksr.com (David G. Grubbs)
+ #
+ # CVS "commitinfo" for matching repository names, running the program it finds
+ # on the same line.  More information is available in the CVS man pages.
+ #
+ # ==== INSTALLATION:
+ #
+ # To use this program as I intended, do the following four things:
+ #
+ # 0. Install PERL.  :-)
+ #
+ # 1. Put one line, as the *only* non-comment line, in your commitinfo file:
+ #
+ #	DEFAULT		/usr/local/bin/cvs_acls
+ #
+ # 2. Install this file as /usr/local/bin/cvs_acls and make it executable.
+ #
+ # 3. Create a file named $CVSROOT/CVSROOT/avail.
+ #
+ # ==== FORMAT OF THE avail FILE:
+ #
+ # The avail file determines whether you may commit files.  It contains lines
+ # read from top to bottom, keeping track of a single "bit".  The "bit"
+ # defaults to "on".  It can be turned "off" by "unavail" lines and "on" by
+ # "avail" lines.  ==> Last one counts.
+ #
+ # Any line not beginning with "avail" or "unavail" is ignored.
+ #
+ # Lines beginning with "avail" or "unavail" are assumed to be '|'-separated
+ # triples: (All spaces and tabs are ignored in a line.)
+ #
+ #   {avail.*,unavail.*} [| user,user,... [| repos,repos,...]]
+ #
+ #    1. String starting with "avail" or "unavail".
+ #    2. Optional, comma-separated list of usernames.
+ #    3. Optional, comma-separated list of repository pathnames.
+ #	These are pathnames relative to $CVSROOT.  They can be directories or
+ #	filenames.  A directory name allows access to all files and
+ #	directories below it.
+ #
+ # Example:  (Text from the ';;' rightward may not appear in the file.)
+ #
+ #	unavail			;; Make whole repository unavailable.
+ #	avail|dgg		;; Except for user "dgg".
+ #	avail|fred, john|bin/ls	;; Except when "fred" or "john" commit to
+ #				;; the module whose repository is "bin/ls"
+ #
+ # PROGRAM LOGIC:
+ #
+ #	CVS passes to @@ARGV an absolute directory pathname (the repository
+ #	appended to your $CVSROOT variable), followed by a list of filenames
+ #	within that directory.
+ #
+ #	We walk through the avail file looking for a line that matches both
+ #	the username and repository.
+ #
+ #	A username match is simply the user's name appearing in the second
+ #	column of the avail line in a space-or-comma separate list.
+ #
+ #	A repository match is either:
+ #		- One element of the third column matches $ARGV[0], or some
+ #		  parent directory of $ARGV[0].
+ #		- Otherwise *all* file arguments ($ARGV[1..$#ARGV]) must be
+ #		  in the file list in one avail line.
+ #	    - In other words, using directory names in the third column of
+ #	      the avail file allows committing of any file (or group of
+ #	      files in a single commit) in the tree below that directory.
+ #	    - If individual file names are used in the third column of
+ #	      the avail file, then files must be committed individually or
+ #	      all files specified in a single commit must all appear in
+ #	      third column of a single avail line.
+ #
+ 
+ $debug = 0;
+ $cvsroot = $ENV{'CVSROOT'};
+ $availfile = $cvsroot . "/CVSROOT/avail";
+ $myname = $ENV{"USER"} if !($myname = $ENV{"LOGNAME"});
+ 
+ eval "print STDERR \$die='Unknown parameter $1\n' if !defined \$$1; \$$1=\$';"
+     while ($ARGV[0] =~ /^(\w+)=/ && shift(@@ARGV));
+ exit 255 if $die;		# process any variable=value switches
+ 
+ die "Must set CVSROOT\n" if !$cvsroot;
+ ($repos = shift) =~ s:^$cvsroot/::;
+ grep($_ = $repos . '/' . $_, @@ARGV);
+ 
+ print "$$ Repos: $repos\n","$$ ==== ",join("\n$$ ==== ",@@ARGV),"\n" if $debug;
+ 
+ $exit_val = 0;				# Good Exit value
+ 
+ $universal_off = 0;
+ open (AVAIL, $availfile) || exit(0);	# It is ok for avail file not to exist
+ while (<AVAIL>) {
+     chop;
+     next if /^\s*\#/;
+     next if /^\s*$/;
+     ($flagstr, $u, $m) = split(/[\s,]*\|[\s,]*/, $_);
+ 
+     # Skip anything not starting with "avail" or "unavail" and complain.
+     (print "Bad avail line: $_\n"), next
+ 	if ($flagstr !~ /^avail/ && $flagstr !~ /^unavail/);
+ 
+     # Set which bit we are playing with. ('0' is OK == Available).
+     $flag = (($& eq "avail") ? 0 : 1);
+ 
+     # If we find a "universal off" flag (i.e. a simple "unavail") remember it
+     $universal_off = 1 if ($flag && !$u && !$m);
+ 
+     # $myname considered "in user list" if actually in list or is NULL
+     $in_user = (!$u || grep ($_ eq $myname, split(/[\s,]+/,$u)));
+     print "$$ \$myname($myname) in user list: $_\n" if $debug && $in_user;
+ 
+     # Module matches if it is a NULL module list in the avail line.  If module
+     # list is not null, we check every argument combination.
+     if (!($in_repo = !$m)) {
+ 	@@tmp = split(/[\s,]+/,$m);
+ 	for $j (@@tmp) {
+ 	    # If the repos from avail is a parent(or equal) dir of $repos, OK
+ 	    $in_repo = 1, last if ($repos eq $j || $repos =~ /^$j\//);
+ 	}
+ 	if (!$in_repo) {
+ 	    $in_repo = 1;
+ 	    for $j (@@ARGV) {
+ 		last if !($in_repo = grep ($_ eq $j, @@tmp));
+ 	    }
+ 	}
+     }
+     print "$$ \$repos($repos) in repository list: $_\n" if $debug && $in_repo;
+ 
+     $exit_val = $flag if ($in_user && $in_repo);
+     print "$$ ==== \$exit_val = $exit_val\n$$ ==== \$flag = $flag\n" if $debug;
+ }
+ close(AVAIL);
+ print "$$ ==== \$exit_val = $exit_val\n" if $debug;
+ print "**** Access denied: Insufficient Karma ($myname|$repos)\n" if $exit_val;
+ print "**** Access allowed: Personal Karma exceeds Environmental Karma.\n"
+ 	if $universal_off && !$exit_val;
+ exit($exit_val);
diff --exclude=CVS -crN ../pristine-ccvs/contrib/cvscheck ./contrib/cvscheck
*** ./contrib/cvscheck	Wed Dec 31 16:00:00 1969
--- ./contrib/cvscheck	Sat Jun 10 11:25:36 2000
***************
*** 0 ****
--- 1,83 ----
+ #! /bin/sh
+ #
+ # cvscheck - identify files added, changed, or removed 
+ #            in CVS working directory
+ #
+ # Contributed by Lowell Skoog <fluke!lowell@@uunet.uu.net>
+ # 
+ # This program should be run in a working directory that has been
+ # checked out using CVS.  It identifies files that have been added,
+ # changed, or removed in the working directory, but not "cvs
+ # committed".  It also determines whether the files have been "cvs
+ # added" or "cvs removed".  For directories, it is only practical to
+ # determine whether they have been added.
+ 
+ name=cvscheck
+ changes=0
+ 
+ # If we can't run CVS commands in this directory
+ cvs status . > /dev/null 2>&1
+ if [ $? != 0 ] ; then
+ 
+     # Bail out
+     echo "$name: there is no version here; bailing out" 1>&2
+     exit 1
+ fi
+ 
+ # Identify files added to working directory
+ for file in .* * ; do
+ 
+     # Skip '.' and '..'
+     if [ $file = '.' -o $file = '..' ] ; then
+ 	continue
+     fi
+ 
+     # If a regular file
+     if [ -f $file ] ; then
+ 	if cvs status $file | grep -s '^From:[ 	]*New file' ; then
+ 	    echo "file added:      $file - not CVS committed"
+ 	    changes=`expr $changes + 1`
+ 	elif cvs status $file | grep -s '^From:[ 	]*no entry for' ; then
+ 	    echo "file added:      $file - not CVS added, not CVS committed"
+ 	    changes=`expr $changes + 1`
+ 	fi
+ 
+     # Else if a directory
+     elif [ -d $file -a $file != CVS.adm ] ; then
+ 
+ 	# Move into it
+ 	cd $file
+ 
+ 	# If CVS commands don't work inside
+ 	cvs status . > /dev/null 2>&1
+ 	if [ $? != 0 ] ; then
+ 	    echo "directory added: $file - not CVS added"
+ 	    changes=`expr $changes + 1`
+ 	fi
+ 
+ 	# Move back up
+ 	cd ..
+     fi
+ done
+ 
+ # Identify changed files
+ changedfiles=`cvs diff | egrep '^diff' | awk '{print $3}'`
+ for file in $changedfiles ; do
+     echo "file changed:    $file - not CVS committed"
+     changes=`expr $changes + 1`
+ done
+ 
+ # Identify files removed from working directory
+ removedfiles=`cvs status | egrep '^File:[ 	]*no file' | awk '{print $4}'`
+ 
+ # Determine whether each file has been cvs removed
+ for file in $removedfiles ; do
+     if cvs status $file | grep -s '^From:[ 	]*-' ; then
+ 	echo "file removed:    $file - not CVS committed"
+     else
+ 	echo "file removed:    $file - not CVS removed, not CVS committed"
+     fi
+     changes=`expr $changes + 1`
+ done
+ 
+ exit $changes
diff --exclude=CVS -crN ../pristine-ccvs/contrib/log ./contrib/log
*** ./contrib/log	Wed Dec 31 16:00:00 1969
--- ./contrib/log	Sat Jun 10 11:25:36 2000
***************
*** 0 ****
--- 1,182 ----
+ #! /usr/bin/perl
+ # -*-Perl-*-
+ #
+ # XXX: FIXME: handle multiple '-f logfile' arguments
+ #
+ # XXX -- I HATE Perl!  This *will* be re-written in shell/awk/sed soon!
+ #
+ 
+ # Usage:  log.pl [-u user] [[-m mailto] ...] [-s] -f logfile 'dirname file ...'
+ #
+ #	-u user		- $USER passed from loginfo
+ #	-m mailto	- for each user to receive cvs log reports
+ #			(multiple -m's permitted)
+ #	-s		- to prevent "cvs status -v" messages
+ #	-f logfile	- for the logfile to append to (mandatory,
+ #			but only one logfile can be specified).
+ 
+ # here is what the output looks like:
+ #
+ #    From: woods@@kuma.domain.top
+ #    Subject: CVS update: testmodule
+ #
+ #    Date: Wednesday November 23, 1994 @@ 14:15
+ #    Author: woods
+ #
+ #    Update of /local/src-CVS/testmodule
+ #    In directory kuma:/home/kuma/woods/work.d/testmodule
+ #    
+ #    Modified Files:
+ #    	test3 
+ #    Added Files:
+ #    	test6 
+ #    Removed Files:
+ #    	test4 
+ #    Log Message:
+ #    - wow, what a test
+ #
+ # (and for each file the "cvs status -v" output is appended unless -s is used)
+ #
+ #    ==================================================================
+ #    File: test3           	Status: Up-to-date
+ #    
+ #       Working revision:	1.41	Wed Nov 23 14:15:59 1994
+ #       Repository revision:	1.41	/local/src-CVS/cvs/testmodule/test3,v
+ #       Sticky Options:	-ko
+ #    
+ #       Existing Tags:
+ #    	local-v2                 	(revision: 1.7)
+ #    	local-v1                 	(revision: 1.1.1.2)
+ #    	CVS-1_4A2                	(revision: 1.1.1.2)
+ #    	local-v0                 	(revision: 1.2)
+ #    	CVS-1_4A1                	(revision: 1.1.1.1)
+ #    	CVS                      	(branch: 1.1.1)
+ 
+ $cvsroot = $ENV{'CVSROOT'};
+ 
+ # turn off setgid
+ #
+ $) = $(;
+ 
+ $dostatus = 1;
+ 
+ # parse command line arguments
+ #
+ while (@@ARGV) {
+         $arg = shift @@ARGV;
+ 
+ 	if ($arg eq '-m') {
+                 $users = "$users " . shift @@ARGV;
+ 	} elsif ($arg eq '-u') {
+ 		$login = shift @@ARGV;
+ 	} elsif ($arg eq '-f') {
+ 		($logfile) && die "Too many '-f' args";
+ 		$logfile = shift @@ARGV;
+ 	} elsif ($arg eq '-s') {
+ 		$dostatus = 0;
+ 	} else {
+ 		($donefiles) && die "Too many arguments!\n";
+ 		$donefiles = 1;
+ 		@@files = split(/ /, $arg);
+ 	}
+ }
+ 
+ # the first argument is the module location relative to $CVSROOT
+ #
+ $modulepath = shift @@files;
+ 
+ $mailcmd = "| Mail -s 'CVS update: $modulepath'";
+ 
+ # Initialise some date and time arrays
+ #
+ @@mos = (January,February,March,April,May,June,July,August,September,
+         October,November,December);
+ @@days = (Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);
+ 
+ ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;
+ $year += 1900;
+ 
+ # get a login name for the guy doing the commit....
+ #
+ if ($login eq '') {
+ 	$login = getlogin || (getpwuid($<))[0] || "nobody";
+ }
+ 
+ # open log file for appending
+ #
+ open(OUT, ">>" . $logfile) || die "Could not open(" . $logfile . "): $!\n";
+ 
+ # send mail, if there's anyone to send to!
+ #
+ if ($users) {
+ 	$mailcmd = "$mailcmd $users";
+ 	open(MAIL, $mailcmd) || die "Could not Exec($mailcmd): $!\n";
+ }
+ 
+ # print out the log Header
+ # 
+ print OUT "\n";
+ print OUT "****************************************\n";
+ print OUT "Date:\t$days[$wday] $mos[$mon] $mday, $year @@ $hour:" . sprintf("%02d", $min) . "\n";
+ print OUT "Author:\t$login\n\n";
+ 
+ if (MAIL) {
+ 	print MAIL "\n";
+ 	print MAIL "Date:\t$days[$wday] $mos[$mon] $mday, $year @@ $hour:" . sprintf("%02d", $min) . "\n";
+ 	print MAIL "Author:\t$login\n\n";
+ }
+ 
+ # print the stuff from logmsg that comes in on stdin to the logfile
+ #
+ open(IN, "-");
+ while (<IN>) {
+ 	print OUT $_;
+ 	if (MAIL) {
+ 		print MAIL $_;
+ 	}
+ }
+ close(IN);
+ 
+ print OUT "\n";
+ 
+ # after log information, do an 'cvs -Qq status -v' on each file in the arguments.
+ #
+ if ($dostatus != 0) {
+ 	while (@@files) {
+ 		$file = shift @@files;
+ 		if ($file eq "-") {
+ 			print OUT "[input file was '-']\n";
+ 			if (MAIL) {
+ 				print MAIL "[input file was '-']\n";
+ 			}
+ 			last;
+ 		}
+ 		$pid = open(RCS, "-|");
+ 		if ( !defined $pid )
+ 		{
+ 			die "fork failed: $!";
+ 		}
+ 		if ($pid == 0)
+ 		{
+ 			exec 'cvs', '-nQq', 'status', '-v', $file;
+ 			die "cvs exec failed: $!";
+ 		}
+ 		while (<RCS>) {
+ 			print OUT;
+ 			if (MAIL) {
+ 				print MAIL;
+ 			}
+ 		}
+ 		close(RCS);
+ 	}
+ }
+ 
+ close(OUT);
+ die "Write to $logfile failed" if $?;
+ 
+ close(MAIL);
+ die "Pipe to $mailcmd failed" if $?;
+ 
+ ## must exit cleanly
+ ##
+ exit 0;
diff --exclude=CVS -crN ../pristine-ccvs/contrib/log_accum ./contrib/log_accum
*** ./contrib/log_accum	Wed Dec 31 16:00:00 1969
--- ./contrib/log_accum	Sat Jun 10 11:25:36 2000
***************
*** 0 ****
--- 1,576 ----
+ #! /usr/bin/perl
+ # -*-Perl-*-
+ #
+ # Perl filter to handle the log messages from the checkin of files in
+ # a directory.  This script will group the lists of files by log
+ # message, and mail a single consolidated log message at the end of
+ # the commit.
+ #
+ # This file assumes a pre-commit checking program that leaves the
+ # names of the first and last commit directories in a temporary file.
+ #
+ # Contributed by David Hampton <hampton@@cisco.com>
+ #
+ # hacked greatly by Greg A. Woods <woods@@planix.com>
+ 
+ # Usage: log_accum.pl [-d] [-s] [-w] [-M module] [-u user] [[-m mailto] ...] [[-R replyto] ...] [-f logfile]
+ #	-d		- turn on debugging
+ #	-m mailto	- send mail to "mailto" (multiple)
+ #	-R replyto	- set the "Reply-To:" to "replyto" (multiple)
+ #	-M modulename	- set module name to "modulename"
+ #	-f logfile	- write commit messages to logfile too
+ #	-s		- *don't* run "cvs status -v" for each file
+ #	-w		- show working directory with log message
+ #	-u user		- $USER passed from loginfo
+ 
+ #
+ #	Configurable options
+ #
+ 
+ # set this to something that takes a whole message on stdin
+ $MAILER	       = "/usr/lib/sendmail -t";
+ 
+ #
+ #	End user configurable options.
+ #
+ 
+ # Constants (don't change these!)
+ #
+ $STATE_NONE    = 0;
+ $STATE_CHANGED = 1;
+ $STATE_ADDED   = 2;
+ $STATE_REMOVED = 3;
+ $STATE_LOG     = 4;
+ 
+ $LAST_FILE     = "/tmp/#cvs.lastdir";
+ 
+ $CHANGED_FILE  = "/tmp/#cvs.files.changed";
+ $ADDED_FILE    = "/tmp/#cvs.files.added";
+ $REMOVED_FILE  = "/tmp/#cvs.files.removed";
+ $LOG_FILE      = "/tmp/#cvs.files.log";
+ 
+ $FILE_PREFIX   = "#cvs.files";
+ 
+ #
+ #	Subroutines
+ #
+ 
+ sub cleanup_tmpfiles {
+     local($wd, @@files);
+ 
+     $wd = `pwd`;
+     chdir("/tmp") || die("Can't chdir('/tmp')\n");
+     opendir(DIR, ".");
+     push(@@files, grep(/^$FILE_PREFIX\..*\.$id$/, readdir(DIR)));
+     closedir(DIR);
+     foreach (@@files) {
+ 	unlink $_;
+     }
+     unlink $LAST_FILE . "." . $id;
+ 
+     chdir($wd);
+ }
+ 
+ sub write_logfile {
+     local($filename, @@lines) = @@_;
+ 
+     open(FILE, ">$filename") || die("Cannot open log file $filename.\n");
+     print FILE join("\n", @@lines), "\n";
+     close(FILE);
+ }
+ 
+ sub append_to_logfile {
+     local($filename, @@lines) = @@_;
+ 
+     open(FILE, ">$filename") || die("Cannot open log file $filename.\n");
+     print FILE join("\n", @@lines), "\n";
+     close(FILE);
+ }
+ 
+ sub format_names {
+     local($dir, @@files) = @@_;
+     local(@@lines);
+ 
+     $format = "\t%-" . sprintf("%d", length($dir)) . "s%s ";
+ 
+     $lines[0] = sprintf($format, $dir, ":");
+ 
+     if ($debug) {
+ 	print STDERR "format_names(): dir = ", $dir, "; files = ", join(":", @@files), ".\n";
+     }
+     foreach $file (@@files) {
+ 	if (length($lines[$#lines]) + length($file) > 65) {
+ 	    $lines[++$#lines] = sprintf($format, " ", " ");
+ 	}
+ 	$lines[$#lines] .= $file . " ";
+     }
+ 
+     @@lines;
+ }
+ 
+ sub format_lists {
+     local(@@lines) = @@_;
+     local(@@text, @@files, $lastdir);
+ 
+     if ($debug) {
+ 	print STDERR "format_lists(): ", join(":", @@lines), "\n";
+     }
+     @@text = ();
+     @@files = ();
+     $lastdir = shift @@lines;	# first thing is always a directory
+     if ($lastdir !~ /.*\/$/) {
+ 	die("Damn, $lastdir doesn't look like a directory!\n");
+     }
+     foreach $line (@@lines) {
+ 	if ($line =~ /.*\/$/) {
+ 	    push(@@text, &format_names($lastdir, @@files));
+ 	    $lastdir = $line;
+ 	    @@files = ();
+ 	} else {
+ 	    push(@@files, $line);
+ 	}
+     }
+     push(@@text, &format_names($lastdir, @@files));
+ 
+     @@text;
+ }
+ 
+ sub append_names_to_file {
+     local($filename, $dir, @@files) = @@_;
+ 
+     if (@@files) {
+ 	open(FILE, ">>$filename") || die("Cannot open file $filename.\n");
+ 	print FILE $dir, "\n";
+ 	print FILE join("\n", @@files), "\n";
+ 	close(FILE);
+     }
+ }
+ 
+ sub read_line {
+     local($line);
+     local($filename) = @@_;
+ 
+     open(FILE, "<$filename") || die("Cannot open file $filename.\n");
+     $line = <FILE>;
+     close(FILE);
+     chop($line);
+     $line;
+ }
+ 
+ sub read_logfile {
+     local(@@text);
+     local($filename, $leader) = @@_;
+ 
+     open(FILE, "<$filename");
+     while (<FILE>) {
+ 	chop;
+ 	push(@@text, $leader.$_);
+     }
+     close(FILE);
+     @@text;
+ }
+ 
+ sub build_header {
+     local($header);
+     local($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
+     $header = sprintf("CVSROOT:\t%s\nModule name:\t%s\nRepository:\t%s\nChanges by:\t%s@@%s\t%02d/%02d/%02d %02d:%02d:%02d",
+ 		      $cvsroot,
+ 		      $modulename,
+ 		      $dir,
+ 		      $login, $hostdomain,
+ 		      $year%100, $mon+1, $mday,
+ 		      $hour, $min, $sec);
+ }
+ 
+ sub mail_notification {
+     local(@@text) = @@_;
+ 
+     # if only we had strftime()...  stuff stolen from perl's ctime.pl:
+     local($[) = 0;
+ 
+     @@DoW = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
+     @@MoY = ('Jan','Feb','Mar','Apr','May','Jun',
+ 	    'Jul','Aug','Sep','Oct','Nov','Dec');
+ 
+     # Determine what time zone is in effect.
+     # Use GMT if TZ is defined as null, local time if TZ undefined.
+     # There's no portable way to find the system default timezone.
+     #
+     $TZ = defined($ENV{'TZ'}) ? ( $ENV{'TZ'} ? $ENV{'TZ'} : 'GMT' ) : '';
+ 
+     # Hack to deal with 'PST8PDT' format of TZ
+     # Note that this can't deal with all the esoteric forms, but it
+     # does recognize the most common: [:]STDoff[DST[off][,rule]]
+     #
+     if ($TZ =~ /^([^:\d+\-,]{3,})([+-]?\d{1,2}(:\d{1,2}){0,2})([^\d+\-,]{3,})?/) {
+         $TZ = $isdst ? $4 : $1;
+ 	$tzoff = sprintf("%05d", -($2) * 100);
+     }
+ 
+     # perl-4.036 doesn't have the $zone or $gmtoff...
+     ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst, $zone, $gmtoff) =
+         ($TZ eq 'GMT') ? gmtime(time) : localtime(time);
+ 
+     $year += ($year < 70) ? 2000 : 1900;
+ 
+     if ($gmtoff != 0) {
+ 	$tzoff = sprintf("%05d", ($gmtoff / 60) * 100);
+     }
+     if ($zone ne '') {
+ 	$TZ = $zone;
+     }
+ 
+     # ok, let's try....
+     $rfc822date = sprintf("%s, %2d %s %4d %2d:%02d:%02d %s (%s)",
+ 			  $DoW[$wday], $mday, $MoY[$mon], $year,
+ 			  $hour, $min, $sec, $tzoff, $TZ);
+ 
+     open(MAIL, "| $MAILER");
+     print MAIL "Date:     " . $rfc822date . "\n";
+     print MAIL "Subject:  CVS Update: " . $modulename . "\n";
+     print MAIL "To:       " . $mailto . "\n";
+     print MAIL "Reply-To: " . $replyto . "\n";
+     print MAIL "\n";
+     print MAIL join("\n", @@text), "\n";
+     close(MAIL);
+ }
+ 
+ sub write_commitlog {
+     local($logfile, @@text) = @@_;
+ 
+     open(FILE, ">>$logfile");
+     print FILE join("\n", @@text), "\n";
+     close(FILE);
+ }
+ 
+ #
+ #	Main Body
+ #
+ 
+ # Initialize basic variables
+ #
+ $debug = 0;
+ $id = getpgrp();		# note, you *must* use a shell which does setpgrp()
+ $state = $STATE_NONE;
+ chop($hostname = `hostname`);
+ chop($domainname = `domainname`);
+ if ($domainname !~ '^\..*') {
+     $domainname = '.' . $domainname;
+ }
+ $hostdomain = $hostname . $domainname;
+ $cvsroot = $ENV{'CVSROOT'};
+ $do_status = 1;			# moderately useful
+ $show_wd = 0;			# useless in client/server
+ $modulename = "";
+ 
+ # parse command line arguments (file list is seen as one arg)
+ #
+ while (@@ARGV) {
+     $arg = shift @@ARGV;
+ 
+     if ($arg eq '-d') {
+ 	$debug = 1;
+ 	print STDERR "Debug turned on...\n";
+     } elsif ($arg eq '-m') {
+ 	if ($mailto eq '') {
+ 	    $mailto = shift @@ARGV;
+ 	} else {
+ 	    $mailto = $mailto . ", " . shift @@ARGV;
+ 	}
+     } elsif ($arg eq '-R') {
+ 	if ($replyto eq '') {
+ 	    $replyto = shift @@ARGV;
+ 	} else {
+ 	    $replyto = $replyto . ", " . shift @@ARGV;
+ 	}
+     } elsif ($arg eq '-M') {
+ 	$modulename = shift @@ARGV;
+     } elsif ($arg eq '-u') {
+ 	$login = shift @@ARGV;
+     } elsif ($arg eq '-s') {
+ 	$do_status = 0;
+     } elsif ($arg eq '-w') {
+ 	$show_wd = 1;
+     } elsif ($arg eq '-f') {
+ 	($commitlog) && die("Too many '-f' args\n");
+ 	$commitlog = shift @@ARGV;
+     } else {
+ 	($donefiles) && die("Too many arguments!  Check usage.\n");
+ 	$donefiles = 1;
+ 	@@files = split(/ /, $arg);
+     }
+ }
+ if ($login eq '') {
+     $login = getlogin || (getpwuid($<))[0] || "nobody";
+ }
+ ($mailto) || die("No mail recipient specified (use -m)\n");
+ if ($replyto eq '') {
+     $replyto = $login;
+ }
+ 
+ # for now, the first "file" is the repository directory being committed,
+ # relative to the $CVSROOT location
+ #
+ @@path = split('/', $files[0]);
+ 
+ # XXX There are some ugly assumptions in here about module names and
+ # XXX directories relative to the $CVSROOT location -- really should
+ # XXX read $CVSROOT/CVSROOT/modules, but that's not so easy to do, since
+ # XXX we have to parse it backwards.
+ # XXX 
+ # XXX Fortunately it's relatively easy for the user to specify the
+ # XXX module name as appropriate with a '-M' via the directory
+ # XXX matching in loginfo.
+ #
+ if ($modulename eq "") {
+     $modulename = $path[0];	# I.e. the module name == top-level dir
+ }
+ if ($#path == 0) {
+     $dir = ".";
+ } else {
+     $dir = join('/', @@path);
+ }
+ $dir = $dir . "/";
+ 
+ if ($debug) {
+     print STDERR "module - ", $modulename, "\n";
+     print STDERR "dir    - ", $dir, "\n";
+     print STDERR "path   - ", join(":", @@path), "\n";
+     print STDERR "files  - ", join(":", @@files), "\n";
+     print STDERR "id     - ", $id, "\n";
+ }
+ 
+ # Check for a new directory first.  This appears with files set as follows:
+ #
+ #    files[0] - "path/name/newdir"
+ #    files[1] - "-"
+ #    files[2] - "New"
+ #    files[3] - "directory"
+ #
+ if ($files[2] =~ /New/ && $files[3] =~ /directory/) {
+     local(@@text);
+ 
+     @@text = ();
+     push(@@text, &build_header());
+     push(@@text, "");
+     push(@@text, $files[0]);
+     push(@@text, "");
+ 
+     while (<STDIN>) {
+ 	chop;			# Drop the newline
+ 	push(@@text, $_);
+     }
+ 
+     &mail_notification($mailto, @@text);
+ 
+     exit 0;
+ }
+ 
+ # Check for an import command.  This appears with files set as follows:
+ #
+ #    files[0] - "path/name"
+ #    files[1] - "-"
+ #    files[2] - "Imported"
+ #    files[3] - "sources"
+ #
+ if ($files[2] =~ /Imported/ && $files[3] =~ /sources/) {
+     local(@@text);
+ 
+     @@text = ();
+     push(@@text, &build_header());
+     push(@@text, "");
+     push(@@text, $files[0]);
+     push(@@text, "");
+ 
+     while (<STDIN>) {
+ 	chop;			# Drop the newline
+ 	push(@@text, $_);
+     }
+ 
+     &mail_notification(@@text);
+ 
+     exit 0;
+ }
+ 
+ # Iterate over the body of the message collecting information.
+ #
+ while (<STDIN>) {
+     chop;			# Drop the newline
+ 
+     if (/^In directory/) {
+ 	if ($show_wd) {		# useless in client/server mode
+ 	    push(@@log_lines, $_);
+ 	    push(@@log_lines, "");
+ 	}
+ 	next;
+     }
+ 
+     if (/^Modified Files/) { $state = $STATE_CHANGED; next; }
+     if (/^Added Files/)    { $state = $STATE_ADDED;   next; }
+     if (/^Removed Files/)  { $state = $STATE_REMOVED; next; }
+     if (/^Log Message/)    { $state = $STATE_LOG;     next; }
+ 
+     s/^[ \t\n]+//;		# delete leading whitespace
+     s/[ \t\n]+$//;		# delete trailing whitespace
+     
+     if ($state == $STATE_CHANGED) { push(@@changed_files, split); }
+     if ($state == $STATE_ADDED)   { push(@@added_files,   split); }
+     if ($state == $STATE_REMOVED) { push(@@removed_files, split); }
+     if ($state == $STATE_LOG)     { push(@@log_lines,     $_); }
+ }
+ 
+ # Strip leading and trailing blank lines from the log message.  Also
+ # compress multiple blank lines in the body of the message down to a
+ # single blank line.
+ #
+ while ($#log_lines > -1) {
+     last if ($log_lines[0] ne "");
+     shift(@@log_lines);
+ }
+ while ($#log_lines > -1) {
+     last if ($log_lines[$#log_lines] ne "");
+     pop(@@log_lines);
+ }
+ for ($i = $#log_lines; $i > 0; $i--) {
+     if (($log_lines[$i - 1] eq "") && ($log_lines[$i] eq "")) {
+ 	splice(@@log_lines, $i, 1);
+     }
+ }
+ 
+ if ($debug) {
+     print STDERR "Searching for log file index...";
+ }
+ # Find an index to a log file that matches this log message
+ #
+ for ($i = 0; ; $i++) {
+     local(@@text);
+ 
+     last if (! -e "$LOG_FILE.$i.$id"); # the next available one
+     @@text = &read_logfile("$LOG_FILE.$i.$id", "");
+     last if ($#text == -1);	# nothing in this file, use it
+     last if (join(" ", @@log_lines) eq join(" ", @@text)); # it's the same log message as another
+ }
+ if ($debug) {
+     print STDERR " found log file at $i.$id, now writing tmp files.\n";
+ }
+ 
+ # Spit out the information gathered in this pass.
+ #
+ &append_names_to_file("$CHANGED_FILE.$i.$id", $dir, @@changed_files);
+ &append_names_to_file("$ADDED_FILE.$i.$id",   $dir, @@added_files);
+ &append_names_to_file("$REMOVED_FILE.$i.$id", $dir, @@removed_files);
+ &write_logfile("$LOG_FILE.$i.$id", @@log_lines);
+ 
+ # Check whether this is the last directory.  If not, quit.
+ #
+ if ($debug) {
+     print STDERR "Checking current dir against last dir.\n";
+ }
+ $_ = &read_line("$LAST_FILE.$id");
+ 
+ if ($_ ne $cvsroot . "/" . $files[0]) {
+     if ($debug) {
+ 	print STDERR sprintf("Current directory %s is not last directory %s.\n", $cvsroot . "/" .$files[0], $_);
+     }
+     exit 0;
+ }
+ if ($debug) {
+     print STDERR sprintf("Current directory %s is last directory %s -- all commits done.\n", $files[0], $_);
+ }
+ 
+ #
+ #	End Of Commits!
+ #
+ 
+ # This is it.  The commits are all finished.  Lump everything together
+ # into a single message, fire a copy off to the mailing list, and drop
+ # it on the end of the Changes file.
+ #
+ 
+ #
+ # Produce the final compilation of the log messages
+ #
+ @@text = ();
+ @@status_txt = ();
+ push(@@text, &build_header());
+ push(@@text, "");
+ 
+ for ($i = 0; ; $i++) {
+     last if (! -e "$LOG_FILE.$i.$id"); # we're done them all!
+     @@lines = &read_logfile("$CHANGED_FILE.$i.$id", "");
+     if ($#lines >= 0) {
+ 	push(@@text, "Modified files:");
+ 	push(@@text, &format_lists(@@lines));
+     }
+     @@lines = &read_logfile("$ADDED_FILE.$i.$id", "");
+     if ($#lines >= 0) {
+ 	push(@@text, "Added files:");
+ 	push(@@text, &format_lists(@@lines));
+     }
+     @@lines = &read_logfile("$REMOVED_FILE.$i.$id", "");
+     if ($#lines >= 0) {
+ 	push(@@text, "Removed files:");
+ 	push(@@text, &format_lists(@@lines));
+     }
+     if ($#text >= 0) {
+ 	push(@@text, "");
+     }
+     @@lines = &read_logfile("$LOG_FILE.$i.$id", "\t");
+     if ($#lines >= 0) {
+ 	push(@@text, "Log message:");
+ 	push(@@text, @@lines);
+ 	push(@@text, "");
+     }
+     if ($do_status) {
+ 	local(@@changed_files);
+ 
+ 	@@changed_files = ();
+ 	push(@@changed_files, &read_logfile("$CHANGED_FILE.$i.$id", ""));
+ 	push(@@changed_files, &read_logfile("$ADDED_FILE.$i.$id", ""));
+ 	push(@@changed_files, &read_logfile("$REMOVED_FILE.$i.$id", ""));
+ 
+ 	if ($debug) {
+ 	    print STDERR "main: pre-sort changed_files = ", join(":", @@changed_files), ".\n";
+ 	}
+ 	sort(@@changed_files);
+ 	if ($debug) {
+ 	    print STDERR "main: post-sort changed_files = ", join(":", @@changed_files), ".\n";
+ 	}
+ 
+ 	foreach $dofile (@@changed_files) {
+ 	    if ($dofile =~ /\/$/) {
+ 		next;		# ignore the silly "dir" entries
+ 	    }
+ 	    if ($debug) {
+ 		print STDERR "main(): doing 'cvs -nQq status -v $dofile'\n";
+ 	    }
+ 	    open(STATUS, "-|") || exec 'cvs', '-nQq', 'status', '-v', $dofile;
+ 	    while (<STATUS>) {
+ 		chop;
+ 		push(@@status_txt, $_);
+ 	    }
+ 	}
+     }
+ }
+ 
+ # Write to the commitlog file
+ #
+ if ($commitlog) {
+     &write_commitlog($commitlog, @@text);
+ }
+ 
+ if ($#status_txt >= 0) {
+     push(@@text, @@status_txt);
+ }
+ 
+ # Mailout the notification.
+ #
+ &mail_notification(@@text);
+ 
+ # cleanup
+ #
+ if (! $debug) {
+     &cleanup_tmpfiles();
+ }
+ 
+ exit 0;
diff --exclude=CVS -crN ../pristine-ccvs/contrib/mfpipe ./contrib/mfpipe
*** ./contrib/mfpipe	Wed Dec 31 16:00:00 1969
--- ./contrib/mfpipe	Sat Jun 10 11:25:36 2000
***************
*** 0 ****
--- 1,85 ----
+ #! /usr/bin/perl
+ # -*-Perl-*-
+ #
+ # From: clyne@@niwot.scd.ucar.EDU (John Clyne)
+ # Date: Fri, 28 Feb 92 09:54:21 MST
+ # 
+ # BTW, i wrote a perl script that is similar to 'nfpipe' except that in
+ # addition to logging to a file it provides a command line option for mailing
+ # change notices to a group of users. Obviously you probably wouldn't want
+ # to mail every change. But there may be certain directories that are commonly
+ # accessed by a group of users who would benefit from an email notice. 
+ # Especially if they regularly beat on the same directory. Anyway if you 
+ # think anyone would be interested here it is. 
+ #
+ #	File:		mfpipe
+ #
+ #	Author:		John Clyne
+ #			National Center for Atmospheric Research
+ #			PO 3000, Boulder, Colorado
+ #
+ #	Date:		Wed Feb 26 18:34:53 MST 1992
+ #
+ #	Description:	Tee standard input to mail a list of users and to
+ #			a file. Used by CVS logging.
+ #
+ #	Usage:		mfpipe [-f file] [user@@host...]
+ #
+ #	Environment:	CVSROOT	
+ #				Path to CVS root.
+ #
+ #	Files:
+ #
+ #
+ #	Options:	-f file	
+ #				Capture output to 'file'
+ #			
+ 
+ $header = "Log Message:\n";
+ 
+ $mailcmd = "| mail -s  'CVS update notice'";
+ $whoami = `whoami`;
+ chop $whoami;
+ $date = `date`;
+ chop $date;
+ 
+ $cvsroot = $ENV{'CVSROOT'};
+ 
+ while (@@ARGV) {
+         $arg = shift @@ARGV;
+ 
+ 	if ($arg eq '-f') {
+                 $file = shift @@ARGV;
+ 	}
+ 	else {
+ 		$users = "$users $arg";
+ 	}
+ }
+ 
+ if ($users) {
+ 	$mailcmd = "$mailcmd $users";
+ 	open(MAIL, $mailcmd) || die "Execing $mail: $!\n";
+ }
+  
+ if ($file) {
+ 	$logfile = "$cvsroot/LOG/$file";
+ 	open(FILE, ">> $logfile") || die "Opening $logfile: $!\n";
+ }
+ 
+ print FILE "$whoami $date--------BEGIN LOG ENTRY-------------\n" if ($logfile);
+ 
+ while (<>) {
+ 	print FILE $log if ($log && $logfile);
+ 
+ 	print FILE $_ if ($logfile);
+ 	print MAIL $_ if ($users);
+ 
+ 	$log = "log: " if ($_ eq $header);
+ }
+ 
+ close FILE;
+ die "Write failed" if $?;
+ close MAIL;
+ die "Mail failed" if $?;
+ 
+ exit 0;
diff --exclude=CVS -crN ../pristine-ccvs/contrib/rcs-to-cvs ./contrib/rcs-to-cvs
*** ./contrib/rcs-to-cvs	Wed Dec 31 16:00:00 1969
--- ./contrib/rcs-to-cvs	Sat Jun 10 11:25:36 2000
***************
*** 0 ****
--- 1,184 ----
+ #! /bin/sh
+ #
+ # Based on the CVS 1.0 checkin csh script.
+ # Contributed by Per Cederqvist <ceder@@signum.se>.
+ # Rewritten in sh by David MacKenzie <djm@@cygnus.com>.
+ #
+ #   Copyright (c) 1989, Brian Berliner
+ #
+ #   You may distribute under the terms of the GNU General Public License.
+ #
+ #############################################################################
+ #
+ # Check in sources that previously were under RCS or no source control system.
+ #
+ # The repository is the directory where the sources should be deposited.
+ #
+ # Traverses the current directory, ensuring that an
+ # identical directory structure exists in the repository directory.  It
+ # then checks the files in in the following manner:
+ #
+ #		1) If the file doesn't yet exist, check it in as revision 1.1
+ #
+ # The script also is somewhat verbose in letting the user know what is
+ # going on.  It prints a diagnostic when it creates a new file, or updates
+ # a file that has been modified on the trunk.
+ #
+ # Bugs: doesn't put the files in branch 1.1.1
+ #       doesn't put in release and vendor tags
+ #
+ #############################################################################
+ 
+ usage="Usage: rcs-to-cvs [-v] [-m message] [-f message_file] repository"
+ vbose=0
+ message=""
+ if [ -d /var/tmp ]; then message_file=/var/tmp/checkin.$$; else message_file=/usr/tmp/checkin.$$; fi
+ got_one=0
+ 
+ if [ $# -lt 1 ]; then
+     echo "$usage" >&2
+     exit 1
+ fi
+ 
+ while [ $# -ne 0 ]; do
+     case "$1" in
+         -v)
+             vbose=1
+ 	    ;;
+ 	-m)
+ 	    shift
+ 	    echo $1 > $message_file
+ 	    got_one=1
+ 	    ;;
+ 	-f)
+ 	    shift
+ 	    message_file=$1
+ 	    got_one=2
+ 	    ;;
+ 	*)
+ 	    break
+     esac
+     shift
+ done
+ 
+ if [ $# -lt 1 ]; then
+     echo "$usage" >&2
+     exit 1
+ fi
+ 
+ repository=$1
+ shift
+ 
+ if [ -z "$CVSROOT" ]; then
+     echo "Please the environmental variable CVSROOT to the root" >&2
+     echo "	of the tree you wish to update" >&2
+     exit 1
+ fi
+ 
+ if [ $got_one -eq 0 ]; then
+     echo "Please Edit this file to contain the RCS log information" >$message_file
+     echo "to be associated with this directory (please remove these lines)">>$message_file
+     ${EDITOR-vi} $message_file
+     got_one=1
+ fi
+ 
+ # Ya gotta share.
+ umask 0
+ 
+ update_dir=${CVSROOT}/${repository}
+ [ ! -d ${update_dir} ] && mkdir $update_dir
+ 
+ if [ -d SCCS ]; then
+     echo SCCS files detected! >&2
+     exit 1
+ fi
+ if [ -d RCS ]; then
+     co RCS/*
+ fi
+ 
+ for name in * .[a-zA-Z0-9]*
+ do
+     case "$name" in
+     RCS | *~ | \* | .\[a-zA-Z0-9\]\* ) continue ;;
+     esac
+     echo $name
+     if [ $vbose -ne 0 ]; then 
+ 	echo "Updating ${repository}/${name}"
+     fi
+     if [ -d "$name" ]; then
+ 	if [ ! -d "${update_dir}/${name}" ]; then
+ 	    echo "WARNING: Creating new directory ${repository}/${name}"
+ 	    mkdir "${update_dir}/${name}"
+ 	    if [ $? -ne 0 ]; then
+ 		echo "ERROR: mkdir failed - aborting" >&2
+ 		exit 1
+ 	    fi
+ 	fi
+ 	cd "$name"
+ 	if [ $? -ne 0 ]; then
+ 	    echo "ERROR: Couldn\'t cd to $name - aborting" >&2
+ 	    exit 1
+ 	fi
+ 	if [ $vbose -ne 0 ]; then
+ 	    $0 -v -f $message_file "${repository}/${name}"
+ 	else
+ 	    $0 -f $message_file "${repository}/${name}"
+ 	fi
+ 	if [ $? -ne 0 ]; then 
+ 	    exit 1
+ 	fi
+ 	cd ..
+     else	# if not directory 
+ 	if [ ! -f "$name" ]; then
+ 	    echo "WARNING: $name is neither a regular file"
+ 	    echo "	   nor a directory - ignored"
+ 	    continue
+ 	fi
+ 	file="${update_dir}/${name},v"
+ 	comment=""
+ 	if grep -s '\$Log.*\$' "${name}"; then # If $Log keyword
+ 	    myext=`echo $name | sed 's,.*\.,,'`
+ 	    [ "$myext" = "$name" ] && myext=
+ 	    case "$myext" in
+ 		c | csh | e | f | h | l | mac | me | mm | ms | p | r | red | s | sh | sl | cl | ml | el | tex | y | ye | yr | "" )
+ 		;;
+ 
+ 		* )
+ 		echo "For file ${file}:"
+ 		grep '\$Log.*\$' "${name}"
+ 		echo -n "Please insert a comment leader for file ${name} > "
+ 		read comment
+ 		;;
+ 	    esac
+ 	fi
+ 	if [ ! -f "$file" ]; then	# If not exists in repository
+ 	    if [ ! -f "${update_dir}/Attic/${name},v" ]; then
+ 	        echo "WARNING: Creating new file ${repository}/${name}"
+ 		if [ -f RCS/"${name}",v ]; then
+ 			echo "MSG: Copying old rcs file."
+ 			cp RCS/"${name}",v "$file"
+ 		else
+    		    if [ -n "${comment}" ]; then
+ 		        rcs -q -i -c"${comment}" -t${message_file} -m'.' "$file"
+ 		    fi
+ 	            ci -q -u1.1 -t${message_file} -m'.' "$file" 
+ 	            if [ $? -ne 0 ]; then
+ 		        echo "ERROR: Initial check-in of $file failed - aborting" >&2
+ 		        exit 1
+ 	            fi
+ 		fi
+ 	    else 
+ 		file="${update_dir}/Attic/${name},v"
+ 		echo "WARNING: IGNORED: ${repository}/Attic/${name}"
+ 		continue
+ 	    fi
+ 	else	# File existed 
+ 	    echo "ERROR: File exists in repository: Ignored: $file"
+ 	    continue
+ 	fi
+     fi
+ done
+ 
+ [ $got_one -eq 1 ] && rm -f $message_file
+ 
+ exit 0
diff --exclude=CVS -crN ../pristine-ccvs/contrib/rcs2log ./contrib/rcs2log
*** ./contrib/rcs2log	Wed Dec 31 16:00:00 1969
--- ./contrib/rcs2log	Sat Jun 10 11:25:36 2000
***************
*** 0 ****
--- 1,677 ----
+ #! /bin/sh
+ 
+ # RCS to ChangeLog generator
+ 
+ # Generate a change log prefix from RCS files (perhaps in the CVS repository)
+ # and the ChangeLog (if any).
+ # Output the new prefix to standard output.
+ # You can edit this prefix by hand, and then prepend it to ChangeLog.
+ 
+ # Ignore log entries that start with `#'.
+ # Clump together log entries that start with `{topic} ',
+ # where `topic' contains neither white space nor `}'.
+ 
+ Help='The default FILEs are the files registered under the working directory.
+ Options:
+ 
+   -c CHANGELOG  Output a change log prefix to CHANGELOG (default ChangeLog).
+   -h HOSTNAME  Use HOSTNAME in change log entries (default current host).
+   -i INDENT  Indent change log lines by INDENT spaces (default 8).
+   -l LENGTH  Try to limit log lines to LENGTH characters (default 79).
+   -R  If no FILEs are given and RCS is used, recurse through working directory.
+   -r OPTION  Pass OPTION to subsidiary log command.
+   -t TABWIDTH  Tab stops are every TABWIDTH characters (default 8).
+   -u "LOGIN<tab>FULLNAME<tab>MAILADDR"  Assume LOGIN has FULLNAME and MAILADDR.
+   -v  Append RCS revision to file names in log lines.
+   --help  Output help.
+   --version  Output version number.
+ 
+ Report bugs to <bug-gnu-emacs@@gnu.org>.'
+ 
+ Id='$Id: rcs2log,v 1.45 1998/08/12 22:33:01 eggert Exp $'
+ 
+ # Copyright 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
+ 
+ # 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, 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; see the file COPYING.  If not, write to the
+ # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ # Boston, MA 02111-1307, USA.
+ 
+ Copyright='Copyright 1998 Free Software Foundation, Inc.
+ This program comes with NO WARRANTY, to the extent permitted by law.
+ You may redistribute copies of this program
+ under the terms of the GNU General Public License.
+ For more information about these matters, see the files named COPYING.
+ Author: Paul Eggert <eggert@@twinsun.com>'
+ 
+ tab='	'
+ nl='
+ '
+ 
+ # Parse options.
+ 
+ # defaults
+ : ${AWK=awk}
+ : ${TMPDIR=/tmp}
+ changelog=ChangeLog # change log file name
+ datearg= # rlog date option
+ hostname= # name of local host (if empty, will deduce it later)
+ indent=8 # indent of log line
+ length=79 # suggested max width of log line
+ logins= # login names for people we know fullnames and mailaddrs of
+ loginFullnameMailaddrs= # login<tab>fullname<tab>mailaddr triplets
+ logTZ= # time zone for log dates (if empty, use local time)
+ recursive= # t if we want recursive rlog
+ revision= # t if we want revision numbers
+ rlog_options= # options to pass to rlog
+ tabwidth=8 # width of horizontal tab
+ 
+ while :
+ do
+ 	case $1 in
+ 	-c)	changelog=${2?}; shift;;
+ 	-i)	indent=${2?}; shift;;
+ 	-h)	hostname=${2?}; shift;;
+ 	-l)	length=${2?}; shift;;
+ 	-[nu])	# -n is obsolescent; it is replaced by -u.
+ 		case $1 in
+ 		-n)	case ${2?}${3?}${4?} in
+ 			*"$tab"* | *"$nl"*)
+ 				echo >&2 "$0: -n '$2' '$3' '$4': tabs, newlines not allowed"
+ 				exit 1
+ 			esac
+ 			case $loginFullnameMailaddrs in
+ 			'') loginFullnameMailaddrs=$2$tab$3$tab$4;;
+ 			?*) loginFullnameMailaddrs=$loginFullnameMailaddrs$nl$2$tab$3$tab$4
+ 			esac
+ 			shift; shift; shift;;
+ 		-u)
+ 			# If $2 is not tab-separated, use colon for separator.
+ 			case ${2?} in
+ 			*"$nl"*)
+ 				echo >&2 "$0: -u '$2': newlines not allowed"
+ 				exit 1;;
+ 			*"$tab"*)
+ 				t=$tab;;
+ 			*)
+ 				t=:
+ 			esac
+ 			case $2 in
+ 			*"$t"*"$t"*"$t"*)
+ 				echo >&2 "$0: -u '$2': too many fields"
+ 				exit 1;;
+ 			*"$t"*"$t"*)
+ 				;;
+ 			*)
+ 				echo >&2 "$0: -u '$2': not enough fields"
+ 				exit 1
+ 			esac
+ 			case $loginFullnameMailaddrs in
+ 			'') loginFullnameMailaddrs=$2;;
+ 			?*) loginFullnameMailaddrs=$loginFullnameMailaddrs$nl$2
+ 			esac
+ 			shift
+ 		esac
+ 		case $logins in
+ 		'') logins=$login;;
+ 		?*) logins=$logins$nl$login
+ 		esac
+ 		;;
+ 	-r)
+ 		case $rlog_options in
+ 		'') rlog_options=${2?};;
+ 		?*) rlog_options=$rlog_options$nl${2?}
+ 		esac
+ 		shift;;
+ 	-R)	recursive=t;;
+ 	-t)	tabwidth=${2?}; shift;;
+ 	-v)	revision=t;;
+ 	--version)
+ 		set $Id
+ 		rcs2logVersion=$3
+ 		echo >&2 "rcs2log (GNU Emacs) $rcs2logVersion$nl$Copyright"
+ 		exit 0;;
+ 	-*)	echo >&2 "Usage: $0 [OPTION]... [FILE ...]$nl$Help"
+ 		case $1 in
+ 		--help) exit 0;;
+ 		*) exit 1
+ 		esac;;
+ 	*)	break
+ 	esac
+ 	shift
+ done
+ 
+ month_data='
+ 	m[0]="Jan"; m[1]="Feb"; m[2]="Mar"
+ 	m[3]="Apr"; m[4]="May"; m[5]="Jun"
+ 	m[6]="Jul"; m[7]="Aug"; m[8]="Sep"
+ 	m[9]="Oct"; m[10]="Nov"; m[11]="Dec"
+ '
+ 
+ 
+ # Put rlog output into $rlogout.
+ 
+ # If no rlog options are given,
+ # log the revisions checked in since the first ChangeLog entry.
+ # Since ChangeLog is only by date, some of these revisions may be duplicates of
+ # what's already in ChangeLog; it's the user's responsibility to remove them.
+ case $rlog_options in
+ '')
+ 	if test -s "$changelog"
+ 	then
+ 		e='
+ 			/^[0-9]+-[0-9][0-9]-[0-9][0-9]/{
+ 				# ISO 8601 date
+ 				print $1
+ 				exit
+ 			}
+ 			/^... ... [ 0-9][0-9] [ 0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9]+ /{
+ 				# old-fashioned date and time (Emacs 19.31 and earlier)
+ 				'"$month_data"'
+ 				year = $5
+ 				for (i=0; i<=11; i++) if (m[i] == $2) break
+ 				dd = $3
+ 				printf "%d-%02d-%02d\n", year, i+1, dd
+ 				exit
+ 			}
+ 		'
+ 		d=`$AWK "$e" <"$changelog"` || exit
+ 		case $d in
+ 		?*) datearg="-d>$d"
+ 		esac
+ 	fi
+ esac
+ 
+ # Use TZ specified by ChangeLog local variable, if any.
+ if test -s "$changelog"
+ then
+ 	extractTZ='
+ 		/^.*change-log-time-zone-rule['"$tab"' ]*:['"$tab"' ]*"\([^"]*\)".*/{
+ 			s//\1/; p; q
+ 		}
+ 		/^.*change-log-time-zone-rule['"$tab"' ]*:['"$tab"' ]*t.*/{
+ 			s//UTC0/; p; q
+ 		}
+ 	'
+ 	logTZ=`tail "$changelog" | sed -n "$extractTZ"`
+ 	case $logTZ in
+ 	?*) TZ=$logTZ; export TZ
+ 	esac
+ fi
+ 
+ # If CVS is in use, examine its repository, not the normal RCS files.
+ if test ! -f CVS/Repository
+ then
+ 	rlog=rlog
+ 	repository=
+ else
+ 	rlog='cvs -q log'
+ 	repository=`sed 1q <CVS/Repository` || exit
+ 	test ! -f CVS/Root || CVSROOT=`cat <CVS/Root` || exit
+ 	case $CVSROOT in
+ 	*:/*)
+ 		# remote repository
+ 		;;
+ 	*)
+ 		# local repository
+ 		case $repository in
+ 		/*) ;;
+ 		*) repository=${CVSROOT?}/$repository
+ 		esac
+ 		if test ! -d "$repository"
+ 		then
+ 			echo >&2 "$0: $repository: bad repository (see CVS/Repository)"
+ 			exit 1
+ 		fi
+ 	esac
+ fi
+ 
+ # Use $rlog's -zLT option, if $rlog supports it.
+ case `$rlog -zLT 2>&1` in
+ *' option'*) ;;
+ *)
+ 	case $rlog_options in
+ 	'') rlog_options=-zLT;;
+ 	?*) rlog_options=-zLT$nl$rlog_options
+ 	esac
+ esac
+ 
+ # With no arguments, examine all files under the RCS directory.
+ case $# in
+ 0)
+ 	case $repository in
+ 	'')
+ 		oldIFS=$IFS
+ 		IFS=$nl
+ 		case $recursive in
+ 		t)
+ 			RCSdirs=`find . -name RCS -type d -print`
+ 			filesFromRCSfiles='s|,v$||; s|/RCS/|/|; s|^\./||'
+ 			files=`
+ 				{
+ 					case $RCSdirs in
+ 					?*) find $RCSdirs \
+ 							-type f \
+ 							! -name '*_' \
+ 							! -name ',*,' \
+ 							! -name '.*_' \
+ 							! -name .rcsfreeze.log \
+ 							! -name .rcsfreeze.ver \
+ 							-print
+ 					esac
+ 					find . -name '*,v' -print
+ 				} |
+ 				sort -u |
+ 				sed "$filesFromRCSfiles"
+ 			`;;
+ 		*)
+ 			files=
+ 			for file in RCS/.* RCS/* .*,v *,v
+ 			do
+ 				case $file in
+ 				RCS/. | RCS/.. | RCS/,*, | RCS/*_) continue;;
+ 				RCS/.rcsfreeze.log | RCS/.rcsfreeze.ver) continue;;
+ 				RCS/.\* | RCS/\* | .\*,v | \*,v) test -f "$file" || continue;;
+ 				RCS/*,v | RCS/.*,v) ;;
+ 				RCS/* | RCS/.*) test -f "$file" || continue
+ 				esac
+ 				case $files in
+ 				'') files=$file;;
+ 				?*) files=$files$nl$file
+ 				esac
+ 			done
+ 			case $files in
+ 			'') exit 0
+ 			esac
+ 		esac
+ 		set x $files
+ 		shift
+ 		IFS=$oldIFS
+ 	esac
+ esac
+ 
+ llogout=$TMPDIR/rcs2log$$l
+ rlogout=$TMPDIR/rcs2log$$r
+ trap exit 1 2 13 15
+ trap "rm -f $llogout $rlogout; exit 1" 0
+ 
+ case $datearg in
+ ?*) $rlog $rlog_options "$datearg" ${1+"$@@"} >$rlogout;;
+ '') $rlog $rlog_options ${1+"$@@"} >$rlogout
+ esac || exit
+ 
+ 
+ # Get the full name of each author the logs mention, and set initialize_fullname
+ # to awk code that initializes the `fullname' awk associative array.
+ # Warning: foreign authors (i.e. not known in the passwd file) are mishandled;
+ # you have to fix the resulting output by hand.
+ 
+ initialize_fullname=
+ initialize_mailaddr=
+ 
+ case $loginFullnameMailaddrs in
+ ?*)
+ 	case $loginFullnameMailaddrs in
+ 	*\"* | *\\*)
+ 		sed 's/["\\]/\\&/g' >$llogout <<EOF || exit
+ $loginFullnameMailaddrs
+ EOF
+ 		loginFullnameMailaddrs=`cat $llogout`
+ 	esac
+ 
+ 	oldIFS=$IFS
+ 	IFS=$nl
+ 	for loginFullnameMailaddr in $loginFullnameMailaddrs
+ 	do
+ 		case $loginFullnameMailaddr in
+ 		*"$tab"*) IFS=$tab;;
+ 		*) IFS=:
+ 		esac
+ 		set x $loginFullnameMailaddr
+ 		login=$2
+ 		fullname=$3
+ 		mailaddr=$4
+ 		initialize_fullname="$initialize_fullname
+ 			fullname[\"$login\"] = \"$fullname\""
+ 		initialize_mailaddr="$initialize_mailaddr
+ 			mailaddr[\"$login\"] = \"$mailaddr\""
+ 	done
+ 	IFS=$oldIFS
+ esac
+ 
+ case $llogout in
+ ?*) sort -u -o $llogout <<EOF || exit
+ $logins
+ EOF
+ esac
+ output_authors='/^date: / {
+ 	if ($2 ~ /^[0-9]*[-\/][0-9][0-9][-\/][0-9][0-9]$/ && $3 ~ /^[0-9][0-9]:[0-9][0-9]:[0-9][0-9][-+0-9:]*;$/ && $4 == "author:" && $5 ~ /^[^;]*;$/) {
+ 		print substr($5, 1, length($5)-1)
+ 	}
+ }'
+ authors=`
+ 	$AWK "$output_authors" <$rlogout |
+ 	case $llogout in
+ 	'') sort -u;;
+ 	?*) sort -u | comm -23 - $llogout
+ 	esac
+ `
+ case $authors in
+ ?*)
+ 	cat >$llogout <<EOF || exit
+ $authors
+ EOF
+ 	initialize_author_script='s/["\\]/\\&/g; s/.*/author[\"&\"] = 1/'
+ 	initialize_author=`sed -e "$initialize_author_script" <$llogout`
+ 	awkscript='
+ 		BEGIN {
+ 			alphabet = "abcdefghijklmnopqrstuvwxyz"
+ 			ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ 			'"$initialize_author"'
+ 		}
+ 		{
+ 			if (author[$1]) {
+ 				fullname = $5
+ 				if (fullname ~ /[0-9]+-[^(]*\([0-9]+\)$/) {
+ 					# Remove the junk from fullnames like "0000-Admin(0000)".
+ 					fullname = substr(fullname, index(fullname, "-") + 1)
+ 					fullname = substr(fullname, 1, index(fullname, "(") - 1)
+ 				}
+ 				if (fullname ~ /,[^ ]/) {
+ 					# Some sites put comma-separated junk after the fullname.
+ 					# Remove it, but leave "Bill Gates, Jr" alone.
+ 					fullname = substr(fullname, 1, index(fullname, ",") - 1)
+ 				}
+ 				abbr = index(fullname, "&")
+ 				if (abbr) {
+ 					a = substr($1, 1, 1)
+ 					A = a
+ 					i = index(alphabet, a)
+ 					if (i) A = substr(ALPHABET, i, 1)
+ 					fullname = substr(fullname, 1, abbr-1) A substr($1, 2) substr(fullname, abbr+1)
+ 				}
+ 
+ 				# Quote quotes and backslashes properly in full names.
+ 				# Do not use gsub; traditional awk lacks it.
+ 				quoted = ""
+ 				rest = fullname
+ 				for (;;) {
+ 					p = index(rest, "\\")
+ 					q = index(rest, "\"")
+ 					if (p) {
+ 						if (q && q<p) p = q
+ 					} else {
+ 						if (!q) break
+ 						p = q
+ 					}
+ 					quoted = quoted substr(rest, 1, p-1) "\\" substr(rest, p, 1)
+ 					rest = substr(rest, p+1)
+ 				}
+ 
+ 				printf "fullname[\"%s\"] = \"%s%s\"\n", $1, quoted, rest
+ 				author[$1] = 0
+ 			}
+ 		}
+ 	'
+ 
+ 	initialize_fullname=`
+ 		{
+ 			(getent passwd $authors) ||
+ 			(
+ 				cat /etc/passwd
+ 				for author in $authors
+ 				do NIS_PATH= nismatch $author passwd.org_dir
+ 				done
+ 				ypmatch $authors passwd
+ 			)
+ 		} 2>/dev/null |
+ 		$AWK -F: "$awkscript"
+ 	`$initialize_fullname
+ esac
+ 
+ 
+ # Function to print a single log line.
+ # We don't use awk functions, to stay compatible with old awk versions.
+ # `Log' is the log message (with \n replaced by \001).
+ # `files' contains the affected files.
+ printlogline='{
+ 
+ 	# Following the GNU coding standards, rewrite
+ 	#	* file: (function): comment
+ 	# to
+ 	#	* file (function): comment
+ 	if (Log ~ /^\([^)]*\): /) {
+ 		i = index(Log, ")")
+ 		files = files " " substr(Log, 1, i)
+ 		Log = substr(Log, i+3)
+ 	}
+ 
+ 	# If "label: comment" is too long, break the line after the ":".
+ 	sep = " "
+ 	if ('"$length"' <= '"$indent"' + 1 + length(files) + index(Log, SOH)) sep = "\n" indent_string
+ 
+ 	# Print the label.
+ 	printf "%s*%s:", indent_string, files
+ 
+ 	# Print each line of the log, transliterating \001 to \n.
+ 	while ((i = index(Log, SOH)) != 0) {
+ 		logline = substr(Log, 1, i-1)
+ 		if (logline ~ /[^'"$tab"' ]/) {
+ 			printf "%s%s\n", sep, logline
+ 		} else {
+ 			print ""
+ 		}
+ 		sep = indent_string
+ 		Log = substr(Log, i+1)
+ 	}
+ }'
+ 
+ # Pattern to match the `revision' line of rlog output.
+ rlog_revision_pattern='^revision [0-9]+\.[0-9]+(\.[0-9]+\.[0-9]+)*(['"$tab"' ]+locked by: [^'"$tab"' $,.0-9:;@@]*[^'"$tab"' $,:;@@][^'"$tab"' $,.0-9:;@@]*;)?['"$tab"' ]*$'
+ 
+ case $hostname in
+ '')
+ 	hostname=`(
+ 		hostname || uname -n || uuname -l || cat /etc/whoami
+ 	) 2>/dev/null` || {
+ 		echo >&2 "$0: cannot deduce hostname"
+ 		exit 1
+ 	}
+ 
+ 	case $hostname in
+ 	*.*) ;;
+ 	*)
+ 		domainname=`(domainname) 2>/dev/null` &&
+ 		case $domainname in
+ 		*.*) hostname=$hostname.$domainname
+ 		esac
+ 	esac
+ esac
+ 
+ 
+ # Process the rlog output, generating ChangeLog style entries.
+ 
+ # First, reformat the rlog output so that each line contains one log entry.
+ # Transliterate \n to \001 so that multiline entries fit on a single line.
+ # Discard irrelevant rlog output.
+ $AWK <$rlogout '
+ 	BEGIN { repository = "'"$repository"'" }
+ 	/^RCS file:/ {
+ 		if (repository != "") {
+ 			filename = $3
+ 			if (substr(filename, 1, length(repository) + 1) == repository "/") {
+ 				filename = substr(filename, length(repository) + 2)
+ 			}
+ 			if (filename ~ /,v$/) {
+ 				filename = substr(filename, 1, length(filename) - 2)
+ 			}
+ 			if (filename ~ /(^|\/)Attic\/[^\/]*$/) {
+ 				i = length(filename)
+ 				while (substr(filename, i, 1) != "/") i--
+ 				filename = substr(filename, 1, i - 6) substr(filename, i + 1)
+ 			}
+ 		}
+ 		rev = "?"
+ 	}
+ 	/^Working file:/ { if (repository == "") filename = $3 }
+ 	/'"$rlog_revision_pattern"'/, /^(-----------*|===========*)$/ {
+ 		line = $0
+ 		if (line ~ /'"$rlog_revision_pattern"'/) {
+ 			rev = $2
+ 			next
+ 		}
+ 		if (line ~ /^date: [0-9][- +\/0-9:]*;/) {
+ 			date = $2
+ 			if (date ~ /\//) {
+ 				# This is a traditional RCS format date YYYY/MM/DD.
+ 				# Replace "/"s with "-"s to get ISO format.
+ 				newdate = ""
+ 				while ((i = index(date, "/")) != 0) {
+ 					newdate = newdate substr(date, 1, i-1) "-"
+ 					date = substr(date, i+1)
+ 				}
+ 				date = newdate date
+ 			}
+ 			time = substr($3, 1, length($3) - 1)
+ 			author = substr($5, 1, length($5)-1)
+ 			printf "%s %s %s %s %s %c", filename, rev, date, time, author, 1
+ 			rev = "?"
+ 			next
+ 		}
+ 		if (line ~ /^branches: /) { next }
+ 		if (line ~ /^(-----------*|===========*)$/) { print ""; next }
+ 		if (line == "Initial revision" || line ~ /^file .+ was initially added on branch .+\.$/) {
+ 			line = "New file."
+ 		}
+ 		printf "%s%c", line, 1
+ 	}
+ ' |
+ 
+ # Now each line is of the form
+ # FILENAME REVISION YYYY-MM-DD HH:MM:SS[+-TIMEZONE] AUTHOR \001LOG
+ #	where \001 stands for a carriage return,
+ #	and each line of the log is terminated by \001 instead of \n.
+ # Sort the log entries, first by date+time (in reverse order),
+ # then by author, then by log entry, and finally by file name and revision
+ # (just in case).
+ sort +2 -4r +4 +0 |
+ 
+ # Finally, reformat the sorted log entries.
+ $AWK '
+ 	BEGIN {
+ 		logTZ = "'"$logTZ"'"
+ 		revision = "'"$revision"'"
+ 
+ 		# Some awk variants do not understand "\001", so we have to
+ 		# put the char directly in the file.
+ 		SOH="" # <-- There is a single SOH (octal code 001) here.
+ 
+ 		# Initialize the fullname and mailaddr associative arrays.
+ 		'"$initialize_fullname"'
+ 		'"$initialize_mailaddr"'
+ 
+ 		# Initialize indent string.
+ 		indent_string = ""
+ 		i = '"$indent"'
+ 		if (0 < '"$tabwidth"')
+ 			for (;  '"$tabwidth"' <= i;  i -= '"$tabwidth"')
+ 				indent_string = indent_string "\t"
+ 		while (1 <= i--)
+ 			indent_string = indent_string " "
+ 	}
+ 
+ 	{
+ 		newlog = substr($0, 1 + index($0, SOH))
+ 
+ 		# Ignore log entries prefixed by "#".
+ 		if (newlog ~ /^#/) { next }
+ 
+ 		if (Log != newlog || date != $3 || author != $5) {
+ 
+ 			# The previous log and this log differ.
+ 
+ 			# Print the old log.
+ 			if (date != "") '"$printlogline"'
+ 
+ 			# Logs that begin with "{clumpname} " should be grouped together,
+ 			# and the clumpname should be removed.
+ 			# Extract the new clumpname from the log header,
+ 			# and use it to decide whether to output a blank line.
+ 			newclumpname = ""
+ 			sep = "\n"
+ 			if (date == "") sep = ""
+ 			if (newlog ~ /^\{[^'"$tab"' }]*}['"$tab"' ]/) {
+ 				i = index(newlog, "}")
+ 				newclumpname = substr(newlog, 1, i)
+ 				while (substr(newlog, i+1) ~ /^['"$tab"' ]/) i++
+ 				newlog = substr(newlog, i+1)
+ 				if (clumpname == newclumpname) sep = ""
+ 			}
+ 			printf sep
+ 			clumpname = newclumpname
+ 
+ 			# Get ready for the next log.
+ 			Log = newlog
+ 			if (files != "")
+ 				for (i in filesknown)
+ 					filesknown[i] = 0
+ 			files = ""
+ 		}
+ 		if (date != $3  ||  author != $5) {
+ 			# The previous date+author and this date+author differ.
+ 			# Print the new one.
+ 			date = $3
+ 			time = $4
+ 			author = $5
+ 
+ 			zone = ""
+ 			if (logTZ && ((i = index(time, "-")) || (i = index(time, "+"))))
+ 				zone = " " substr(time, i)
+ 
+ 			# Print "date[ timezone]  fullname  <email address>".
+ 			# Get fullname and email address from associative arrays;
+ 			# default to author and author@@hostname if not in arrays.
+ 			if (fullname[author])
+ 				auth = fullname[author]
+ 			else
+ 				auth = author
+ 			printf "%s%s  %s  ", date, zone, auth
+ 			if (mailaddr[author])
+ 				printf "<%s>\n\n", mailaddr[author]
+ 			else
+ 				printf "<%s@@%s>\n\n", author, "'"$hostname"'"
+ 		}
+ 		if (! filesknown[$1]) {
+ 			filesknown[$1] = 1
+ 			if (files == "") files = " " $1
+ 			else files = files ", " $1
+ 			if (revision && $2 != "?") files = files " " $2
+ 		}
+ 	}
+ 	END {
+ 		# Print the last log.
+ 		if (date != "") {
+ 			'"$printlogline"'
+ 			printf "\n"
+ 		}
+ 	}
+ ' &&
+ 
+ 
+ # Exit successfully.
+ 
+ exec rm -f $llogout $rlogout
+ 
+ # Local Variables:
+ # tab-width:4
+ # End:
diff --exclude=CVS -crN ../pristine-ccvs/contrib/rcslock ./contrib/rcslock
*** ./contrib/rcslock	Wed Dec 31 16:00:00 1969
--- ./contrib/rcslock	Sat Jun 10 11:25:36 2000
***************
*** 0 ****
--- 1,235 ----
+ #! /usr/bin/perl
+ # -*-Perl-*-
+ 
+ # Author: John Rouillard (rouilj@@cs.umb.edu)
+ # Supported: Yeah right. (Well what do you expect for 2 hours work?)
+ # Blame-to: rouilj@@cs.umb.edu
+ # Complaints to: Anybody except Brian Berliner, he's blameless for
+ #		 this script.
+ # Acknowlegements: The base code for this script has been acquired
+ # 		   from the log.pl script.
+ 
+ # rcslock.pl - A program to prevent commits when a file to be ckecked
+ # 	       in is locked in the repository.
+ 
+ # There are times when you need exclusive access to a file.  This
+ # often occurs when binaries are checked into the repository, since
+ # cvs's (actually rcs's) text based merging mechanism won't work. This
+ # script allows you to use the rcs lock mechanism (rcs -l) to make
+ # sure that no changes to a repository are able to be committed if
+ # those changes would result in a locked file being changed.
+ 
+ # WARNING:
+ # This script will work only if locking is set to strict.
+ #
+ 
+ # Setup:
+ # Add the following line to the commitinfo file:
+ 
+ #         ALL /local/location/for/script/lockcheck [options]
+ 
+ # Where ALL is replaced by any suitable regular expression.
+ # Options are -v for verbose info, or -d for debugging info.
+ # The %s will provide the repository directory name and the names of
+ # all changed files.  
+ 
+ # Use:
+ # When a developer needs exclusive access to a version of a file, s/he
+ # should use "rcs -l" in the repository tree to lock the version they
+ # are working on.  CVS will automagically release the lock when the
+ # commit is performed.
+ 
+ # Method:
+ # An "rlog -h" is exec'ed to give info on all about to be
+ # committed files.  This (header) information is parsed to determine
+ # if any locks are outstanding and what versions of the file are
+ # locked.  This filename, version number info is used to index an
+ # associative array.  All of the files to be committed are checked to
+ # see if any locks are outstanding.  If locks are outstanding, the
+ # version number of the current file (taken from the CVS/Entries
+ # subdirectory) is used in the key to determine if that version is
+ # locked. If the file being checked in is locked by the person doing
+ # the checkin, the commit is allowed, but if the lock is held on that
+ # version of a file by another person, the commit is not allowed.
+ 
+ $ext = ",v";  # The extension on your rcs files.
+ 
+ $\="\n";  # I hate having to put \n's at the end of my print statements
+ $,=' ';   # Spaces should occur between arguments to print when printed
+ 
+ # turn off setgid
+ #
+ $) = $(;
+ 
+ #
+ # parse command line arguments
+ #
+ require 'getopts.pl';
+ 
+ &Getopts("vd"); # verbose or debugging
+ 
+ # Verbose is useful when debugging
+ $opt_v = $opt_d if defined $opt_d;
+ 
+ # $files[0] is really the name of the subdirectory.
+ # @@files = split(/ /,$ARGV[0]);
+ @@files = @@ARGV[0..$#ARGV];
+ $cvsroot = $ENV{'CVSROOT'};
+ 
+ #
+ # get login name
+ #
+ $login = getlogin || (getpwuid($<))[0] || "nobody";
+ 
+ #
+ # save the current directory since we have to return here to parse the
+ # CVS/Entries file if a lock is found.
+ #
+ $pwd = `/bin/pwd`;
+ chop $pwd;
+ 
+ print "Starting directory is $pwd" if defined $opt_d ;
+ 
+ #
+ # cd to the repository directory and check on the files.
+ #
+ print "Checking directory ", $files[0] if defined $opt_v ;
+ 
+ if ( $files[0] =~ /^\// )
+ {
+    print "Directory path is $files[0]" if defined $opt_d ;
+    chdir $files[0] || die "Can't change to repository directory $files[0]" ;
+ }
+ else
+ {
+    print "Directory path is $cvsroot/$files[0]" if defined $opt_d ;
+    chdir ($cvsroot . "/" . $files[0]) || 
+          die "Can't change to repository directory $files[0] in $cvsroot" ;
+ }
+ 
+ 
+ # Open the rlog process and apss all of the file names to that one
+ # process to cut down on exec overhead.  This may backfire if there
+ # are too many files for the system buffer to handle, but if there are
+ # that many files, chances are that the cvs repository is not set up
+ # cleanly.
+ 
+ print "opening rlog -h @@files[1..$#files] |" if defined $opt_d;
+ 
+ open( RLOG, "rlog -h @@files[1..$#files] |") || die "Can't run rlog command" ;
+ 
+ # Create the locks associative array.  The elements in the array are
+ # of two types:
+ #
+ #  The name of the RCS file with a value of the total number of locks found
+ #            for that file,
+ # or
+ #
+ # The name of the rcs file concatenated with the version number of the lock.
+ # The value of this element is the name of the locker.
+ 
+ # The regular expressions used to split the rcs info may have to be changed.
+ # The current ones work for rcs 5.6.
+ 
+ $lock = 0;
+ 
+ while (<RLOG>)
+ {
+ 	chop;
+ 	next if /^$/; # ditch blank lines
+ 
+ 	if ( $_ =~ /^RCS file: (.*)$/ )
+ 	{
+ 	   $curfile = $1;
+ 	   next;
+ 	}
+ 
+ 	if ( $_ =~ /^locks: strict$/ )
+ 	{
+   	  $lock = 1 ;
+ 	  next;
+ 	}
+ 
+ 	if ( $lock )
+ 	{
+ 	  # access list: is the line immediately following the list of locks.
+ 	  if ( /^access list:/ )
+ 	  { # we are done getting lock info for this file.
+ 	    $lock = 0;
+ 	  }
+ 	  else
+ 	  { # We are accumulating lock info.
+ 
+ 	    # increment the lock count
+ 	    $locks{$curfile}++;
+ 	    # save the info on the version that is locked. $2 is the
+             # version number $1 is the name of the locker.
+ 	    $locks{"$curfile" . "$2"} = $1 
+ 				if /[ 	]*([a-zA-Z._]*): ([0-9.]*)$/;
+ 
+ 	    print "lock by $1 found on $curfile version $2" if defined $opt_d;
+ 
+ 	  }
+ 	}
+ }
+ 
+ # Lets go back to the starting directory and see if any locked files
+ # are ones we are interested in.
+ 
+ chdir $pwd;
+ 
+ # fo all of the file names (remember $files[0] is the directory name
+ foreach $i (@@files[1..$#files])
+ {
+   if ( defined $locks{$i . $ext} )
+   { # well the file has at least one lock outstanding
+ 
+      # find the base version number of our file
+      &parse_cvs_entry($i,*entry);
+ 
+      # is our version of this file locked?
+      if ( defined $locks{$i . $ext . $entry{"version"}} )
+      { # if so, it is by us?
+ 	if ( $login ne ($by = $locks{$i . $ext . $entry{"version"}}) )
+ 	{# crud somebody else has it locked.
+ 	   $outstanding_lock++ ;
+ 	   print "$by has file $i locked for version " , $entry{"version"};
+ 	}
+ 	else
+ 	{ # yeah I have it locked.
+ 	   print "You have a lock on file $i for version " , $entry{"version"}
+ 		if defined $opt_v;
+ 	}
+      }
+   }
+ }
+ 
+ exit $outstanding_lock;
+ 
+ 
+ ### End of main program
+ 
+ sub parse_cvs_entry
+ { # a very simple minded hack at parsing an entries file.
+ local ( $file, *entry ) = @@_;
+ local ( @@pp );
+ 
+ 
+ open(ENTRIES, "< CVS/Entries") || die "Can't open entries file";
+ 
+ while (<ENTRIES>)
+  {
+   if ( $_  =~ /^\/$file\// )
+   {
+ 	@@pp = split('/');
+ 
+ 	$entry{"name"} = $pp[1];
+ 	$entry{"version"} = $pp[2];
+ 	$entry{"dates"} = $pp[3];
+ 	$entry{"name"} = $pp[4];
+ 	$entry{"name"} = $pp[5];
+ 	$entry{"sticky"} = $pp[6];
+ 	return;
+   }
+  }
+ }
diff --exclude=CVS -crN ../pristine-ccvs/contrib/sccs2rcs ./contrib/sccs2rcs
*** ./contrib/sccs2rcs	Wed Dec 31 16:00:00 1969
--- ./contrib/sccs2rcs	Sat Jun 10 11:25:36 2000
***************
*** 0 ****
--- 1,280 ----
+ #! /bin/csh -f
+ #
+ # Sccs2rcs is a script to convert an existing SCCS
+ # history into an RCS history without losing any of
+ # the information contained therein.
+ # It has been tested under the following OS's:
+ #     SunOS 3.5, 4.0.3, 4.1
+ #     Ultrix-32 2.0, 3.1
+ #
+ # Things to note:
+ #   + It will NOT delete or alter your ./SCCS history under any circumstances.
+ #
+ #   + Run in a directory where ./SCCS exists and where you can
+ #       create ./RCS
+ #
+ #   + /usr/local/bin is put in front of the default path.
+ #     (SCCS under Ultrix is set-uid sccs, bad bad bad, so
+ #     /usr/local/bin/sccs here fixes that)
+ #
+ #   + Date, time, author, comments, branches, are all preserved.
+ #
+ #   + If a command fails somewhere in the middle, it bombs with
+ #     a message -- remove what it's done so far and try again.
+ #         "rm -rf RCS; sccs unedit `sccs tell`; sccs clean"
+ #     There is no recovery and exit is far from graceful.
+ #     If a particular module is hanging you up, consider
+ #     doing it separately; move it from the current area so that
+ #     the next run will have a better chance or working.
+ #     Also (for the brave only) you might consider hacking
+ #     the s-file for simpler problems:  I've successfully changed
+ #     the date of a delta to be in sync, then run "sccs admin -z"
+ #     on the thing.
+ #
+ #   + After everything finishes, ./SCCS will be moved to ./old-SCCS.
+ #
+ # This file may be copied, processed, hacked, mutilated, and
+ # even destroyed as long as you don't tell anyone you wrote it.
+ #
+ # Ken Cox
+ # Viewlogic Systems, Inc.
+ # kenstir@@viewlogic.com
+ # ...!harvard!cg-atla!viewlog!kenstir
+ #
+ # Various hacks made by Brian Berliner before inclusion in CVS contrib area.
+ 
+ 
+ #we'll assume the user set up the path correctly
+ # for the Pmax, /usr/ucb/sccs is suid sccs, what a pain
+ #   /usr/local/bin/sccs should override /usr/ucb/sccs there
+ set path = (/usr/local/bin $path)
+ 
+ 
+ ############################################################
+ # Error checking
+ #
+ if (! -w .) then
+     echo "Error: ./ not writeable by you."
+     exit 1
+ endif
+ if (! -d SCCS) then
+     echo "Error: ./SCCS directory not found."
+     exit 1
+ endif
+ set edits = (`sccs tell`)
+ if ($#edits) then
+     echo "Error: $#edits file(s) out for edit...clean up before converting."
+     exit 1
+ endif
+ if (-d RCS) then
+     echo "Warning: RCS directory exists"
+     if (`ls -a RCS | wc -l` > 2) then
+         echo "Error: RCS directory not empty
+         exit 1
+     endif
+ else
+     mkdir RCS
+ endif
+ 
+ sccs clean
+ 
+ set logfile = /tmp/sccs2rcs_$$_log
+ rm -f $logfile
+ set tmpfile = /tmp/sccs2rcs_$$_tmp
+ rm -f $tmpfile
+ set emptyfile = /tmp/sccs2rcs_$$_empty
+ echo -n "" > $emptyfile
+ set initialfile = /tmp/sccs2rcs_$$_init
+ echo "Initial revision" > $initialfile
+ set sedfile = /tmp/sccs2rcs_$$_sed
+ rm -f $sedfile
+ set revfile = /tmp/sccs2rcs_$$_rev
+ rm -f $revfile
+ 
+ # the quotes surround the dollar signs to fool RCS when I check in this script
+ set sccs_keywords = (\
+     '%W%[ 	]*%G%'\
+     '%W%[ 	]*%E%'\
+     '%W%'\
+     '%Z%%M%[ 	]*%I%[ 	]*%G%'\
+     '%Z%%M%[ 	]*%I%[ 	]*%E%'\
+     '%M%[ 	]*%I%[ 	]*%G%'\
+     '%M%[ 	]*%I%[ 	]*%E%'\
+     '%M%'\
+     '%I%'\
+     '%G%'\
+     '%E%'\
+     '%U%')
+ set rcs_keywords = (\
+     '$'Id'$'\
+     '$'Id'$'\
+     '$'Id'$'\
+     '$'SunId'$'\
+     '$'SunId'$'\
+     '$'Id'$'\
+     '$'Id'$'\
+     '$'RCSfile'$'\
+     '$'Revision'$'\
+     '$'Date'$'\
+     '$'Date'$'\
+     '')
+ 
+ 
+ ############################################################
+ # Get some answers from user
+ #
+ echo ""
+ echo "Do you want to be prompted for a description of each"
+ echo "file as it is checked in to RCS initially?"
+ echo -n "(y=prompt for description, n=null description) [y] ?"
+ set ans = $<
+ if ((_$ans == _) || (_$ans == _y) || (_$ans == _Y)) then
+     set nodesc = 0
+ else
+     set nodesc = 1
+ endif
+ echo ""
+ echo "The default keyword substitutions are as follows and are"
+ echo "applied in the order specified:"
+ set i = 1
+ while ($i <= $#sccs_keywords)
+ #    echo '	'\"$sccs_keywords[$i]\"'	==>	'\"$rcs_keywords[$i]\"
+     echo "	$sccs_keywords[$i]	==>	$rcs_keywords[$i]"
+     @@ i = $i + 1
+ end
+ echo ""
+ echo -n "Do you want to change them [n] ?"
+ set ans = $<
+ if ((_$ans != _) && (_$ans != _n) && (_$ans != _N)) then
+     echo "You can't always get what you want."
+     echo "Edit this script file and change the variables:"
+     echo '    $sccs_keywords'
+     echo '    $rcs_keywords'
+ else
+     echo "good idea."
+ endif
+ 
+ # create the sed script
+ set i = 1
+ while ($i <= $#sccs_keywords)
+     echo "s,$sccs_keywords[$i],$rcs_keywords[$i],g" >> $sedfile
+     @@ i = $i + 1
+ end
+ 
+ onintr ERROR
+ 
+ ############################################################
+ # Loop over every s-file in SCCS dir
+ #
+ foreach sfile (SCCS/s.*)
+     # get rid of the "s." at the beginning of the name
+     set file = `echo $sfile:t | sed -e "s/^..//"`
+ 
+     # work on each rev of that file in ascending order
+     set firsttime = 1
+     sccs prs $file | grep "^D " | awk '{print $2}' | sed -e 's/\./ /g' | sort -n -u +0 +1 +2 +3 +4 +5 +6 +7 +8 | sed -e 's/ /./g' > $revfile
+     foreach rev (`cat $revfile`)
+         if ($status != 0) goto ERROR
+ 
+         # get file into current dir and get stats
+ 	set year = `echo $date | cut -c3-4`
+ 	if ($year < 70) then
+ 		# Y2K Bug, change century to 20
+ 		set date = `echo $date | sed -e s/19/20/`
+ 	endif
+         set date = `sccs prs -r$rev $file | grep "^D " | awk '{printf("19%s %s", $3, $4); exit}'`
+         set author = `sccs prs -r$rev $file | grep "^D " | awk '{print $5; exit}'`
+         echo ""
+         echo "==> file $file, rev=$rev, date=$date, author=$author"
+         sccs edit -r$rev $file >>& $logfile
+         if ($status != 0) goto ERROR
+         echo checked out of SCCS
+ 
+         # add RCS keywords in place of SCCS keywords
+         sed -f $sedfile $file > $tmpfile
+         if ($status != 0) goto ERROR
+         echo performed keyword substitutions
+         cp $tmpfile $file
+ 
+         # check file into RCS
+         if ($firsttime) then
+             set firsttime = 0
+             if ($nodesc) then
+ 		echo about to do ci
+                 echo ci -f -r$rev -d"$date" -w$author -t$emptyfile $file 
+                 ci -f -r$rev -d"$date" -w$author -t$emptyfile $file < $initialfile >>& $logfile
+                 if ($status != 0) goto ERROR
+                 echo initial rev checked into RCS without description
+             else
+                 echo ""
+                 echo Enter a brief description of the file $file \(end w/ Ctrl-D\):
+                 cat > $tmpfile
+                 ci -f -r$rev -d"$date" -w$author -t$tmpfile $file < $initialfile >>& $logfile
+                 if ($status != 0) goto ERROR
+                 echo initial rev checked into RCS
+             endif
+         else
+             # get RCS lock
+ 	    set lckrev = `echo $rev | sed -e 's/\.[0-9]*$//'`
+ 	    if ("$lckrev" =~ [0-9]*.*) then
+ 		# need to lock the brach -- it is OK if the lock fails
+ 		rcs -l$lckrev $file >>& $logfile
+ 	    else
+ 		# need to lock the trunk -- must succeed
+                 rcs -l $file >>& $logfile
+                 if ($status != 0) goto ERROR
+ 	    endif
+             echo got lock
+             sccs prs -r$rev $file | grep "." > $tmpfile
+             # it's OK if grep fails here and gives status == 1
+             # put the delta message in $tmpfile
+             ed $tmpfile >>& $logfile <<EOF
+ /COMMENTS
+ 1,.d
+ w
+ q
+ EOF
+             ci -f -r$rev -d"$date" -w$author $file < $tmpfile >>& $logfile
+             if ($status != 0) goto ERROR
+             echo checked into RCS
+         endif
+         sccs unedit $file >>& $logfile
+         if ($status != 0) goto ERROR
+     end
+     rm -f $file
+ end
+ 
+ 
+ ############################################################
+ # Clean up
+ #
+ echo cleaning up...
+ mv SCCS old-SCCS
+ rm -f $tmpfile $emptyfile $initialfile $sedfile
+ echo ===================================================
+ echo "       Conversion Completed Successfully"
+ echo ""
+ echo "         SCCS history now in old-SCCS/"
+ echo ===================================================
+ set exitval = 0
+ goto cleanup
+ 
+ ERROR:
+ foreach f (`sccs tell`)
+     sccs unedit $f
+ end
+ echo ""
+ echo ""
+ echo Danger\!  Danger\!
+ echo Some command exited with a non-zero exit status.
+ echo Log file exists in $logfile.
+ echo ""
+ echo Incomplete history in ./RCS -- remove it
+ echo Original unchanged history in ./SCCS
+ set exitval = 1
+ 
+ cleanup:
+ # leave log file
+ rm -f $tmpfile $emptyfile $initialfile $sedfile $revfile
+ 
+ exit $exitval
d2784 2
a2785 2
*** ./doc/cvs.texinfo	Wed May 24 08:02:04 2000
--- ./doc/cvs.texinfo	Sat Jun 10 11:23:13 2000
d2885 2
a2886 2
*** ./src/Makefile.in	Tue Oct  6 16:04:30 1998
--- ./src/Makefile.in	Sat Jun 10 11:23:13 2000
d2924 2
a2925 2
*** ./src/add.c	Fri Mar 10 08:20:23 2000
--- ./src/add.c	Sat Jun 10 11:23:13 2000
d2927 2
a2928 2
*** 329,334 ****
--- 329,337 ----
d2939 2
a2940 2
*** ./src/admin.c	Wed Nov 10 10:12:07 1999
--- ./src/admin.c	Sat Jun 10 11:23:13 2000
d2967 2
a2968 2
*** ./src/checkout.c	Thu May 25 13:05:48 2000
--- ./src/checkout.c	Sat Jun 10 11:23:13 2000
d2985 2
a2986 2
*** ./src/client.c	Sat May 20 15:00:32 2000
--- ./src/client.c	Sat Jun 10 11:23:13 2000
d3023 2
a3024 2
*** ./src/commit.c	Sat Jun  3 09:35:41 2000
--- ./src/commit.c	Sat Jun 10 11:23:13 2000
d3078 2
a3079 2
*** ./src/cvs.h	Tue May 16 11:57:15 2000
--- ./src/cvs.h	Sat Jun 10 11:23:13 2000
d3204 2
a3205 2
*** ./src/diff.c	Wed Apr 14 17:12:26 1999
--- ./src/diff.c	Sat Jun 10 11:23:13 2000
d3224 2
a3225 2
*** ./src/edit.c	Fri Feb 11 10:48:31 2000
--- ./src/edit.c	Sat Jun 10 11:23:13 2000
d3312 1
a3312 1
*** 1130,1134 ****
d3318 1
a3318 1
--- 1130,1134 ----
d3325 2
a3326 2
*** ./src/error.c	Mon Nov 29 13:39:48 1999
--- ./src/error.c	Sat Jun 10 11:23:13 2000
d3340 2
a3341 2
*** ./src/import.c	Tue May 16 11:57:15 2000
--- ./src/import.c	Sat Jun 10 11:23:13 2000
d3355 2
a3356 2
*** ./src/local_auth.c	Wed Dec 31 16:00:00 1969
--- ./src/local_auth.c	Sat Jun 10 14:31:26 2000
d3766 2
a3767 2
*** ./src/lock.c	Wed Dec 15 09:53:21 1999
--- ./src/lock.c	Sat Jun 10 11:23:13 2000
d3787 2
a3788 2
*** ./src/log.c	Thu Feb 10 13:32:23 2000
--- ./src/log.c	Sat Jun 10 11:23:13 2000
d3790 1
a3790 1
*** 347,353 ****
a3794 2
      return (err);
  }
d3796 3
a3798 1
--- 347,353 ----
a3802 2
      return (err);
  }
d3804 2
d3807 2
a3808 2
*** ./src/login.c	Mon Nov 29 21:11:12 1999
--- ./src/login.c	Sat Jun 10 11:23:13 2000
d3827 2
a3828 2
*** ./src/main.c	Thu Jun  8 08:07:53 2000
--- ./src/main.c	Sat Jun 10 11:23:13 2000
d3911 2
a3912 2
*** ./src/mkmodules.c	Thu Mar 23 14:52:25 2000
--- ./src/mkmodules.c	Sat Jun 10 11:23:13 2000
d3950 2
a3951 2
*** ./src/mysqlsubr.c	Wed Dec 31 16:00:00 1969
--- ./src/mysqlsubr.c	Sat Jun 10 14:30:34 2000
d4033 2
a4034 2
*** ./src/parseinfo.c	Mon Mar 13 11:15:31 2000
--- ./src/parseinfo.c	Sat Jun 10 11:23:13 2000
d4079 2
a4080 2
*** ./src/patch.c	Mon Aug 24 08:40:22 1998
--- ./src/patch.c	Sat Jun 10 11:23:13 2000
d4114 2
a4115 2
*** ./src/rcs.c	Fri Jun  9 13:54:01 2000
--- ./src/rcs.c	Sat Jun 10 11:23:13 2000
d4117 1
a4117 1
*** 8471,8477 ****
d4125 1
a4125 1
--- 8471,8477 ----
d4134 2
a4135 2
*** ./src/recurse.c	Fri May 26 13:55:25 2000
--- ./src/recurse.c	Sat Jun 10 11:23:13 2000
d4276 2
a4277 2
*** ./src/remove.c	Wed Dec 23 07:15:01 1998
--- ./src/remove.c	Sat Jun 10 11:23:13 2000
d4314 2
a4315 2
*** ./src/rtag.c	Wed Dec 23 07:15:01 1998
--- ./src/rtag.c	Sat Jun 10 11:23:13 2000
d4351 2
a4352 2
*** ./src/scramble.c	Fri Jun 27 13:16:08 1997
--- ./src/scramble.c	Sat Jun 10 11:23:13 2000
d4428 2
a4429 2
*** ./src/server.c	Wed Jun  7 13:41:18 2000
--- ./src/server.c	Sat Jun 10 11:23:13 2000
d4775 2
a4776 2
*** ./src/status.c	Tue Jun  1 14:36:33 1999
--- ./src/status.c	Sat Jun 10 11:23:13 2000
d4795 2
a4796 2
*** ./src/tag.c	Sat Jun  3 09:35:42 2000
--- ./src/tag.c	Sat Jun 10 11:23:13 2000
d4832 1
a4832 1
*** 843,849 ****
d4840 1
a4840 1
--- 843,849 ----
d4849 2
a4850 2
*** ./src/update.c	Mon May 15 13:55:19 2000
--- ./src/update.c	Sat Jun 10 11:23:13 2000
d4852 1
a4852 1
*** 483,489 ****
d4860 1
a4860 1
--- 483,489 ----
d4869 1
a4869 1
*** 499,505 ****
d4877 1
a4877 1
--- 499,505 ----
d4886 1
a4886 1
*** 1360,1366 ****
d4894 1
a4894 1
--- 1360,1367 ----
d4904 1
a4904 1
*** 1756,1762 ****
d4912 1
a4912 1
--- 1757,1764 ----
d4922 2
a4923 2
*** ./src/watch.c	Sun Sep 13 16:16:40 1998
--- ./src/watch.c	Sat Jun 10 11:23:13 2000
d4942 1
a4942 1
*** 525,529 ****
d4948 1
a4948 1
--- 525,529 ----
@


1.9
log
@Really, no more tmp files in patch.
@
text
@d2 2
a3 2
*** ./config.h.in	Tue Jun  2 12:29:50 1998
--- ./config.h.in	Thu Jun  8 10:01:06 2000
d17 2
a18 2
*** ./configure	Thu Feb 17 12:41:22 2000
--- ./configure	Fri Jun  9 09:36:00 2000
d2706 2
a2707 2
*** ./configure.in	Thu Feb 17 12:41:22 2000
--- ./configure.in	Thu Jun  8 09:50:16 2000
d2783 3121
d5905 2
a5906 2
*** ./doc/cvs.texinfo	Tue May 30 08:59:55 2000
--- ./doc/cvs.texinfo	Fri Jun  9 12:50:38 2000
d6006 2
a6007 2
*** ./src/Makefile.in	Tue Oct  6 18:04:30 1998
--- ./src/Makefile.in	Fri Jun  9 09:30:33 2000
d6045 2
a6046 2
*** ./src/add.c	Fri Mar 10 10:20:23 2000
--- ./src/add.c	Thu Jun  8 10:14:40 2000
d6060 2
a6061 2
*** ./src/admin.c	Wed Nov 10 12:12:07 1999
--- ./src/admin.c	Thu Jun  8 09:50:16 2000
d6088 2
a6089 2
*** ./src/checkout.c	Tue May 30 08:59:55 2000
--- ./src/checkout.c	Thu Jun  8 09:50:16 2000
d6106 2
a6107 2
*** ./src/client.c	Tue May 30 08:59:55 2000
--- ./src/client.c	Sat Jun 10 09:19:53 2000
d6144 2
a6145 2
*** ./src/commit.c	Thu Jun  8 08:35:53 2000
--- ./src/commit.c	Thu Jun  8 09:50:16 2000
d6199 2
a6200 2
*** ./src/cvs.h	Tue May 30 08:59:55 2000
--- ./src/cvs.h	Fri Jun  9 15:49:07 2000
d6325 2
a6326 2
*** ./src/diff.c	Wed Apr 14 19:12:26 1999
--- ./src/diff.c	Thu Jun  8 09:50:17 2000
d6345 2
a6346 2
*** ./src/edit.c	Fri Feb 11 12:48:31 2000
--- ./src/edit.c	Thu Jun  8 09:50:17 2000
d6446 2
a6447 2
*** ./src/error.c	Mon Nov 29 15:39:48 1999
--- ./src/error.c	Fri Jun  9 09:47:02 2000
d6461 2
a6462 2
*** ./src/import.c	Tue May 30 08:59:56 2000
--- ./src/import.c	Thu Jun  8 09:50:17 2000
d6476 2
a6477 2
*** ./src/local_auth.c	Wed Dec 31 18:00:00 1969
--- ./src/local_auth.c	Sat Jun 10 09:27:13 2000
d6480 4
a6483 4
--- 1,375 ----
+ /*
+  * Copyright (c) 1992, Brian Berliner and Jeff Polk
+  * Copyright (c) 1989-1992, Brian Berliner
d6485 4
a6488 2
+  * You may distribute under the terms of the GNU General Public License as
+  * specified in the README file that comes with the CVS 1.4 kit.
d6490 4
a6493 2
+  * Checking permissions for the current user in the specified
+  * directory.
d6495 1
d6505 7
a6511 1
+ static void
d6519 1
d6526 3
a6528 1
+     while ((row = mysql_fetch_row (res))) {
d6535 2
d6584 11
a6594 1
+ 	/*** STEP 2: check project-level configs ***/
d6596 2
a6597 5
+ 	if ((perms != 2) && (project != NULL)) {
+ 	    /* When the module exists, we only want to check the domain
+ 	     * privs if the module is non-private
+ 	     */
+ 	    if (module != NULL) {
d6617 9
a6625 2
+ 	    } 
+             else 
d6636 2
a6638 2
+ 	    find_tigris_privs_query (CVS_mysql, &perms, query);
+ 	    free (query);
d6641 1
a6641 1
+ 	/*** STEP 3: check module-level privs configs ***/
d6887 2
a6888 2
*** ./src/lock.c	Wed Dec 15 11:53:21 1999
--- ./src/lock.c	Thu Jun  8 09:50:17 2000
d6908 2
a6909 2
*** ./src/log.c	Thu Feb 10 15:32:23 2000
--- ./src/log.c	Thu Jun  8 09:50:17 2000
d6928 2
a6929 2
*** ./src/login.c	Mon Nov 29 23:11:12 1999
--- ./src/login.c	Fri Jun  9 14:27:11 2000
d6948 2
a6949 2
*** ./src/main.c	Thu Jun  8 08:35:53 2000
--- ./src/main.c	Fri Jun  9 09:48:14 2000
d7032 2
a7033 2
*** ./src/mkmodules.c	Thu Mar 23 16:52:25 2000
--- ./src/mkmodules.c	Thu Jun  8 09:50:17 2000
d7071 2
a7072 2
*** ./src/mysqlsubr.c	Wed Dec 31 18:00:00 1969
--- ./src/mysqlsubr.c	Thu Jun  8 09:50:17 2000
d7075 1
a7075 1
--- 1,75 ----
d7077 15
a7091 13
+    Jim Blandy <jimb@@cyclic.com>
+ 
+    This file is part of GNU CVS.
+ 
+    GNU CVS 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, 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.  */
d7154 2
a7155 2
*** ./src/parseinfo.c	Mon Mar 13 13:15:31 2000
--- ./src/parseinfo.c	Thu Jun  8 09:50:17 2000
d7200 2
a7201 2
*** ./src/patch.c	Mon Aug 24 10:40:22 1998
--- ./src/patch.c	Thu Jun  8 09:50:17 2000
d7235 2
a7236 2
*** ./src/rcs.c	Fri Jun  9 14:30:55 2000
--- ./src/rcs.c	Fri Jun  9 14:30:41 2000
d7255 2
a7256 2
*** ./src/recurse.c	Tue May 30 08:59:56 2000
--- ./src/recurse.c	Thu Jun  8 20:39:16 2000
d7397 2
a7398 2
*** ./src/remove.c	Wed Dec 23 09:15:01 1998
--- ./src/remove.c	Thu Jun  8 09:50:17 2000
d7435 2
a7436 2
*** ./src/rtag.c	Wed Dec 23 09:15:01 1998
--- ./src/rtag.c	Thu Jun  8 09:50:17 2000
d7472 2
a7473 2
*** ./src/scramble.c	Fri Jun 27 15:16:08 1997
--- ./src/scramble.c	Fri Jun  9 14:27:55 2000
d7549 2
a7550 2
*** ./src/server.c	Thu Jun  8 08:35:53 2000
--- ./src/server.c	Fri Jun  9 09:52:34 2000
d7896 2
a7897 2
*** ./src/status.c	Tue Jun  1 16:36:33 1999
--- ./src/status.c	Thu Jun  8 09:50:17 2000
d7916 2
a7917 2
*** ./src/tag.c	Thu Jun  8 08:35:53 2000
--- ./src/tag.c	Thu Jun  8 09:50:17 2000
d7970 2
a7971 2
*** ./src/update.c	Tue May 30 08:59:57 2000
--- ./src/update.c	Thu Jun  8 09:50:17 2000
d8043 2
a8044 2
*** ./src/watch.c	Sun Sep 13 18:16:40 1998
--- ./src/watch.c	Thu Jun  8 09:50:17 2000
@


1.8
log
@oops -- regenerate without tmp build-related files.
@
text
@a2883 39
diff --exclude=CVS -crN ../pristine-ccvs/src/Makefile ./src/Makefile
*** ./src/Makefile	Tue May  9 10:17:46 2000
--- ./src/Makefile	Fri Jun  9 15:51:46 2000
***************
*** 43,49 ****
  lock.c log.c login.c logmsg.c main.c mkmodules.c modules.c myndbm.c no_diff.c \
  parseinfo.c patch.c rcs.c rcscmds.c recurse.c release.c remove.c repos.c \
  root.c rtag.c scramble.c server.c status.c subr.c filesubr.c run.c \
! tag.c update.c watch.c wrapper.c vers_ts.c version.c zlib.c
  
  OBJECTS = add.o admin.o buffer.o checkin.o checkout.o classify.o client.o \
  commit.o create_adm.o cvsrc.o diff.o edit.o entries.o expand_path.o \
--- 43,50 ----
  lock.c log.c login.c logmsg.c main.c mkmodules.c modules.c myndbm.c no_diff.c \
  parseinfo.c patch.c rcs.c rcscmds.c recurse.c release.c remove.c repos.c \
  root.c rtag.c scramble.c server.c status.c subr.c filesubr.c run.c \
! tag.c update.c watch.c wrapper.c vers_ts.c version.c zlib.c \
! local_auth.c mysqlsubr.c
  
  OBJECTS = add.o admin.o buffer.o checkin.o checkout.o classify.o client.o \
  commit.o create_adm.o cvsrc.o diff.o edit.o entries.o expand_path.o \
***************
*** 52,58 ****
  parseinfo.o patch.o rcs.o rcscmds.o recurse.o release.o remove.o repos.o \
  root.o rtag.o scramble.o server.o status.o tag.o update.o \
  watch.o wrapper.o vers_ts.o \
! subr.o filesubr.o run.o version.o error.o zlib.o
  
  HEADERS = buffer.h cvs.h rcs.h hardlink.h hash.h myndbm.h \
  	update.h server.h client.h error.h fileattr.h edit.h watch.h
--- 53,60 ----
  parseinfo.o patch.o rcs.o rcscmds.o recurse.o release.o remove.o repos.o \
  root.o rtag.o scramble.o server.o status.o tag.o update.o \
  watch.o wrapper.o vers_ts.o \
! subr.o filesubr.o run.o version.o error.o zlib.o \
! local_auth.o mysqlsubr.o
  
  HEADERS = buffer.h cvs.h rcs.h hardlink.h hash.h myndbm.h \
  	update.h server.h client.h error.h fileattr.h edit.h watch.h
@


1.7
log
@Tweak a few things in local_auth.c, in preparation for debugging the
domain_privs vs project_privs issue.
@
text
@a0 127
diff --exclude=CVS -crN ../pristine-ccvs/config.cache ./config.cache
*** ./config.cache	Tue May  9 10:17:34 2000
--- ./config.cache	Wed Dec 31 18:00:00 1969
***************
*** 1,106 ****
- # This file is a shell script that caches the results of configure
- # tests run on this system so they can be shared between configure
- # scripts and configure runs.  It is not useful on other systems.
- # If it contains results you don't want to keep, you may remove or edit it.
- #
- # By default, configure uses ./config.cache as the cache file,
- # creating it if it does not exist already.  You can give configure
- # the --cache-file=FILE option to use a different cache file; that is
- # what configure does when it calls configure scripts in
- # subdirectories, so they share the cache.
- # Giving --cache-file=/dev/null disables caching, for debugging configure.
- # config.status only pays attention to the cache file if you give it the
- # --recheck option to rerun configure.
- #
- ac_cv_c_const=${ac_cv_c_const=yes}
- ac_cv_func_closedir_void=${ac_cv_func_closedir_void=no}
- ac_cv_func_dup2=${ac_cv_func_dup2=yes}
- ac_cv_func_fchdir=${ac_cv_func_fchdir=yes}
- ac_cv_func_fchmod=${ac_cv_func_fchmod=yes}
- ac_cv_func_fnmatch_works=${ac_cv_func_fnmatch_works=yes}
- ac_cv_func_fsync=${ac_cv_func_fsync=yes}
- ac_cv_func_ftime=${ac_cv_func_ftime=yes}
- ac_cv_func_ftruncate=${ac_cv_func_ftruncate=yes}
- ac_cv_func_gethostname=${ac_cv_func_gethostname=yes}
- ac_cv_func_getpagesize=${ac_cv_func_getpagesize=yes}
- ac_cv_func_initgroups=${ac_cv_func_initgroups=yes}
- ac_cv_func_krb_get_err_text=${ac_cv_func_krb_get_err_text=no}
- ac_cv_func_memmove=${ac_cv_func_memmove=yes}
- ac_cv_func_mkdir=${ac_cv_func_mkdir=yes}
- ac_cv_func_mktemp=${ac_cv_func_mktemp=yes}
- ac_cv_func_putenv=${ac_cv_func_putenv=yes}
- ac_cv_func_readlink=${ac_cv_func_readlink=yes}
- ac_cv_func_rename=${ac_cv_func_rename=yes}
- ac_cv_func_sigaction=${ac_cv_func_sigaction=yes}
- ac_cv_func_sigblock=${ac_cv_func_sigblock=yes}
- ac_cv_func_sigprocmask=${ac_cv_func_sigprocmask=yes}
- ac_cv_func_sigsetmask=${ac_cv_func_sigsetmask=yes}
- ac_cv_func_sigvec=${ac_cv_func_sigvec=yes}
- ac_cv_func_strerror=${ac_cv_func_strerror=yes}
- ac_cv_func_strstr=${ac_cv_func_strstr=yes}
- ac_cv_func_strtoul=${ac_cv_func_strtoul=yes}
- ac_cv_func_tempnam=${ac_cv_func_tempnam=yes}
- ac_cv_func_timezone=${ac_cv_func_timezone=yes}
- ac_cv_func_tzset=${ac_cv_func_tzset=yes}
- ac_cv_func_utime_null=${ac_cv_func_utime_null=yes}
- ac_cv_func_valloc=${ac_cv_func_valloc=yes}
- ac_cv_func_vfork_works=${ac_cv_func_vfork_works=yes}
- ac_cv_func_vprintf=${ac_cv_func_vprintf=yes}
- ac_cv_func_wait3=${ac_cv_func_wait3=yes}
- ac_cv_func_waitpid=${ac_cv_func_waitpid=yes}
- ac_cv_header_direct_h=${ac_cv_header_direct_h=no}
- ac_cv_header_dirent_dirent_h=${ac_cv_header_dirent_dirent_h=yes}
- ac_cv_header_errno_h=${ac_cv_header_errno_h=yes}
- ac_cv_header_fcntl_h=${ac_cv_header_fcntl_h=yes}
- ac_cv_header_gssapi_gssapi_generic_h=${ac_cv_header_gssapi_gssapi_generic_h=no}
- ac_cv_header_gssapi_gssapi_h=${ac_cv_header_gssapi_gssapi_h=no}
- ac_cv_header_gssapi_h=${ac_cv_header_gssapi_h=no}
- ac_cv_header_io_h=${ac_cv_header_io_h=no}
- ac_cv_header_krb5_h=${ac_cv_header_krb5_h=no}
- ac_cv_header_limits_h=${ac_cv_header_limits_h=yes}
- ac_cv_header_memory_h=${ac_cv_header_memory_h=yes}
- ac_cv_header_minix_config_h=${ac_cv_header_minix_config_h=no}
- ac_cv_header_ndbm_h=${ac_cv_header_ndbm_h=no}
- ac_cv_header_stat_broken=${ac_cv_header_stat_broken=no}
- ac_cv_header_stdc=${ac_cv_header_stdc=yes}
- ac_cv_header_string_h=${ac_cv_header_string_h=yes}
- ac_cv_header_sys_bsdtypes_h=${ac_cv_header_sys_bsdtypes_h=no}
- ac_cv_header_sys_file_h=${ac_cv_header_sys_file_h=yes}
- ac_cv_header_sys_param_h=${ac_cv_header_sys_param_h=yes}
- ac_cv_header_sys_resource_h=${ac_cv_header_sys_resource_h=yes}
- ac_cv_header_sys_select_h=${ac_cv_header_sys_select_h=yes}
- ac_cv_header_sys_time_h=${ac_cv_header_sys_time_h=yes}
- ac_cv_header_sys_timeb_h=${ac_cv_header_sys_timeb_h=yes}
- ac_cv_header_sys_wait_h=${ac_cv_header_sys_wait_h=yes}
- ac_cv_header_time=${ac_cv_header_time=yes}
- ac_cv_header_unistd_h=${ac_cv_header_unistd_h=yes}
- ac_cv_header_utime_h=${ac_cv_header_utime_h=yes}
- ac_cv_header_vfork_h=${ac_cv_header_vfork_h=no}
- ac_cv_lib_dir_opendir=${ac_cv_lib_dir_opendir=no}
- ac_cv_lib_nsl_main=${ac_cv_lib_nsl_main=yes}
- ac_cv_path_csh_path=${ac_cv_path_csh_path=/bin/csh}
- ac_cv_path_install=${ac_cv_path_install='/usr/bin/install -c'}
- ac_cv_path_perl_path=${ac_cv_path_perl_path=/usr/bin/perl}
- ac_cv_prog_AWK=${ac_cv_prog_AWK=mawk}
- ac_cv_prog_CC=${ac_cv_prog_CC=gcc}
- ac_cv_prog_CPP=${ac_cv_prog_CPP='gcc -E'}
- ac_cv_prog_RANLIB=${ac_cv_prog_RANLIB=ranlib}
- ac_cv_prog_YACC=${ac_cv_prog_YACC='bison -y'}
- ac_cv_prog_cc_cross=${ac_cv_prog_cc_cross=no}
- ac_cv_prog_cc_g=${ac_cv_prog_cc_g=yes}
- ac_cv_prog_cc_works=${ac_cv_prog_cc_works=yes}
- ac_cv_prog_gcc=${ac_cv_prog_gcc=yes}
- ac_cv_prog_make_make_set=${ac_cv_prog_make_make_set=yes}
- ac_cv_search_connect=${ac_cv_search_connect='none required'}
- ac_cv_search_crypt=${ac_cv_search_crypt=-lcrypt}
- ac_cv_search_gethostbyname=${ac_cv_search_gethostbyname='none required'}
- ac_cv_search_getspnam=${ac_cv_search_getspnam='none required'}
- ac_cv_struct_st_blksize=${ac_cv_struct_st_blksize=yes}
- ac_cv_sys_interpreter=${ac_cv_sys_interpreter=yes}
- ac_cv_sys_long_file_names=${ac_cv_sys_long_file_names=yes}
- ac_cv_type_mode_t=${ac_cv_type_mode_t=yes}
- ac_cv_type_pid_t=${ac_cv_type_pid_t=yes}
- ac_cv_type_signal=${ac_cv_type_signal=void}
- ac_cv_type_size_t=${ac_cv_type_size_t=yes}
- ac_cv_type_uid_t=${ac_cv_type_uid_t=yes}
- ccvs_cv_sys_cygwin32=${ccvs_cv_sys_cygwin32=no}
--- 0 ----
diff --exclude=CVS -crN ../pristine-ccvs/config.h ./config.h
*** ./config.h	Tue May  9 10:18:09 2000
--- ./config.h	Fri Jun  9 15:48:33 2000
***************
*** 89,94 ****
--- 89,97 ----
  /* Define if you want to use the password authenticated server.  */
  #define AUTH_SERVER_SUPPORT 1
  
+ /* Define if you want MySQL support for password authentication */
+ /* #undef MYSQL_SUPPORT */
+ 
  /* Define if you want encryption support.  */
  /* #undef ENCRYPTION */
  
a15 928
diff --exclude=CVS -crN ../pristine-ccvs/config.log ./config.log
*** ./config.log	Tue May  9 10:17:33 2000
--- ./config.log	Fri Jun  9 15:51:45 2000
***************
*** 1,304 ****
  This file contains any messages produced by compilers while
  running configure, to aid debugging if configure makes a mistake.
  
! configure:587: checking for mawk
! configure:619: checking for gcc
! configure:732: checking whether the C compiler (gcc  ) works
! configure:748: gcc -o conftest    conftest.c  1>&5
! configure:774: checking whether the C compiler (gcc  ) is a cross-compiler
! configure:779: checking whether we are using GNU C
! configure:788: gcc -E conftest.c
! configure:807: checking whether gcc accepts -g
! configure:869: checking for a BSD compatible install
! configure:922: checking whether make sets ${MAKE}
! configure:951: checking for ranlib
! configure:983: checking for bison
! configure:1017: checking for perl
! configure:1053: checking for csh
! configure:1090: checking whether #! works in shell scripts
! configure:1117: checking how to run the C preprocessor
! configure:1138: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1197: checking for AIX
! configure:1222: checking for minix/config.h
! configure:1232: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1228: minix/config.h: No such file or directory
  configure: failed program was:
! #line 1227 "configure"
! #include "confdefs.h"
! #include <minix/config.h>
! configure:1270: checking for POSIXized ISC
! configure:1300: checking for dirent.h that defines DIR
! configure:1313: gcc -c -g -O2  conftest.c 1>&5
! configure:1338: checking for opendir in -ldir
! configure:1357: gcc -o conftest -g -O2   conftest.c -ldir   1>&5
! ld: cannot open -ldir: No such file or directory
! configure: failed program was:
! #line 1346 "configure"
! #include "confdefs.h"
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* We use char because int might match the return type of a gcc2
!     builtin and then its argument prototype would still apply.  */
! char opendir();
! 
! int main() {
! opendir()
! ; return 0; }
! configure:1421: checking for ANSI C header files
! configure:1434: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1501: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:1525: checking for sys/wait.h that is POSIX.1 compatible
! configure:1546: gcc -c -g -O2  conftest.c 1>&5
! configure:1573: checking for errno.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1573: checking for unistd.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1573: checking for string.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1573: checking for memory.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1573: checking for utime.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1573: checking for fcntl.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1573: checking for ndbm.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1579: ndbm.h: No such file or directory
! configure: failed program was:
! #line 1578 "configure"
! #include "confdefs.h"
! #include <ndbm.h>
! configure:1573: checking for limits.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1573: checking for sys/file.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1573: checking for sys/param.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1573: checking for sys/select.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1573: checking for sys/time.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1573: checking for sys/timeb.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1573: checking for io.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1579: io.h: No such file or directory
! configure: failed program was:
! #line 1578 "configure"
! #include "confdefs.h"
! #include <io.h>
! configure:1573: checking for direct.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1579: direct.h: No such file or directory
! configure: failed program was:
! #line 1578 "configure"
! #include "confdefs.h"
! #include <direct.h>
! configure:1573: checking for sys/bsdtypes.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1579: sys/bsdtypes.h: No such file or directory
! configure: failed program was:
! #line 1578 "configure"
! #include "confdefs.h"
! #include <sys/bsdtypes.h>
! configure:1573: checking for sys/resource.h
! configure:1583: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:1610: checking whether stat file-mode macros are broken
! configure:1666: checking whether time.h and sys/time.h may both be included
! configure:1680: gcc -c -g -O2  conftest.c 1>&5
! configure:1702: checking for working const
! configure:1756: gcc -c -g -O2  conftest.c 1>&5
! configure:1777: checking for uid_t in sys/types.h
! configure:1811: checking for mode_t
! configure:1844: checking for pid_t
! configure:1877: checking for size_t
! configure:1910: checking return type of signal handlers
! configure:1932: gcc -c -g -O2  conftest.c 1>&5
! configure:1952: checking for st_blksize in struct stat
! configure:1965: gcc -c -g -O2  conftest.c 1>&5
! configure:1988: checking for mkdir
! configure:2016: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:1988: checking for rename
! configure:2016: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:1988: checking for strstr
! configure:2016: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:1988: checking for dup2
! configure:2016: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:1988: checking for strerror
! configure:2016: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:1988: checking for valloc
! configure:2016: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:1988: checking for waitpid
! configure:2016: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:1988: checking for memmove
! configure:2016: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:1988: checking for strtoul
! configure:2016: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for fchmod
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for fsync
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for ftime
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for mktemp
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for putenv
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for vprintf
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for ftruncate
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for timezone
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for getpagesize
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for initgroups
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for fchdir
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for sigaction
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for sigprocmask
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for sigvec
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for sigsetmask
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for sigblock
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for tempnam
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for tzset
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for readlink
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2045: checking for wait3
! configure:2073: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2109: checking for vfork.h
! configure:2119: gcc -E  conftest.c >/dev/null 2>conftest.out
! configure:2115: vfork.h: No such file or directory
! configure: failed program was:
! #line 2114 "configure"
! #include "confdefs.h"
! #include <vfork.h>
! configure:2144: checking for working vfork
! configure:2295: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2318: checking whether closedir returns void
! configure:2332: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2357: checking for library containing getspnam
! configure:2375: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2422: checking whether utime accepts a null argument
! configure:2443: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2467: checking for long file names
! configure:2512: checking for working fnmatch
! configure:2527: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2555: checking for main in -lnsl
! configure:2570: gcc -o conftest -g -O2   conftest.c -lnsl   1>&5
! configure:2587: checking for library containing connect
! configure:2605: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2721: checking for library containing gethostbyname
! configure:2739: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2794: checking for krb.h
! configure:2842: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2836: krb.h: No such file or directory
! configure: failed program was:
! #line 2835 "configure"
  #include "confdefs.h"
  #include <krb.h>
  int main() {
  int i;
  ; return 0; }
! configure:2860: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2854: krb.h: No such file or directory
  configure: failed program was:
! #line 2853 "configure"
  #include "confdefs.h"
  #include <krb.h>
  int main() {
  int i;
  ; return 0; }
! configure:3087: checking for krb_get_err_text
! configure:3115: gcc -o conftest -g -O2   conftest.c  1>&5
! /tmp/cc8UGVih: In function `main':
! /home/kfogel/src/ccvs/configure:3109: undefined reference to `krb_get_err_text'
! configure: failed program was:
! #line 3092 "configure"
! #include "confdefs.h"
! /* System header to define __stub macros and hopefully few prototypes,
!     which can conflict with char krb_get_err_text(); below.  */
! #include <assert.h>
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* We use char because int might match the return type of a gcc2
!     builtin and then its argument prototype would still apply.  */
! char krb_get_err_text();
! 
! int main() {
! 
! /* The GNU C library defines this for functions which it implements
!     to always fail with ENOSYS.  Some functions are actually named
!     something starting with __ and the normal name is an alias.  */
! #if defined (__stub_krb_get_err_text) || defined (__stub___krb_get_err_text)
! choke me
! #else
! krb_get_err_text();
! #endif
! 
! ; return 0; }
! configure:3156: checking for krb5.h
! configure:3166: gcc -E  -I/usr/cygnus/kerbnet/include  conftest.c >/dev/null 2>conftest.out
! configure:3162: krb5.h: No such file or directory
! configure: failed program was:
! #line 3161 "configure"
! #include "confdefs.h"
! #include <krb5.h>
! configure:3156: checking for gssapi.h
! configure:3166: gcc -E  -I/usr/cygnus/kerbnet/include  conftest.c >/dev/null 2>conftest.out
! configure:3162: gssapi.h: No such file or directory
! configure: failed program was:
! #line 3161 "configure"
! #include "confdefs.h"
! #include <gssapi.h>
! configure:3156: checking for gssapi/gssapi.h
! configure:3166: gcc -E  -I/usr/cygnus/kerbnet/include  conftest.c >/dev/null 2>conftest.out
! configure:3162: gssapi/gssapi.h: No such file or directory
! configure: failed program was:
! #line 3161 "configure"
! #include "confdefs.h"
! #include <gssapi/gssapi.h>
! configure:3156: checking for gssapi/gssapi_generic.h
! configure:3166: gcc -E  -I/usr/cygnus/kerbnet/include  conftest.c >/dev/null 2>conftest.out
! configure:3162: gssapi/gssapi_generic.h: No such file or directory
! configure: failed program was:
! #line 3161 "configure"
! #include "confdefs.h"
! #include <gssapi/gssapi_generic.h>
! configure:3315: checking for gethostname
! configure:3343: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:3408: checking for library containing crypt
! configure:3426: gcc -o conftest -g -O2   conftest.c  1>&5
! /tmp/ccyTTtLI: In function `main':
! /home/kfogel/src/ccvs/configure:3422: undefined reference to `crypt'
! configure: failed program was:
! #line 3415 "configure"
! #include "confdefs.h"
! /* Override any gcc2 internal prototype to avoid an error.  */
! /* We use char because int might match the return type of a gcc2
!     builtin and then its argument prototype would still apply.  */
! char crypt();
! 
! int main() {
! crypt()
! ; return 0; }
! configure:3448: gcc -o conftest -g -O2   conftest.c -lcrypt   1>&5
! configure:3478: checking for cygwin32
! configure:3490: gcc -c -g -O2  conftest.c 1>&5
! configure: In function `main':
! configure:3486: `__CYGWIN32__' undeclared (first use this function)
! configure:3486: (Each undeclared identifier is reported only once
! configure:3486: for each function it appears in.)
! configure: failed program was:
! #line 3483 "configure"
! #include "confdefs.h"
! 
! int main() {
! return __CYGWIN32__;
! ; return 0; }
--- 1,118 ----
  This file contains any messages produced by compilers while
  running configure, to aid debugging if configure makes a mistake.
  
! configure:549: checking for cvs
! configure:593: checking for mawk
! configure:625: checking for gcc
! configure:738: checking whether the C compiler (gcc  ) works
! configure:754: gcc -o conftest    conftest.c  1>&5
! configure:780: checking whether the C compiler (gcc  ) is a cross-compiler
! configure:785: checking whether we are using GNU C
! configure:813: checking whether gcc accepts -g
! configure:875: checking for a BSD compatible install
! configure:928: checking whether make sets ${MAKE}
! configure:957: checking for ranlib
! configure:989: checking for bison
! configure:1023: checking for perl
! configure:1059: checking for csh
! configure:1096: checking whether #! works in shell scripts
! configure:1123: checking how to run the C preprocessor
! configure:1203: checking for AIX
! configure:1228: checking for minix/config.h
! configure:1276: checking for POSIXized ISC
! configure:1306: checking for dirent.h that defines DIR
! configure:1344: checking for opendir in -ldir
! configure:1427: checking for ANSI C header files
! configure:1531: checking for sys/wait.h that is POSIX.1 compatible
! configure:1579: checking for errno.h
! configure:1579: checking for unistd.h
! configure:1579: checking for string.h
! configure:1579: checking for memory.h
! configure:1579: checking for utime.h
! configure:1579: checking for fcntl.h
! configure:1579: checking for ndbm.h
! configure:1579: checking for limits.h
! configure:1579: checking for sys/file.h
! configure:1579: checking for sys/param.h
! configure:1579: checking for sys/select.h
! configure:1579: checking for sys/time.h
! configure:1579: checking for sys/timeb.h
! configure:1579: checking for io.h
! configure:1579: checking for direct.h
! configure:1579: checking for sys/bsdtypes.h
! configure:1579: checking for sys/resource.h
! configure:1616: checking whether stat file-mode macros are broken
! configure:1672: checking whether time.h and sys/time.h may both be included
! configure:1708: checking for working const
! configure:1783: checking for uid_t in sys/types.h
! configure:1817: checking for mode_t
! configure:1850: checking for pid_t
! configure:1883: checking for size_t
! configure:1916: checking return type of signal handlers
! configure:1958: checking for st_blksize in struct stat
! configure:1994: checking for mkdir
! configure:1994: checking for rename
! configure:1994: checking for strstr
! configure:1994: checking for dup2
! configure:1994: checking for strerror
! configure:1994: checking for valloc
! configure:1994: checking for waitpid
! configure:1994: checking for memmove
! configure:1994: checking for strtoul
! configure:2051: checking for fchmod
! configure:2051: checking for fsync
! configure:2051: checking for ftime
! configure:2051: checking for mktemp
! configure:2051: checking for putenv
! configure:2051: checking for vprintf
! configure:2051: checking for ftruncate
! configure:2051: checking for timezone
! configure:2051: checking for getpagesize
! configure:2051: checking for initgroups
! configure:2051: checking for fchdir
! configure:2051: checking for sigaction
! configure:2051: checking for sigprocmask
! configure:2051: checking for sigvec
! configure:2051: checking for sigsetmask
! configure:2051: checking for sigblock
! configure:2051: checking for tempnam
! configure:2051: checking for tzset
! configure:2051: checking for readlink
! configure:2051: checking for wait3
! configure:2115: checking for vfork.h
! configure:2150: checking for working vfork
! configure:2324: checking whether closedir returns void
! configure:2363: checking for library containing getspnam
! configure:2428: checking whether utime accepts a null argument
! configure:2473: checking for long file names
! configure:2518: checking for working fnmatch
! configure:2561: checking for main in -lnsl
! configure:2593: checking for library containing connect
! configure:2727: checking for library containing gethostbyname
! configure:2800: checking for krb.h
! configure:2848: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2842: krb.h: No such file or directory
  configure: failed program was:
! #line 2841 "configure"
  #include "confdefs.h"
  #include <krb.h>
  int main() {
  int i;
  ; return 0; }
! configure:2866: gcc -o conftest -g -O2   conftest.c  1>&5
! configure:2860: krb.h: No such file or directory
  configure: failed program was:
! #line 2859 "configure"
  #include "confdefs.h"
  #include <krb.h>
  int main() {
  int i;
  ; return 0; }
! configure:3093: checking for krb_get_err_text
! configure:3162: checking for krb5.h
! configure:3162: checking for gssapi.h
! configure:3162: checking for gssapi/gssapi.h
! configure:3162: checking for gssapi/gssapi_generic.h
! configure:3321: checking for gethostname
! configure:3414: checking for library containing crypt
! configure:3554: checking for cygwin32
diff --exclude=CVS -crN ../pristine-ccvs/config.status ./config.status
*** ./config.status	Tue May  9 10:17:42 2000
--- ./config.status	Wed Dec 31 18:00:00 1969
***************
*** 1,494 ****
- #! /bin/sh
- # Generated automatically by configure.
- # Run this file to recreate the current configuration.
- # This directory was configured as follows,
- # on host galois:
- #
- # ./configure  --prefix=/usr/local
- #
- # Compiler output produced by configure, useful for debugging
- # configure, is in ./config.log if it exists.
- 
- ac_cs_usage="Usage: ./config.status [--recheck] [--version] [--help]"
- for ac_option
- do
-   case "$ac_option" in
-   -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-     echo "running ${CONFIG_SHELL-/bin/sh} ./configure  --prefix=/usr/local --no-create --no-recursion"
-     exec ${CONFIG_SHELL-/bin/sh} ./configure  --prefix=/usr/local --no-create --no-recursion ;;
-   -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
-     echo "./config.status generated by autoconf version 2.13"
-     exit 0 ;;
-   -help | --help | --hel | --he | --h)
-     echo "$ac_cs_usage"; exit 0 ;;
-   *) echo "$ac_cs_usage"; exit 1 ;;
-   esac
- done
- 
- ac_given_srcdir=.
- ac_given_INSTALL="/usr/bin/install -c"
- 
- trap 'rm -fr Makefile lib/Makefile src/Makefile zlib/Makefile diff/Makefile doc/Makefile 	  man/Makefile tools/Makefile 	  contrib/Makefile 	  windows-NT/Makefile windows-NT/SCC/Makefile 	  os2/Makefile emx/Makefile vms/Makefile 	  stamp-h config.h src/options.h conftest*; exit 1' 1 2 15
- 
- # Protect against being on the right side of a sed subst in config.status.
- sed 's/%@@/@@@@/; s/@@%/@@@@/; s/%g$/@@g/; /@@g$/s/[\\&%]/\\&/g;
-  s/@@@@/%@@/; s/@@@@/@@%/; s/@@g$/%g/' > conftest.subs <<\CEOF
- /^[ 	]*VPATH[ 	]*=[^:]*$/d
- 
- s%@@SHELL@@%/bin/sh%g
- s%@@CFLAGS@@%-g -O2%g
- s%@@CPPFLAGS@@%%g
- s%@@CXXFLAGS@@%%g
- s%@@FFLAGS@@%%g
- s%@@DEFS@@%-DHAVE_CONFIG_H%g
- s%@@LDFLAGS@@%%g
- s%@@LIBS@@%-lcrypt %g
- s%@@exec_prefix@@%${prefix}%g
- s%@@prefix@@%/usr/local%g
- s%@@program_transform_name@@%s,x,x,%g
- s%@@bindir@@%${exec_prefix}/bin%g
- s%@@sbindir@@%${exec_prefix}/sbin%g
- s%@@libexecdir@@%${exec_prefix}/libexec%g
- s%@@datadir@@%${prefix}/share%g
- s%@@sysconfdir@@%${prefix}/etc%g
- s%@@sharedstatedir@@%${prefix}/com%g
- s%@@localstatedir@@%${prefix}/var%g
- s%@@libdir@@%${exec_prefix}/lib%g
- s%@@includedir@@%${prefix}/include%g
- s%@@oldincludedir@@%/usr/include%g
- s%@@infodir@@%${prefix}/info%g
- s%@@mandir@@%${prefix}/man%g
- s%@@CVS@@%%g
- s%@@AWK@@%mawk%g
- s%@@CC@@%gcc%g
- s%@@INSTALL_PROGRAM@@%${INSTALL}%g
- s%@@INSTALL_SCRIPT@@%${INSTALL_PROGRAM}%g
- s%@@INSTALL_DATA@@%${INSTALL} -m 644%g
- s%@@SET_MAKE@@%%g
- s%@@RANLIB@@%ranlib%g
- s%@@YACC@@%bison -y%g
- s%@@perl_path@@%/usr/bin/perl%g
- s%@@csh_path@@%/bin/csh%g
- s%@@CPP@@%gcc -E%g
- s%@@LIBOBJS@@%%g
- s%@@KRB4@@%/usr/kerberos%g
- s%@@includeopt@@%%g
- s%@@GSSAPI@@%/usr/cygnus/kerbnet%g
- 
- CEOF
- 
- # Split the substitutions into bite-sized pieces for seds with
- # small command number limits, like on Digital OSF/1 and HP-UX.
- ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
- ac_file=1 # Number of current file.
- ac_beg=1 # First line for current file.
- ac_end=$ac_max_sed_cmds # Line after last line for current file.
- ac_more_lines=:
- ac_sed_cmds=""
- while $ac_more_lines; do
-   if test $ac_beg -gt 1; then
-     sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
-   else
-     sed "${ac_end}q" conftest.subs > conftest.s$ac_file
-   fi
-   if test ! -s conftest.s$ac_file; then
-     ac_more_lines=false
-     rm -f conftest.s$ac_file
-   else
-     if test -z "$ac_sed_cmds"; then
-       ac_sed_cmds="sed -f conftest.s$ac_file"
-     else
-       ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
-     fi
-     ac_file=`expr $ac_file + 1`
-     ac_beg=$ac_end
-     ac_end=`expr $ac_end + $ac_max_sed_cmds`
-   fi
- done
- if test -z "$ac_sed_cmds"; then
-   ac_sed_cmds=cat
- fi
- 
- CONFIG_FILES=${CONFIG_FILES-"Makefile lib/Makefile src/Makefile zlib/Makefile diff/Makefile doc/Makefile 	  man/Makefile tools/Makefile 	  contrib/Makefile 	  windows-NT/Makefile windows-NT/SCC/Makefile 	  os2/Makefile emx/Makefile vms/Makefile 	  stamp-h"}
- for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
-   # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-   case "$ac_file" in
-   *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
-        ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
-   *) ac_file_in="${ac_file}.in" ;;
-   esac
- 
-   # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
- 
-   # Remove last slash and all that follows it.  Not all systems have dirname.
-   ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
-   if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
-     # The file is in a subdirectory.
-     test ! -d "$ac_dir" && mkdir "$ac_dir"
-     ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
-     # A "../" for each directory in $ac_dir_suffix.
-     ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
-   else
-     ac_dir_suffix= ac_dots=
-   fi
- 
-   case "$ac_given_srcdir" in
-   .)  srcdir=.
-       if test -z "$ac_dots"; then top_srcdir=.
-       else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
-   /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
-   *) # Relative path.
-     srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
-     top_srcdir="$ac_dots$ac_given_srcdir" ;;
-   esac
- 
-   case "$ac_given_INSTALL" in
-   [/$]*) INSTALL="$ac_given_INSTALL" ;;
-   *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
-   esac
- 
-   echo creating "$ac_file"
-   rm -f "$ac_file"
-   configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
-   case "$ac_file" in
-   *Makefile*) ac_comsub="1i\\
- # $configure_input" ;;
-   *) ac_comsub= ;;
-   esac
- 
-   ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
-   sed -e "$ac_comsub
- s%@@configure_input@@%$configure_input%g
- s%@@srcdir@@%$srcdir%g
- s%@@top_srcdir@@%$top_srcdir%g
- s%@@INSTALL@@%$INSTALL%g
- " $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
- fi; done
- rm -f conftest.s*
- 
- # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
- # NAME is the cpp macro being defined and VALUE is the value it is being given.
- #
- # ac_d sets the value in "#define NAME VALUE" lines.
- ac_dA='s%^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
- ac_dB='\([ 	][ 	]*\)[^ 	]*%\1#\2'
- ac_dC='\3'
- ac_dD='%g'
- # ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
- ac_uA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
- ac_uB='\([ 	]\)%\1#\2define\3'
- ac_uC=' '
- ac_uD='\4%g'
- # ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
- ac_eA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
- ac_eB='$%\1#\2define\3'
- ac_eC=' '
- ac_eD='%g'
- 
- if test "${CONFIG_HEADERS+set}" != set; then
-   CONFIG_HEADERS="config.h src/options.h"
- fi
- for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
-   # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
-   case "$ac_file" in
-   *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
-        ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
-   *) ac_file_in="${ac_file}.in" ;;
-   esac
- 
-   echo creating $ac_file
- 
-   rm -f conftest.frag conftest.in conftest.out
-   ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
-   cat $ac_file_inputs > conftest.in
- 
-   cat > conftest.frag <<CEOF
- ${ac_dA}HAVE_DIRENT_H${ac_dB}HAVE_DIRENT_H${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_DIRENT_H${ac_uB}HAVE_DIRENT_H${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_DIRENT_H${ac_eB}HAVE_DIRENT_H${ac_eC}1${ac_eD}
- ${ac_dA}STDC_HEADERS${ac_dB}STDC_HEADERS${ac_dC}1${ac_dD}
- ${ac_uA}STDC_HEADERS${ac_uB}STDC_HEADERS${ac_uC}1${ac_uD}
- ${ac_eA}STDC_HEADERS${ac_eB}STDC_HEADERS${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_SYS_WAIT_H${ac_dB}HAVE_SYS_WAIT_H${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_SYS_WAIT_H${ac_uB}HAVE_SYS_WAIT_H${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_SYS_WAIT_H${ac_eB}HAVE_SYS_WAIT_H${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_ERRNO_H${ac_dB}HAVE_ERRNO_H${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_ERRNO_H${ac_uB}HAVE_ERRNO_H${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_ERRNO_H${ac_eB}HAVE_ERRNO_H${ac_eC}1${ac_eD}
- CEOF
-   sed -f conftest.frag conftest.in > conftest.out
-   rm -f conftest.in
-   mv conftest.out conftest.in
- 
-   cat > conftest.frag <<CEOF
- ${ac_dA}HAVE_UNISTD_H${ac_dB}HAVE_UNISTD_H${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_UNISTD_H${ac_uB}HAVE_UNISTD_H${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_UNISTD_H${ac_eB}HAVE_UNISTD_H${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_STRING_H${ac_dB}HAVE_STRING_H${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_STRING_H${ac_uB}HAVE_STRING_H${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_STRING_H${ac_eB}HAVE_STRING_H${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_MEMORY_H${ac_dB}HAVE_MEMORY_H${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_MEMORY_H${ac_uB}HAVE_MEMORY_H${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_MEMORY_H${ac_eB}HAVE_MEMORY_H${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_UTIME_H${ac_dB}HAVE_UTIME_H${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_UTIME_H${ac_uB}HAVE_UTIME_H${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_UTIME_H${ac_eB}HAVE_UTIME_H${ac_eC}1${ac_eD}
- CEOF
-   sed -f conftest.frag conftest.in > conftest.out
-   rm -f conftest.in
-   mv conftest.out conftest.in
- 
-   cat > conftest.frag <<CEOF
- ${ac_dA}HAVE_FCNTL_H${ac_dB}HAVE_FCNTL_H${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_FCNTL_H${ac_uB}HAVE_FCNTL_H${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_FCNTL_H${ac_eB}HAVE_FCNTL_H${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_LIMITS_H${ac_dB}HAVE_LIMITS_H${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_LIMITS_H${ac_uB}HAVE_LIMITS_H${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_LIMITS_H${ac_eB}HAVE_LIMITS_H${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_SYS_FILE_H${ac_dB}HAVE_SYS_FILE_H${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_SYS_FILE_H${ac_uB}HAVE_SYS_FILE_H${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_SYS_FILE_H${ac_eB}HAVE_SYS_FILE_H${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_SYS_PARAM_H${ac_dB}HAVE_SYS_PARAM_H${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_SYS_PARAM_H${ac_uB}HAVE_SYS_PARAM_H${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_SYS_PARAM_H${ac_eB}HAVE_SYS_PARAM_H${ac_eC}1${ac_eD}
- CEOF
-   sed -f conftest.frag conftest.in > conftest.out
-   rm -f conftest.in
-   mv conftest.out conftest.in
- 
-   cat > conftest.frag <<CEOF
- ${ac_dA}HAVE_SYS_SELECT_H${ac_dB}HAVE_SYS_SELECT_H${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_SYS_SELECT_H${ac_uB}HAVE_SYS_SELECT_H${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_SYS_SELECT_H${ac_eB}HAVE_SYS_SELECT_H${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_SYS_TIME_H${ac_dB}HAVE_SYS_TIME_H${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_SYS_TIME_H${ac_uB}HAVE_SYS_TIME_H${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_SYS_TIME_H${ac_eB}HAVE_SYS_TIME_H${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_SYS_TIMEB_H${ac_dB}HAVE_SYS_TIMEB_H${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_SYS_TIMEB_H${ac_uB}HAVE_SYS_TIMEB_H${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_SYS_TIMEB_H${ac_eB}HAVE_SYS_TIMEB_H${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_SYS_RESOURCE_H${ac_dB}HAVE_SYS_RESOURCE_H${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_SYS_RESOURCE_H${ac_uB}HAVE_SYS_RESOURCE_H${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_SYS_RESOURCE_H${ac_eB}HAVE_SYS_RESOURCE_H${ac_eC}1${ac_eD}
- CEOF
-   sed -f conftest.frag conftest.in > conftest.out
-   rm -f conftest.in
-   mv conftest.out conftest.in
- 
-   cat > conftest.frag <<CEOF
- ${ac_dA}TIME_WITH_SYS_TIME${ac_dB}TIME_WITH_SYS_TIME${ac_dC}1${ac_dD}
- ${ac_uA}TIME_WITH_SYS_TIME${ac_uB}TIME_WITH_SYS_TIME${ac_uC}1${ac_uD}
- ${ac_eA}TIME_WITH_SYS_TIME${ac_eB}TIME_WITH_SYS_TIME${ac_eC}1${ac_eD}
- ${ac_dA}RETSIGTYPE${ac_dB}RETSIGTYPE${ac_dC}void${ac_dD}
- ${ac_uA}RETSIGTYPE${ac_uB}RETSIGTYPE${ac_uC}void${ac_uD}
- ${ac_eA}RETSIGTYPE${ac_eB}RETSIGTYPE${ac_eC}void${ac_eD}
- ${ac_dA}HAVE_ST_BLKSIZE${ac_dB}HAVE_ST_BLKSIZE${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_ST_BLKSIZE${ac_uB}HAVE_ST_BLKSIZE${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_ST_BLKSIZE${ac_eB}HAVE_ST_BLKSIZE${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_MKDIR${ac_dB}HAVE_MKDIR${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_MKDIR${ac_uB}HAVE_MKDIR${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_MKDIR${ac_eB}HAVE_MKDIR${ac_eC}1${ac_eD}
- CEOF
-   sed -f conftest.frag conftest.in > conftest.out
-   rm -f conftest.in
-   mv conftest.out conftest.in
- 
-   cat > conftest.frag <<CEOF
- ${ac_dA}HAVE_RENAME${ac_dB}HAVE_RENAME${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_RENAME${ac_uB}HAVE_RENAME${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_RENAME${ac_eB}HAVE_RENAME${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_STRSTR${ac_dB}HAVE_STRSTR${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_STRSTR${ac_uB}HAVE_STRSTR${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_STRSTR${ac_eB}HAVE_STRSTR${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_DUP2${ac_dB}HAVE_DUP2${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_DUP2${ac_uB}HAVE_DUP2${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_DUP2${ac_eB}HAVE_DUP2${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_STRERROR${ac_dB}HAVE_STRERROR${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_STRERROR${ac_uB}HAVE_STRERROR${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_STRERROR${ac_eB}HAVE_STRERROR${ac_eC}1${ac_eD}
- CEOF
-   sed -f conftest.frag conftest.in > conftest.out
-   rm -f conftest.in
-   mv conftest.out conftest.in
- 
-   cat > conftest.frag <<CEOF
- ${ac_dA}HAVE_VALLOC${ac_dB}HAVE_VALLOC${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_VALLOC${ac_uB}HAVE_VALLOC${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_VALLOC${ac_eB}HAVE_VALLOC${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_WAITPID${ac_dB}HAVE_WAITPID${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_WAITPID${ac_uB}HAVE_WAITPID${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_WAITPID${ac_eB}HAVE_WAITPID${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_MEMMOVE${ac_dB}HAVE_MEMMOVE${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_MEMMOVE${ac_uB}HAVE_MEMMOVE${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_MEMMOVE${ac_eB}HAVE_MEMMOVE${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_STRTOUL${ac_dB}HAVE_STRTOUL${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_STRTOUL${ac_uB}HAVE_STRTOUL${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_STRTOUL${ac_eB}HAVE_STRTOUL${ac_eC}1${ac_eD}
- CEOF
-   sed -f conftest.frag conftest.in > conftest.out
-   rm -f conftest.in
-   mv conftest.out conftest.in
- 
-   cat > conftest.frag <<CEOF
- ${ac_dA}HAVE_FCHMOD${ac_dB}HAVE_FCHMOD${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_FCHMOD${ac_uB}HAVE_FCHMOD${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_FCHMOD${ac_eB}HAVE_FCHMOD${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_FSYNC${ac_dB}HAVE_FSYNC${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_FSYNC${ac_uB}HAVE_FSYNC${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_FSYNC${ac_eB}HAVE_FSYNC${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_FTIME${ac_dB}HAVE_FTIME${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_FTIME${ac_uB}HAVE_FTIME${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_FTIME${ac_eB}HAVE_FTIME${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_MKTEMP${ac_dB}HAVE_MKTEMP${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_MKTEMP${ac_uB}HAVE_MKTEMP${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_MKTEMP${ac_eB}HAVE_MKTEMP${ac_eC}1${ac_eD}
- CEOF
-   sed -f conftest.frag conftest.in > conftest.out
-   rm -f conftest.in
-   mv conftest.out conftest.in
- 
-   cat > conftest.frag <<CEOF
- ${ac_dA}HAVE_PUTENV${ac_dB}HAVE_PUTENV${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_PUTENV${ac_uB}HAVE_PUTENV${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_PUTENV${ac_eB}HAVE_PUTENV${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_VPRINTF${ac_dB}HAVE_VPRINTF${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_VPRINTF${ac_uB}HAVE_VPRINTF${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_VPRINTF${ac_eB}HAVE_VPRINTF${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_FTRUNCATE${ac_dB}HAVE_FTRUNCATE${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_FTRUNCATE${ac_uB}HAVE_FTRUNCATE${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_FTRUNCATE${ac_eB}HAVE_FTRUNCATE${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_TIMEZONE${ac_dB}HAVE_TIMEZONE${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_TIMEZONE${ac_uB}HAVE_TIMEZONE${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_TIMEZONE${ac_eB}HAVE_TIMEZONE${ac_eC}1${ac_eD}
- CEOF
-   sed -f conftest.frag conftest.in > conftest.out
-   rm -f conftest.in
-   mv conftest.out conftest.in
- 
-   cat > conftest.frag <<CEOF
- ${ac_dA}HAVE_GETPAGESIZE${ac_dB}HAVE_GETPAGESIZE${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_GETPAGESIZE${ac_uB}HAVE_GETPAGESIZE${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_GETPAGESIZE${ac_eB}HAVE_GETPAGESIZE${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_INITGROUPS${ac_dB}HAVE_INITGROUPS${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_INITGROUPS${ac_uB}HAVE_INITGROUPS${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_INITGROUPS${ac_eB}HAVE_INITGROUPS${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_FCHDIR${ac_dB}HAVE_FCHDIR${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_FCHDIR${ac_uB}HAVE_FCHDIR${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_FCHDIR${ac_eB}HAVE_FCHDIR${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_SIGACTION${ac_dB}HAVE_SIGACTION${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_SIGACTION${ac_uB}HAVE_SIGACTION${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_SIGACTION${ac_eB}HAVE_SIGACTION${ac_eC}1${ac_eD}
- CEOF
-   sed -f conftest.frag conftest.in > conftest.out
-   rm -f conftest.in
-   mv conftest.out conftest.in
- 
-   cat > conftest.frag <<CEOF
- ${ac_dA}HAVE_SIGPROCMASK${ac_dB}HAVE_SIGPROCMASK${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_SIGPROCMASK${ac_uB}HAVE_SIGPROCMASK${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_SIGPROCMASK${ac_eB}HAVE_SIGPROCMASK${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_SIGVEC${ac_dB}HAVE_SIGVEC${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_SIGVEC${ac_uB}HAVE_SIGVEC${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_SIGVEC${ac_eB}HAVE_SIGVEC${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_SIGSETMASK${ac_dB}HAVE_SIGSETMASK${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_SIGSETMASK${ac_uB}HAVE_SIGSETMASK${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_SIGSETMASK${ac_eB}HAVE_SIGSETMASK${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_SIGBLOCK${ac_dB}HAVE_SIGBLOCK${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_SIGBLOCK${ac_uB}HAVE_SIGBLOCK${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_SIGBLOCK${ac_eB}HAVE_SIGBLOCK${ac_eC}1${ac_eD}
- CEOF
-   sed -f conftest.frag conftest.in > conftest.out
-   rm -f conftest.in
-   mv conftest.out conftest.in
- 
-   cat > conftest.frag <<CEOF
- ${ac_dA}HAVE_TEMPNAM${ac_dB}HAVE_TEMPNAM${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_TEMPNAM${ac_uB}HAVE_TEMPNAM${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_TEMPNAM${ac_eB}HAVE_TEMPNAM${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_TZSET${ac_dB}HAVE_TZSET${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_TZSET${ac_uB}HAVE_TZSET${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_TZSET${ac_eB}HAVE_TZSET${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_READLINK${ac_dB}HAVE_READLINK${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_READLINK${ac_uB}HAVE_READLINK${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_READLINK${ac_eB}HAVE_READLINK${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_WAIT3${ac_dB}HAVE_WAIT3${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_WAIT3${ac_uB}HAVE_WAIT3${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_WAIT3${ac_eB}HAVE_WAIT3${ac_eC}1${ac_eD}
- CEOF
-   sed -f conftest.frag conftest.in > conftest.out
-   rm -f conftest.in
-   mv conftest.out conftest.in
- 
-   cat > conftest.frag <<CEOF
- ${ac_dA}HAVE_STRCHR${ac_dB}HAVE_STRCHR${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_STRCHR${ac_uB}HAVE_STRCHR${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_STRCHR${ac_eB}HAVE_STRCHR${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_MEMCHR${ac_dB}HAVE_MEMCHR${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_MEMCHR${ac_uB}HAVE_MEMCHR${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_MEMCHR${ac_eB}HAVE_MEMCHR${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_GETSPNAM${ac_dB}HAVE_GETSPNAM${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_GETSPNAM${ac_uB}HAVE_GETSPNAM${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_GETSPNAM${ac_eB}HAVE_GETSPNAM${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_UTIME_NULL${ac_dB}HAVE_UTIME_NULL${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_UTIME_NULL${ac_uB}HAVE_UTIME_NULL${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_UTIME_NULL${ac_eB}HAVE_UTIME_NULL${ac_eC}1${ac_eD}
- CEOF
-   sed -f conftest.frag conftest.in > conftest.out
-   rm -f conftest.in
-   mv conftest.out conftest.in
- 
-   cat > conftest.frag <<CEOF
- ${ac_dA}HAVE_LONG_FILE_NAMES${ac_dB}HAVE_LONG_FILE_NAMES${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_LONG_FILE_NAMES${ac_uB}HAVE_LONG_FILE_NAMES${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_LONG_FILE_NAMES${ac_eB}HAVE_LONG_FILE_NAMES${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_FNMATCH${ac_dB}HAVE_FNMATCH${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_FNMATCH${ac_uB}HAVE_FNMATCH${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_FNMATCH${ac_eB}HAVE_FNMATCH${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_CONNECT${ac_dB}HAVE_CONNECT${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_CONNECT${ac_uB}HAVE_CONNECT${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_CONNECT${ac_eB}HAVE_CONNECT${ac_eC}1${ac_eD}
- ${ac_dA}CLIENT_SUPPORT${ac_dB}CLIENT_SUPPORT${ac_dC}1${ac_dD}
- ${ac_uA}CLIENT_SUPPORT${ac_uB}CLIENT_SUPPORT${ac_uC}1${ac_uD}
- ${ac_eA}CLIENT_SUPPORT${ac_eB}CLIENT_SUPPORT${ac_eC}1${ac_eD}
- CEOF
-   sed -f conftest.frag conftest.in > conftest.out
-   rm -f conftest.in
-   mv conftest.out conftest.in
- 
-   cat > conftest.frag <<CEOF
- ${ac_dA}SERVER_SUPPORT${ac_dB}SERVER_SUPPORT${ac_dC}1${ac_dD}
- ${ac_uA}SERVER_SUPPORT${ac_uB}SERVER_SUPPORT${ac_uC}1${ac_uD}
- ${ac_eA}SERVER_SUPPORT${ac_eB}SERVER_SUPPORT${ac_eC}1${ac_eD}
- ${ac_dA}HAVE_CRYPT${ac_dB}HAVE_CRYPT${ac_dC}1${ac_dD}
- ${ac_uA}HAVE_CRYPT${ac_uB}HAVE_CRYPT${ac_uC}1${ac_uD}
- ${ac_eA}HAVE_CRYPT${ac_eB}HAVE_CRYPT${ac_eC}1${ac_eD}
- ${ac_dA}AUTH_SERVER_SUPPORT${ac_dB}AUTH_SERVER_SUPPORT${ac_dC}1${ac_dD}
- ${ac_uA}AUTH_SERVER_SUPPORT${ac_uB}AUTH_SERVER_SUPPORT${ac_uC}1${ac_uD}
- ${ac_eA}AUTH_SERVER_SUPPORT${ac_eB}AUTH_SERVER_SUPPORT${ac_eC}1${ac_eD}
- s%^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
- CEOF
-   sed -f conftest.frag conftest.in > conftest.out
-   rm -f conftest.in
-   mv conftest.out conftest.in
- 
-   rm -f conftest.frag conftest.h
-   echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
-   cat conftest.in >> conftest.h
-   rm -f conftest.in
-   if cmp -s $ac_file conftest.h 2>/dev/null; then
-     echo "$ac_file is unchanged"
-     rm -f conftest.h
-   else
-     # Remove last slash and all that follows it.  Not all systems have dirname.
-       ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
-       if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
-       # The file is in a subdirectory.
-       test ! -d "$ac_dir" && mkdir "$ac_dir"
-     fi
-     rm -f $ac_file
-     mv conftest.h $ac_file
-   fi
- fi; done
- 
- 
- 
- exit 0
--- 0 ----
@


1.6
log
@Don't conditionalize the presence of the verify_*() functions on
MYSQL_SUPPORT.
@
text
@d3 1
a3 1
--- ./config.cache	Fri Jun  9 15:48:43 2000
d5 108
a112 9
*** 78,83 ****
--- 78,84 ----
  ac_cv_header_vfork_h=${ac_cv_header_vfork_h=no}
  ac_cv_lib_dir_opendir=${ac_cv_lib_dir_opendir=no}
  ac_cv_lib_nsl_main=${ac_cv_lib_nsl_main=yes}
+ ac_cv_path_CVS=${ac_cv_path_CVS=/usr/local/bin/cvs}
  ac_cv_path_csh_path=${ac_cv_path_csh_path=/bin/csh}
  ac_cv_path_install=${ac_cv_path_install='/usr/bin/install -c'}
  ac_cv_path_perl_path=${ac_cv_path_perl_path=/usr/bin/perl}
d145 1
a145 1
--- ./config.log	Fri Jun  9 15:48:43 2000
d573 1
a573 1
--- ./config.status	Fri Jun  9 15:48:43 2000
d575 496
a1070 52
*** 4,10 ****
  # This directory was configured as follows,
  # on host galois:
  #
! # ./configure  --prefix=/usr/local
  #
  # Compiler output produced by configure, useful for debugging
  # configure, is in ./config.log if it exists.
--- 4,10 ----
  # This directory was configured as follows,
  # on host galois:
  #
! # ./configure 
  #
  # Compiler output produced by configure, useful for debugging
  # configure, is in ./config.log if it exists.
***************
*** 14,21 ****
  do
    case "$ac_option" in
    -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
!     echo "running ${CONFIG_SHELL-/bin/sh} ./configure  --prefix=/usr/local --no-create --no-recursion"
!     exec ${CONFIG_SHELL-/bin/sh} ./configure  --prefix=/usr/local --no-create --no-recursion ;;
    -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
      echo "./config.status generated by autoconf version 2.13"
      exit 0 ;;
--- 14,21 ----
  do
    case "$ac_option" in
    -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
!     echo "running ${CONFIG_SHELL-/bin/sh} ./configure  --no-create --no-recursion"
!     exec ${CONFIG_SHELL-/bin/sh} ./configure  --no-create --no-recursion ;;
    -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
      echo "./config.status generated by autoconf version 2.13"
      exit 0 ;;
***************
*** 58,64 ****
  s%@@oldincludedir@@%/usr/include%g
  s%@@infodir@@%${prefix}/info%g
  s%@@mandir@@%${prefix}/man%g
! s%@@CVS@@%%g
  s%@@AWK@@%mawk%g
  s%@@CC@@%gcc%g
  s%@@INSTALL_PROGRAM@@%${INSTALL}%g
--- 58,64 ----
  s%@@oldincludedir@@%/usr/include%g
  s%@@infodir@@%${prefix}/info%g
  s%@@mandir@@%${prefix}/man%g
! s%@@CVS@@%/usr/local/bin/cvs%g
  s%@@AWK@@%mawk%g
  s%@@CC@@%gcc%g
  s%@@INSTALL_PROGRAM@@%${INSTALL}%g
d3941 1
a3941 1
--- ./src/Makefile	Fri Jun  9 15:48:43 2000
d4080 1
a4080 1
--- ./src/client.c	Fri Jun  9 14:26:38 2000
d4450 1
a4450 1
--- ./src/local_auth.c	Fri Jun  9 12:06:03 2000
d4453 1
a4453 1
--- 1,371 ----
d4497 5
a4501 4
+ /* Check for permission to read/write (for us, write and create are the same)
+  * from the Tigris database. Note that domain level privs supercede
+  * project level, which supercede module level. At this time there is no way
+  * to remove privs from someone who has them higher up.
d4503 2
a4504 2
+  * Returns 0 for no privs, 1 for read-only privs, and 2 for read-write privs
+  * (we assume that if write privs exist, read ones do as well)
d4507 5
a4511 2
+ find_tigris_privs (const char *project, int project_len,
+ 		   const char *module, int module_len) 
d4517 1
a4517 1
+      * this is what we want to use for priviledges
d4529 1
a4529 1
+ 	/* First check domain-level configs */
d4541 1
a4541 1
+ 	/* project level */
d4584 1
a4584 1
+ 	/* module level */
a5093 206
diff --exclude=CVS -crN ../pristine-ccvs/src/options.h-SAVED ./src/options.h-SAVED
*** ./src/options.h-SAVED	Wed Dec 31 18:00:00 1969
--- ./src/options.h-SAVED	Fri Jun  9 15:48:43 2000
***************
*** 0 ****
--- 1,200 ----
+ /*
+  * Copyright (c) 1992, Brian Berliner and Jeff Polk
+  * Copyright (c) 1989-1992, Brian Berliner
+  * 
+  * You may distribute under the terms of the GNU General Public License as
+  * specified in the README file that comes with the CVS source distribution.
+  * 
+  * This file holds (most of) the configuration tweaks that can be made to
+  * customize CVS for your site.  CVS comes configured for a typical SunOS 4.x
+  * environment.  The comments for each configurable item are intended to be
+  * self-explanatory.  All #defines are tested first to see if an over-riding
+  * option was specified on the "make" command line.
+  * 
+  * If special libraries are needed, you will have to edit the Makefile.in file
+  * or the configure script directly.  Sorry.
+  */
+ 
+ /* By default, CVS stores its modules and other such items in flat
+    text files (MY_NDBM enables this).  Turning off MY_NDBM causes CVS
+    to look for a system-supplied ndbm database library and use it
+    instead.  That may speed things up, but the default setting
+    generally works fine too.  */
+ 
+ #ifndef MY_NDBM
+ #define	MY_NDBM
+ #endif
+ 
+ /*
+  * The "patch" program to run when using the CVS server and accepting
+  * patches across the network.  Specify a full pathname if your site
+  * wants to use a particular patch.
+  */
+ #ifndef PATCH_PROGRAM
+ #define PATCH_PROGRAM	"patch"
+ #endif
+ 
+ /* Directory used for storing temporary files, if not overridden by
+    environment variables or the -T global option.  There should be little
+    need to change this (-T is a better mechanism if you need to use a
+    different directory for temporary files).  */
+ #ifndef TMPDIR_DFLT
+ #define	TMPDIR_DFLT	"/tmp"
+ #endif
+ 
+ /*
+  * The default editor to use, if one does not specify the "-e" option
+  * to cvs, or does not have an EDITOR environment variable.  I set
+  * this to just "vi", and use the shell to find where "vi" actually
+  * is.  This allows sites with /usr/bin/vi or /usr/ucb/vi to work
+  * equally well (assuming that your PATH is reasonable).
+  */
+ #ifndef EDITOR_DFLT
+ #define	EDITOR_DFLT	"vi"
+ #endif
+ 
+ /*
+  * The default umask to use when creating or otherwise setting file or
+  * directory permissions in the repository.  Must be a value in the
+  * range of 0 through 0777.  For example, a value of 002 allows group
+  * rwx access and world rx access; a value of 007 allows group rwx
+  * access but no world access.  This value is overridden by the value
+  * of the CVSUMASK environment variable, which is interpreted as an
+  * octal number.
+  */
+ #ifndef UMASK_DFLT
+ #define	UMASK_DFLT	002
+ #endif
+ 
+ /*
+  * The cvs admin command is restricted to the members of the group
+  * CVS_ADMIN_GROUP.  If this group does not exist, all users are
+  * allowed to run cvs admin.  To disable the cvs admin for all users,
+  * create an empty group CVS_ADMIN_GROUP.  To disable access control
+  * for cvs admin, comment out the define below.
+  */
+ #ifndef CVS_ADMIN_GROUP
+ #define CVS_ADMIN_GROUP "cvsadmin"
+ #endif
+ 
+ /*
+  * The Repository file holds the path to the directory within the
+  * source repository that contains the RCS ,v files for each CVS
+  * working directory.  This path is either a full-path or a path
+  * relative to CVSROOT.
+  * 
+  * The big advantage that I can see to having a relative path is that
+  * one can change the physical location of the master source
+  * repository, change the contents of CVS/Root files in your
+  * checked-out code, and CVS will work without problems.
+  *
+  * Therefore, RELATIVE_REPOS is now the default.  In the future, this
+  * is likely to disappear entirely as a compile-time (or other) option,
+  * so if you have other software which relies on absolute pathnames,
+  * update them.
+  */
+ #define RELATIVE_REPOS 1
+ 
+ /*
+  * When committing or importing files, you must enter a log message.
+  * Normally, you can do this either via the -m flag on the command
+  * line or an editor will be started for you.  If you like to use
+  * logging templates (the rcsinfo file within the $CVSROOT/CVSROOT
+  * directory), you might want to force people to use the editor even
+  * if they specify a message with -m.  Enabling FORCE_USE_EDITOR will
+  * cause the -m message to be appended to the temp file when the
+  * editor is started.
+  */
+ #ifndef FORCE_USE_EDITOR
+ /* #define 	FORCE_USE_EDITOR */
+ #endif
+ 
+ /*
+  * When locking the repository, some sites like to remove locks and
+  * assume the program that created them went away if the lock has
+  * existed for a long time.  This used to be the default for previous
+  * versions of CVS.  CVS now attempts to be much more robust, so lock
+  * files should not be left around by mistake. The new behaviour will
+  * never remove old locks (they must now be removed by hand).
+  * Enabling CVS_FUDGELOCKS will cause CVS to remove locks that are
+  * older than CVSLCKAGE seconds.
+  * 
+  * Use of this option is NOT recommended.
+  */
+ #ifndef CVS_FUDGELOCKS
+ /* #define CVS_FUDGELOCKS */
+ #endif
+ 
+ /*
+  * When committing a permanent change, CVS and RCS make a log entry of
+  * who committed the change.  If you are committing the change logged
+  * in as "root" (not under "su" or other root-priv giving program),
+  * CVS/RCS cannot determine who is actually making the change.
+  *
+  * As such, by default, CVS disallows changes to be committed by users
+  * logged in as "root".  You can disable this option by commenting out
+  * the lines below.
+  */
+ #ifndef CVS_BADROOT
+ #define	CVS_BADROOT
+ #endif
+ 
+ /* Define this to enable the SETXID support.  The way to use this is
+    to create a group with no users in it (except perhaps cvs
+    administrators), set the cvs executable to setgid that group, chown
+    all the repository files to that group, and change all directory
+    permissions in the repository to 770.  The last person to modify a
+    file will own it, but as long as directory permissions are set
+    right that won't matter.  You'll need a system which inherits file
+    groups from the parent directory (WARNING: using the wrong kind of
+    system (I think Solaris 2.4 is the wrong kind, for example) will
+    create a security hole!  You will receive no warning other than the
+    fact that files in the working directory are owned by the group
+    which cvs is setgid to).
+ 
+    One security hole which has been reported is that setgid is not
+    turned off when the editor is invoked--most editors provide a way
+    to execute a shell, or the user can specify an editor (this one is
+    large enough to drive a truck through).  Don't assume that the
+    holes described here are the only ones; I don't know how carefully
+    SETXID has been inspected for security holes.  */
+ #ifndef SETXID_SUPPORT
+ /* #define SETXID_SUPPORT */
+ #endif
+ 
+ /*
+  * Should we build the password-authenticating client?  Whether to
+  * include the password-authenticating _server_, on the other hand, is
+  * set in config.h.
+  */
+ #ifdef CLIENT_SUPPORT
+ #define AUTH_CLIENT_SUPPORT 1
+ #endif
+ 
+ /*
+  * If you are working with a large remote repository and a 'cvs
+  * checkout' is swamping your network and memory, define these to
+  * enable flow control.  You will end up with even less probability of
+  * a consistent checkout (see Concurrency in cvs.texinfo), but CVS
+  * doesn't try to guarantee that anyway.  The master server process
+  * will monitor how far it is getting behind, if it reaches the high
+  * water mark, it will signal the child process to stop generating
+  * data when convenient (ie: no locks are held, currently at the
+  * beginning of a new directory).  Once the buffer has drained
+  * sufficiently to reach the low water mark, it will be signalled to
+  * start again.  You may override the default hi/low watermarks here
+  * too.
+  */
+ #define SERVER_FLOWCONTROL
+ #define SERVER_HI_WATER (2 * 1024 * 1024)
+ #define SERVER_LO_WATER (1 * 1024 * 1024)
+ 
+ /* End of CVS configuration section */
+ 
+ /*
+  * Externs that are included in libc, but are used frequently enough
+  * to warrant defining here.
+  */
+ #ifndef STDC_HEADERS
+ extern void exit ();
+ #endif
@


1.5
log
@Use enscramble() instead of scramble(), after all, to avoid conflict
with MySQL namespace.
@
text
@d1 28
d44 484
d3396 39
d3630 1
a3630 1
--- ./src/cvs.h	Fri Jun  9 14:26:48 2000
d3658 1
a3658 1
--- 391,407 ----
a3661 1
+ #ifdef MYSQL_SUPPORT
a3669 1
+ #endif /* MYSQL_SUPPORT */
d3676 1
a3676 1
--- 640,647 ----
d3694 1
a3694 1
--- 655,661 ----
d3711 1
a3711 1
--- 880,886 ----
d3721 1
a3721 1
--- 894,925 ----
d4547 206
@


1.4
log
@Adjust paths to work with -p0.
@
text
@d2986 18
a3003 1
--- ./src/client.c	Thu Jun  8 09:50:16 2000
d3079 1
a3079 1
--- ./src/cvs.h	Fri Jun  9 09:46:12 2000
d3154 17
d3774 20
d4080 2
a4081 2
*** ./src/rcs.c	Thu Jun  8 08:35:53 2000
--- ./src/rcs.c	Thu Jun  8 09:50:17 2000
d4083 1
a4083 1
*** 8830,8836 ****
d4091 1
a4091 1
--- 8830,8836 ----
d4316 77
@


1.3
log
@Modify patch to just do MySQL stuff, removed the in-repos
per-directory perm control code.

The following excerpt from README explains it in more detail:

--------------------8-<-------cut-here---------8-<-----------------------

Notes On The Patch:
===================

This patch adds two new files, `local_auth.c' and `mysqlsubr.c', and
modifies many files to use the new routines.  This patch is derived
from a much larger patch that also added per-directory ownership and
permissions control in the repository.  We (Tigris) weren't using that
extra code, and it was creating spurious `owner' and `perms' files in
repository directories and possibly causing authentication problems.
So the patch was rewritten to do just MySQL authentication, plus a
skeleton to allow us to add per-directory control very easily (just
stick some more information in the database, and have CVS examine it).

No ChangeLog entries are included, because they almost always cause
conflicts when the patch is applied.  If this patch were ever checked
into the master CVS tree, then that would be the time to add the
ChangeLog entries.  Here is what they might say:

ccvs/ChangeLog:

	* config.h.in, configure, configure.in: changes for MySQL
	("local") authentication.
	Configure now takes --enable-mysql option.

ccvs/doc/ChangeLog:

	* cvs.texinfo: document MySQL ("local") authentication.

ccvs/src/ChangeLog:

        * local_auth.c, mysqlsubr.c: new files, for MySQL ("local")
	authentication.

        * Makefile.in, add.c, admin.c, checkout.c, client.c, commit.c,
	cvs.h, diff.c, edit.c, error.c, import.c, lock.c, log.c,
	main.c, mkmodules.c, parseinfo.c, patch.c, rcs.c, recurse.c,
	remove.c, rtag.c, server.c, status.c, tag.c, update.c,
	watch.c: changes for MySQL authentication.
	(verify_admin, verify_owner, verify_read, verify_write,
	verify_create): new functions.
	(start_recursion): take one of above as new argument.
@
text
@d2 1
a2 1
*** ../pristine-ccvs/config.h.in	Tue Jun  2 12:29:50 1998
d17 1
a17 1
*** ../pristine-ccvs/configure	Thu Feb 17 12:41:22 2000
d2706 1
a2706 1
*** ../pristine-ccvs/configure.in	Thu Feb 17 12:41:22 2000
d2784 1
a2784 1
*** ../pristine-ccvs/doc/cvs.texinfo	Tue May 30 08:59:55 2000
d2885 1
a2885 1
*** ../pristine-ccvs/src/Makefile.in	Tue Oct  6 18:04:30 1998
d2924 1
a2924 1
*** ../pristine-ccvs/src/add.c	Fri Mar 10 10:20:23 2000
d2939 1
a2939 1
*** ../pristine-ccvs/src/admin.c	Wed Nov 10 12:12:07 1999
d2967 1
a2967 1
*** ../pristine-ccvs/src/checkout.c	Tue May 30 08:59:55 2000
d2985 1
a2985 1
*** ../pristine-ccvs/src/client.c	Tue May 30 08:59:55 2000
d3006 1
a3006 1
*** ../pristine-ccvs/src/commit.c	Thu Jun  8 08:35:53 2000
d3061 1
a3061 1
*** ../pristine-ccvs/src/cvs.h	Tue May 30 08:59:55 2000
d3172 1
a3172 1
*** ../pristine-ccvs/src/diff.c	Wed Apr 14 19:12:26 1999
d3192 1
a3192 1
*** ../pristine-ccvs/src/edit.c	Fri Feb 11 12:48:31 2000
d3293 1
a3293 1
*** ../pristine-ccvs/src/error.c	Mon Nov 29 15:39:48 1999
d3308 1
a3308 1
*** ../pristine-ccvs/src/import.c	Tue May 30 08:59:56 2000
d3323 1
a3323 1
*** ../pristine-ccvs/src/local_auth.c	Wed Dec 31 18:00:00 1969
d3700 1
a3700 1
*** ../pristine-ccvs/src/lock.c	Wed Dec 15 11:53:21 1999
d3721 1
a3721 1
*** ../pristine-ccvs/src/log.c	Thu Feb 10 15:32:23 2000
d3741 1
a3741 1
*** ../pristine-ccvs/src/main.c	Thu Jun  8 08:35:53 2000
d3825 1
a3825 1
*** ../pristine-ccvs/src/mkmodules.c	Thu Mar 23 16:52:25 2000
d3864 1
a3864 1
*** ../pristine-ccvs/src/mysqlsubr.c	Wed Dec 31 18:00:00 1969
d3945 1
a3945 1
*** ../pristine-ccvs/src/parseinfo.c	Mon Mar 13 13:15:31 2000
d3991 1
a3991 1
*** ../pristine-ccvs/src/patch.c	Mon Aug 24 10:40:22 1998
d4026 1
a4026 1
*** ../pristine-ccvs/src/rcs.c	Thu Jun  8 08:35:53 2000
d4046 1
a4046 1
*** ../pristine-ccvs/src/recurse.c	Tue May 30 08:59:56 2000
d4188 1
a4188 1
*** ../pristine-ccvs/src/remove.c	Wed Dec 23 09:15:01 1998
d4226 1
a4226 1
*** ../pristine-ccvs/src/rtag.c	Wed Dec 23 09:15:01 1998
d4263 1
a4263 1
*** ../pristine-ccvs/src/server.c	Thu Jun  8 08:35:53 2000
d4610 1
a4610 1
*** ../pristine-ccvs/src/status.c	Tue Jun  1 16:36:33 1999
d4630 1
a4630 1
*** ../pristine-ccvs/src/tag.c	Thu Jun  8 08:35:53 2000
d4684 1
a4684 1
*** ../pristine-ccvs/src/update.c	Tue May 30 08:59:57 2000
d4757 1
a4757 1
*** ../pristine-ccvs/src/watch.c	Sun Sep 13 18:16:40 1998
@


1.2
log
@Fix configure.in syntax.
@
text
@d1 1989
a1989 1968
diff --exclude=CVS -urN cvs.orig/ChangeLog cvs/ChangeLog
--- cvs.orig/ChangeLog	Sat Jul 10 23:57:52 1999
+++ cvs/ChangeLog	Mon Jul 26 02:52:57 1999
@@@@ -1,3 +1,8 @@@@
+1998-11-19  Corey Minyard  <minyard@@acm.org>
+
+        * Added code to handle permissions inside the CVS repository.
+
+
 1999-05-17  Jim Kingdon  <http://www.cyclic.com>
 
 	(These changes were run by devel-cvs; feedback was "They look fine"
diff --exclude=CVS -urN cvs.orig/config.h.in cvs/config.h.in
--- cvs.orig/config.h.in	Sat Jul 10 23:57:52 1999
+++ cvs/config.h.in	Mon Jul 26 14:01:57 1999
@@@@ -88,6 +88,12 @@@@
 /* Define if you want to use the password authenticated server.  */
 #undef AUTH_SERVER_SUPPORT
 
+/* Define if you want MySQL support for password authentication */
+#undef MYSQL_SUPPORT
+
+/* Define if you want to use Tigris (requires MySQL support) */
+#undef TIGRIS
+
 /* Define if you want encryption support.  */
 #undef ENCRYPTION
 
diff --exclude=CVS -urN cvs.orig/configure cvs/configure
--- cvs.orig/configure	Sat Jul 10 23:57:52 1999
+++ cvs/configure	Mon Jul 26 14:16:42 1999
@@@@ -1,7 +1,7 @@@@
 #! /bin/sh
 
 # Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.10 
+# Generated automatically using autoconf version 2.13 
 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
 #
 # This configure script is free software; the Free Software Foundation
@@@@ -23,6 +23,12 @@@@
 ac_help="$ac_help
   --enable-server         include code for running as a server (default)
   --disable-server        don't include server code"
+ac_help="$ac_help
+  --enable-mysql          enable MySQL support"
+ac_help="$ac_help
+  --with-mysql=DIR      Specify the MySQL installation directory.  Default:  /usr/local"
+ac_help="$ac_help
+  --enable-tigris        enable Tigris support"
 
 # Initialize some variables set by options.
 # The variables have the same names as the options, with
@@@@ -61,6 +67,9 @@@@
 # Initialize some other variables.
 subdirs=
 MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
 
 ac_prev=
 for ac_option
@@@@ -342,7 +351,7 @@@@
     verbose=yes ;;
 
   -version | --version | --versio | --versi | --vers)
-    echo "configure generated by autoconf version 2.10"
+    echo "configure generated by autoconf version 2.13"
     exit 0 ;;
 
   -with-* | --with-*)
@@@@ -444,11 +453,14 @@@@
 done
 
 # NLS nuisances.
-# Only set LANG and LC_ALL to C if already set.
-# These must not be set unconditionally because not all systems understand
-# e.g. LANG=C (notably SCO).
-if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+# Only set these to C if already set.  These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
 if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
 
 # confdefs.h avoids OS command line length limits that DEFS can exceed.
 rm -rf conftest* confdefs.h
@@@@ -509,8 +521,11 @@@@
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
 
+ac_exeext=
+ac_objext=o
 if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
   # Stardent Vistra SVR4 grep lacks -e, says ghazi@@caip.rutgers.edu.
   if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
@@@@ -529,14 +544,16 @@@@
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:548: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
       ac_cv_prog_CC="gcc"
@@@@ -557,15 +574,17 @@@@
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:578: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
   ac_prog_rejected=no
-  for ac_dir in $PATH; do
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
       if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
@@@@ -600,10 +619,92 @@@@
   echo "$ac_t""no" 1>&6
 fi
 
+  if test -z "$CC"; then
+    case "`uname -s`" in
+    *win32* | *WIN32*)
+      # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:629: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="cl"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+ ;;
+    esac
+  fi
   test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
 fi
 
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:661: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 672 "configure"
+#include "confdefs.h"
+
+main(){return(0);}
+EOF
+if { (eval echo configure:677: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  ac_cv_prog_cc_works=yes
+  # If we can't run a trivial program, we are probably using a cross compiler.
+  if (./conftest; exit) 2>/dev/null; then
+    ac_cv_prog_cc_cross=no
+  else
+    ac_cv_prog_cc_cross=yes
+  fi
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+  { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:703: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:708: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@@@ -612,7 +713,7 @@@@
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:616: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:717: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@@@ -620,37 +721,51 @@@@
 fi
 
 echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
 if test $ac_cv_prog_gcc = yes; then
   GCC=yes
-  if test "${CFLAGS+set}" != set; then
-    echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-if eval "test \"`echo '$''{'ac_cv_prog_gcc_g'+set}'`\" = set"; then
+else
+  GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:736: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   echo 'void f(){}' > conftest.c
 if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
-  ac_cv_prog_gcc_g=yes
+  ac_cv_prog_cc_g=yes
 else
-  ac_cv_prog_gcc_g=no
+  ac_cv_prog_cc_g=no
 fi
 rm -f conftest*
 
 fi
 
-echo "$ac_t""$ac_cv_prog_gcc_g" 1>&6
-    if test $ac_cv_prog_gcc_g = yes; then
-      CFLAGS="-g -O"
-    else
-      CFLAGS="-O"
-    fi
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS="$ac_save_CFLAGS"
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
   fi
 else
-  GCC=
-  test "${CFLAGS+set}" = set || CFLAGS="-g"
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
 fi
 
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:769: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@@@ -665,39 +780,62 @@@@
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 669 "configure"
+#line 784 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:675: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
+{ (eval echo configure:790: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
 else
   echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 684 "configure"
+#line 801 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:807: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -nologo -E"
+  cat > conftest.$ac_ext <<EOF
+#line 818 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:690: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
+{ (eval echo configure:824: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
 else
   echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   CPP=/lib/cpp
 fi
 rm -f conftest*
 fi
 rm -f conftest*
+fi
+rm -f conftest*
   ac_cv_prog_CPP="$CPP"
 fi
   CPP="$ac_cv_prog_CPP"
@@@@ -707,8 +845,9 @@@@
 echo "$ac_t""$CPP" 1>&6
 
 echo $ac_n "checking for AIX""... $ac_c" 1>&6
+echo "configure:849: checking for AIX" >&5
 cat > conftest.$ac_ext <<EOF
-#line 712 "configure"
+#line 851 "configure"
 #include "confdefs.h"
 #ifdef _AIX
   yes
@@@@ -729,24 +868,27 @@@@
 rm -f conftest*
 
 
-ac_safe=`echo "minix/config.h" | tr './\055' '___'`
+ac_safe=`echo "minix/config.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for minix/config.h""... $ac_c" 1>&6
+echo "configure:874: checking for minix/config.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 739 "configure"
+#line 879 "configure"
 #include "confdefs.h"
 #include <minix/config.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:744: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
+{ (eval echo configure:884: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
   eval "ac_cv_header_$ac_safe=yes"
 else
   echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_header_$ac_safe=no"
 fi
@@@@ -776,6 +918,7 @@@@
 fi
 
 echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
+echo "configure:922: checking for POSIXized ISC" >&5
 if test -d /etc/conf/kconfig.d &&
   grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
 then
@@@@ -801,10 +944,11 @@@@
 fi
 
 if test "x$prefix" = xNONE; then
-echo $ac_n "checking for prefix by ""... $ac_c" 1>&6
+echo $ac_n "checking for prefix by $ac_c" 1>&6
 # Extract the first word of "cvs", so it can be a program name with args.
 set dummy cvs; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:952: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_CVS'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@@@ -812,9 +956,13 @@@@
   /*)
   ac_cv_path_CVS="$CVS" # Let the user override the test with a path.
   ;;
+  ?:/*)			 
+  ac_cv_path_CVS="$CVS" # Let the user override the test with a dos path.
+  ;;
   *)
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
       ac_cv_path_CVS="$ac_dir/$ac_word"
@@@@ -838,43 +986,18 @@@@
 fi
 
 
-# If we cannot run a trivial program, we must be cross compiling.
-echo $ac_n "checking whether cross-compiling""... $ac_c" 1>&6
-if eval "test \"`echo '$''{'ac_cv_c_cross'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test "$cross_compiling" = yes; then
-  ac_cv_c_cross=yes
-else
-cat > conftest.$ac_ext <<EOF
-#line 851 "configure"
-#include "confdefs.h"
-main(){return(0);}
-EOF
-{ (eval echo configure:855: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
-if test -s conftest && (./conftest; exit) 2>/dev/null; then
-  ac_cv_c_cross=no
-else
-  ac_cv_c_cross=yes
-fi
-fi
-rm -fr conftest*
-fi
-
-echo "$ac_t""$ac_cv_c_cross" 1>&6
-cross_compiling=$ac_cv_c_cross
 
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
+echo "configure:993: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 874 "configure"
+#line 998 "configure"
 #include "confdefs.h"
 
-int main() { return 0; }
-int t() {
+int main() {
 
 /* Ultrix mips cc rejects this.  */
 typedef int charset[2]; const charset x;
@@@@ -920,15 +1043,16 @@@@
 
 ; return 0; }
 EOF
-if { (eval echo configure:924: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   ac_cv_c_const=no
 fi
 rm -f conftest*
-
 fi
 
 echo "$ac_t""$ac_cv_c_const" 1>&6
@@@@ -966,27 +1090,30 @@@@
 # SunOS /usr/etc/install
 # IRIX /sbin/install
 # AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
 # AFS /usr/afsws/bin/install, which mishandles nonexistent args
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
+echo "configure:1099: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
-    IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+    IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS=":"
   for ac_dir in $PATH; do
     # Account for people who put trailing slashes in PATH elements.
     case "$ac_dir/" in
     /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
     *)
       # OSF1 and SCO ODT 3.0 have their own names for install.
-      for ac_prog in ginstall installbsd scoinst install; do
+      # Don't use installbsd from OSF since it installs stuff as root
+      # by default.
+      for ac_prog in ginstall scoinst install; do
         if test -f $ac_dir/$ac_prog; then
 	  if test $ac_prog = install &&
             grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
 	    # AIX install.  It has an incompatible calling convention.
-	    # OSF/1 installbsd also uses dspmsg, but is usable.
 	    :
 	  else
 	    ac_cv_path_install="$ac_dir/$ac_prog -c"
@@@@ -997,7 +1124,7 @@@@
       ;;
     esac
   done
-  IFS="$ac_save_ifs"
+  IFS="$ac_save_IFS"
 
 fi
   if test "${ac_cv_path_install+set}" = set; then
@@@@ -1016,19 +1143,23 @@@@
 # It thinks the first close brace ends the variable substitution.
 test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
 
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1154: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
       ac_cv_prog_RANLIB="ranlib"
@@@@ -1051,14 +1182,16 @@@@
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1186: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test -n "$YACC"; then
   ac_cv_prog_YACC="$YACC" # Let the user override the test.
 else
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
       ac_cv_prog_YACC="$ac_prog"
@@@@ -1080,7 +1213,8 @@@@
 test -n "$YACC" || YACC="yacc"
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-set dummy ${MAKE-make}; ac_make=$2
+echo "configure:1217: checking whether ${MAKE-make} sets \${MAKE}" >&5
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@@@ -1109,6 +1243,7 @@@@
 # Extract the first word of "perl", so it can be a program name with args.
 set dummy perl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1247: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_perl_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@@@ -1116,9 +1251,13 @@@@
   /*)
   ac_cv_path_perl_path="$perl_path" # Let the user override the test with a path.
   ;;
+  ?:/*)			 
+  ac_cv_path_perl_path="$perl_path" # Let the user override the test with a dos path.
+  ;;
   *)
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
       ac_cv_path_perl_path="$ac_dir/$ac_word"
@@@@ -1140,6 +1279,7 @@@@
 # Extract the first word of "csh", so it can be a program name with args.
 set dummy csh; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1283: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_csh_path'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@@@ -1147,9 +1287,13 @@@@
   /*)
   ac_cv_path_csh_path="$csh_path" # Let the user override the test with a path.
   ;;
+  ?:/*)			 
+  ac_cv_path_csh_path="$csh_path" # Let the user override the test with a dos path.
+  ;;
   *)
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
-  for ac_dir in $PATH; do
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
     test -z "$ac_dir" && ac_dir=.
     if test -f $ac_dir/$ac_word; then
       ac_cv_path_csh_path="$ac_dir/$ac_word"
@@@@ -1172,6 +1316,7 @@@@
 # Pull the hash mark out of the macro call to avoid m4 problems.
 ac_msg="whether #! works in shell scripts"
 echo $ac_n "checking $ac_msg""... $ac_c" 1>&6
+echo "configure:1320: checking $ac_msg" >&5
 if eval "test \"`echo '$''{'ac_cv_sys_interpreter'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@@@ -1189,6 +1334,7 @@@@
 fi
 
 echo "$ac_t""$ac_cv_sys_interpreter" 1>&6
+interpval="$ac_cv_sys_interpreter"
 
 if test X"$ac_cv_sys_interpreter" != X"yes" ; then
   # silly trick to avoid problems in AC macros...
@@@@ -1197,11 +1343,12 @@@@
 fi
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+echo "configure:1347: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1205 "configure"
+#line 1352 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@@@ -1209,13 +1356,15 @@@@
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1213: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
+{ (eval echo configure:1360: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
   ac_cv_header_stdc=yes
 else
   echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   ac_cv_header_stdc=no
 fi
@@@@ -1224,7 +1373,7 @@@@
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 1228 "configure"
+#line 1377 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@@@ -1242,7 +1391,7 @@@@
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 1246 "configure"
+#line 1395 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@@@ -1262,8 +1411,8 @@@@
 if test "$cross_compiling" = yes; then
   :
 else
-cat > conftest.$ac_ext <<EOF
-#line 1267 "configure"
+  cat > conftest.$ac_ext <<EOF
+#line 1416 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@@@ -1274,15 +1423,19 @@@@
 exit (0); }
 
 EOF
-{ (eval echo configure:1278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
-if test -s conftest && (./conftest; exit) 2>/dev/null; then
+if { (eval echo configure:1427: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
   :
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
   ac_cv_header_stdc=no
 fi
-fi
 rm -fr conftest*
 fi
+
+fi
 fi
 
 echo "$ac_t""$ac_cv_header_stdc" 1>&6
@@@@ -1298,24 +1451,27 @@@@
                  sys/param.h sys/select.h sys/time.h sys/timeb.h \
                  io.h direct.h sys/bsdtypes.h sys/resource.h
 do
-ac_safe=`echo "$ac_hdr" | tr './\055' '___'`
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:1457: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1308 "configure"
+#line 1462 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1313: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
+{ (eval echo configure:1467: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
   eval "ac_cv_header_$ac_safe=yes"
 else
   echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_header_$ac_safe=no"
 fi
@@@@ -1323,7 +1479,7 @@@@
 fi
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-    ac_tr_hdr=HAVE_`echo $ac_hdr | tr 'abcdefghijklmnopqrstuvwxyz./\055' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ___'`
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
   cat >> confdefs.h <<EOF
 #define $ac_tr_hdr 1
 EOF
@@@@ -1334,11 +1490,12 @@@@
 done
 
 echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
+echo "configure:1494: checking for sys/wait.h that is POSIX.1 compatible" >&5
 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1342 "configure"
+#line 1499 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/wait.h>
@@@@ -1348,22 +1505,22 @@@@
 #ifndef WIFEXITED
 #define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
 #endif
-int main() { return 0; }
-int t() {
+int main() {
 int s;
 wait (&s);
 s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
 ; return 0; }
 EOF
-if { (eval echo configure:1359: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1515: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_sys_wait_h=yes
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   ac_cv_header_sys_wait_h=no
 fi
 rm -f conftest*
-
 fi
 
 echo "$ac_t""$ac_cv_header_sys_wait_h" 1>&6
@@@@ -1375,11 +1532,12 @@@@
 fi
 
 echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6
+echo "configure:1536: checking whether stat file-mode macros are broken" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1383 "configure"
+#line 1541 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
@@@@ -1430,29 +1588,30 @@@@
 fi
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
+echo "configure:1592: checking whether time.h and sys/time.h may both be included" >&5
 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1438 "configure"
+#line 1597 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
 #include <time.h>
-int main() { return 0; }
-int t() {
+int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:1448: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1606: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   ac_cv_header_time=no
 fi
 rm -f conftest*
-
 fi
 
 echo "$ac_t""$ac_cv_header_time" 1>&6
@@@@ -1466,34 +1625,35 @@@@
 ac_header_dirent=no
 for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
 do
-ac_safe=`echo "$ac_hdr" | tr './\055' '___'`
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
+echo "configure:1631: checking for $ac_hdr that defines DIR" >&5
 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1476 "configure"
+#line 1636 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
-int main() { return 0; }
-int t() {
+int main() {
 DIR *dirp = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:1485: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1644: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_header_dirent_$ac_safe=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_header_dirent_$ac_safe=no"
 fi
 rm -f conftest*
-
 fi
 if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-    ac_tr_hdr=HAVE_`echo $ac_hdr | tr 'abcdedfghijklmnopqrstuvwxyz./\055' 'ABCDEDFGHIJKLMNOPQRSTUVWXYZ___'`
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
   cat >> confdefs.h <<EOF
 #define $ac_tr_hdr 1
 EOF
@@@@ -1504,30 +1664,32 @@@@
 done
 # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 if test $ac_header_dirent = dirent.h; then
-echo $ac_n "checking for -ldir""... $ac_c" 1>&6
-ac_lib_var=`echo dir'_'opendir | tr './+\055' '__p_'`
+echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
+echo "configure:1669: checking for opendir in -ldir" >&5
+ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-ldir  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1516 "configure"
+#line 1677 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
 char opendir();
 
-int main() { return 0; }
-int t() {
+int main() {
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:1528: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:1688: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=no"
 fi
@@@@ -1543,30 +1705,32 @@@@
 fi
 
 else
-echo $ac_n "checking for -lx""... $ac_c" 1>&6
-ac_lib_var=`echo x'_'opendir | tr './+\055' '__p_'`
+echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
+echo "configure:1710: checking for opendir in -lx" >&5
+ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-lx  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1555 "configure"
+#line 1718 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
 char opendir();
 
-int main() { return 0; }
-int t() {
+int main() {
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:1567: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:1729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=no"
 fi
@@@@ -1584,11 +1748,12 @@@@
 fi
 
 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
+echo "configure:1752: checking return type of signal handlers" >&5
 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1592 "configure"
+#line 1757 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@@@ -1601,20 +1766,20 @@@@
 void (*signal ()) ();
 #endif
 
-int main() { return 0; }
-int t() {
+int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:1610: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1774: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_type_signal=void
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   ac_cv_type_signal=int
 fi
 rm -f conftest*
-
 fi
 
 echo "$ac_t""$ac_cv_type_signal" 1>&6
@@@@ -1624,11 +1789,12 @@@@
 
 
 echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
+echo "configure:1793: checking for uid_t in sys/types.h" >&5
 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1632 "configure"
+#line 1798 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 EOF
@@@@ -1657,19 +1823,21 @@@@
 fi
 
 echo $ac_n "checking for mode_t""... $ac_c" 1>&6
+echo "configure:1827: checking for mode_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1665 "configure"
+#line 1832 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
 #include <stdlib.h>
+#include <stddef.h>
 #endif
 EOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  egrep "mode_t" >/dev/null 2>&1; then
+  egrep "(^|[^a-zA-Z_0-9])mode_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
   rm -rf conftest*
   ac_cv_type_mode_t=yes
 else
@@@@ -1688,19 +1856,21 @@@@
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
+echo "configure:1860: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1696 "configure"
+#line 1865 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
 #include <stdlib.h>
+#include <stddef.h>
 #endif
 EOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  egrep "size_t" >/dev/null 2>&1; then
+  egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
   rm -rf conftest*
   ac_cv_type_size_t=yes
 else
@@@@ -1719,19 +1889,21 @@@@
 fi
 
 echo $ac_n "checking for pid_t""... $ac_c" 1>&6
+echo "configure:1893: checking for pid_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1727 "configure"
+#line 1898 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
 #include <stdlib.h>
+#include <stddef.h>
 #endif
 EOF
 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  egrep "pid_t" >/dev/null 2>&1; then
+  egrep "(^|[^a-zA-Z_0-9])pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
   rm -rf conftest*
   ac_cv_type_pid_t=yes
 else
@@@@ -1750,28 +1922,29 @@@@
 fi
 
 echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6
+echo "configure:1926: checking for st_blksize in struct stat" >&5
 if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1758 "configure"
+#line 1931 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
-int main() { return 0; }
-int t() {
+int main() {
 struct stat s; s.st_blksize;
 ; return 0; }
 EOF
-if { (eval echo configure:1767: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1939: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_struct_st_blksize=yes
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   ac_cv_struct_st_blksize=no
 fi
 rm -f conftest*
-
 fi
 
 echo "$ac_t""$ac_cv_struct_st_blksize" 1>&6
@@@@ -1785,11 +1958,12 @@@@
 for ac_func in mkdir rename strstr dup2 strerror valloc waitpid memmove strtoul
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:1962: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1793 "configure"
+#line 1967 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@@@ -1799,8 +1973,7 @@@@
     builtin and then its argument prototype would still apply.  */
 char $ac_func();
 
-int main() { return 0; }
-int t() {
+int main() {
 
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
@@@@ -1813,34 +1986,41 @@@@
 
 ; return 0; }
 EOF
-if { (eval echo configure:1817: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:1990: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=no"
 fi
 rm -f conftest*
-
 fi
+
 if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-  :
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+ 
 else
   echo "$ac_t""no" 1>&6
-LIBOBJS="$LIBOBJS ${ac_func}.o"
+LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}"
 fi
-
 done
 
+
 for ac_func in fchmod fsync ftime mktemp putenv vprintf ftruncate timezone getpagesize initgroups fchdir sigaction sigprocmask sigvec sigsetmask sigblock tempnam tzset readlink wait3
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:2019: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1844 "configure"
+#line 2024 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@@@ -1850,8 +2030,7 @@@@
     builtin and then its argument prototype would still apply.  */
 char $ac_func();
 
-int main() { return 0; }
-int t() {
+int main() {
 
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
@@@@ -1864,16 +2043,18 @@@@
 
 ; return 0; }
 EOF
-if { (eval echo configure:1868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:2047: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=no"
 fi
 rm -f conftest*
-
 fi
+
 if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
   echo "$ac_t""yes" 1>&6
     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
@@@@ -1896,24 +2077,27 @@@@
 EOF
 
 
-ac_safe=`echo "vfork.h" | tr './\055' '___'`
+ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
+echo "configure:2083: checking for vfork.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1906 "configure"
+#line 2088 "configure"
 #include "confdefs.h"
 #include <vfork.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1911: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
+{ (eval echo configure:2093: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
   eval "ac_cv_header_$ac_safe=yes"
 else
   echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_header_$ac_safe=no"
 fi
@@@@ -1930,16 +2114,18 @@@@
 fi
 
 echo $ac_n "checking for working vfork""... $ac_c" 1>&6
-if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then
+echo "configure:2118: checking for working vfork" >&5
+if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test "$cross_compiling" = yes; then
   echo $ac_n "checking for vfork""... $ac_c" 1>&6
+echo "configure:2124: checking for vfork" >&5
 if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1943 "configure"
+#line 2129 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char vfork(); below.  */
@@@@ -1949,8 +2135,7 @@@@
     builtin and then its argument prototype would still apply.  */
 char vfork();
 
-int main() { return 0; }
-int t() {
+int main() {
 
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
@@@@ -1963,16 +2148,18 @@@@
 
 ; return 0; }
 EOF
-if { (eval echo configure:1967: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:2152: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_vfork=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_func_vfork=no"
 fi
 rm -f conftest*
-
 fi
+
 if eval "test \"`echo '$ac_cv_func_'vfork`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   :
@@@@ -1980,9 +2167,10 @@@@
   echo "$ac_t""no" 1>&6
 fi
 
+ac_cv_func_vfork_works=$ac_cv_func_vfork
 else
-cat > conftest.$ac_ext <<EOF
-#line 1986 "configure"
+  cat > conftest.$ac_ext <<EOF
+#line 2174 "configure"
 #include "confdefs.h"
 /* Thanks to Paul Eggert for this test.  */
 #include <stdio.h>
@@@@ -2010,8 +2198,10 @@@@
   static pid_t child;
   if (!child) {
     child = vfork ();
-    if (child < 0)
+    if (child < 0) {
       perror ("vfork");
+      _exit(2);
+    }
     if (!child) {
       arg = getpid();
       write(-1, "", 0);
@@@@ -2075,18 +2265,22 @@@@
   }
 }
 EOF
-{ (eval echo configure:2079: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
-if test -s conftest && (./conftest; exit) 2>/dev/null; then
-  ac_cv_func_vfork=yes
+if { (eval echo configure:2269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_func_vfork_works=yes
 else
-  ac_cv_func_vfork=no
-fi
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_func_vfork_works=no
 fi
 rm -fr conftest*
 fi
 
-echo "$ac_t""$ac_cv_func_vfork" 1>&6
-if test $ac_cv_func_vfork = no; then
+fi
+
+echo "$ac_t""$ac_cv_func_vfork_works" 1>&6
+if test $ac_cv_func_vfork_works = no; then
   cat >> confdefs.h <<\EOF
 #define vfork fork
 EOF
@@@@ -2094,29 +2288,34 @@@@
 fi
 
 echo $ac_n "checking whether closedir returns void""... $ac_c" 1>&6
+echo "configure:2292: checking whether closedir returns void" >&5
 if eval "test \"`echo '$''{'ac_cv_func_closedir_void'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test "$cross_compiling" = yes; then
   ac_cv_func_closedir_void=yes
 else
-cat > conftest.$ac_ext <<EOF
-#line 2105 "configure"
+  cat > conftest.$ac_ext <<EOF
+#line 2300 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_header_dirent>
 int closedir(); main() { exit(closedir(opendir(".")) != 0); }
 EOF
-{ (eval echo configure:2111: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
-if test -s conftest && (./conftest; exit) 2>/dev/null; then
+if { (eval echo configure:2306: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
   ac_cv_func_closedir_void=no
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
   ac_cv_func_closedir_void=yes
 fi
-fi
 rm -fr conftest*
 fi
 
+fi
+
 echo "$ac_t""$ac_cv_func_closedir_void" 1>&6
 if test $ac_cv_func_closedir_void = yes; then
   cat >> confdefs.h <<\EOF
@@@@ -2126,30 +2325,32 @@@@
 fi
 
 
-echo $ac_n "checking for -lsec""... $ac_c" 1>&6
-ac_lib_var=`echo sec'_'getspnam | tr './+\055' '__p_'`
+echo $ac_n "checking for getspnam in -lsec""... $ac_c" 1>&6
+echo "configure:2330: checking for getspnam in -lsec" >&5
+ac_lib_var=`echo sec'_'getspnam | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-lsec  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2138 "configure"
+#line 2338 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
 char getspnam();
 
-int main() { return 0; }
-int t() {
+int main() {
 getspnam()
 ; return 0; }
 EOF
-if { (eval echo configure:2150: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:2349: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=no"
 fi
@@@@ -2159,7 +2360,8 @@@@
 fi
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-    ac_tr_lib=HAVE_LIB`echo sec | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+    ac_tr_lib=HAVE_LIB`echo sec | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
   cat >> confdefs.h <<EOF
 #define $ac_tr_lib 1
 EOF
@@@@ -2173,11 +2375,12 @@@@
 for ac_func in getspnam
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:2379: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2181 "configure"
+#line 2384 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@@@ -2187,8 +2390,7 @@@@
     builtin and then its argument prototype would still apply.  */
 char $ac_func();
 
-int main() { return 0; }
-int t() {
+int main() {
 
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
@@@@ -2201,16 +2403,18 @@@@
 
 ; return 0; }
 EOF
-if { (eval echo configure:2205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:2407: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=no"
 fi
 rm -f conftest*
-
 fi
+
 if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
   echo "$ac_t""yes" 1>&6
     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
@@@@ -2225,6 +2429,7 @@@@
 
 
 echo $ac_n "checking whether utime accepts a null argument""... $ac_c" 1>&6
+echo "configure:2433: checking whether utime accepts a null argument" >&5
 if eval "test \"`echo '$''{'ac_cv_func_utime_null'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@@@ -2233,8 +2438,8 @@@@
 if test "$cross_compiling" = yes; then
   ac_cv_func_utime_null=no
 else
-cat > conftest.$ac_ext <<EOF
-#line 2238 "configure"
+  cat > conftest.$ac_ext <<EOF
+#line 2443 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/stat.h>
@@@@ -2245,14 +2450,18 @@@@
 && t.st_mtime - s.st_mtime < 120));
 }
 EOF
-{ (eval echo configure:2249: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
-if test -s conftest && (./conftest; exit) 2>/dev/null; then
+if { (eval echo configure:2454: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
   ac_cv_func_utime_null=yes
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
   ac_cv_func_utime_null=no
 fi
-fi
 rm -fr conftest*
+fi
+
 rm -f core core.* *.core
 fi
 
@@@@ -2265,19 +2474,27 @@@@
 fi
 
 echo $ac_n "checking for long file names""... $ac_c" 1>&6
+echo "configure:2478: checking for long file names" >&5
 if eval "test \"`echo '$''{'ac_cv_sys_long_file_names'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_sys_long_file_names=yes
 # Test for long file names in all the places we know might matter:
 #      .		the current directory, where building will happen
-#      /tmp		where it might want to write temporary files
-#      /var/tmp		likewise
-#      /usr/tmp		likewise
 #      $prefix/lib	where we will be installing things
 #      $exec_prefix/lib	likewise
 # eval it to expand exec_prefix.
-for ac_dir in `eval echo . /tmp /var/tmp /usr/tmp $prefix/lib $exec_prefix/lib` ; do
+#      $TMPDIR		if set, where it might want to write temporary files
+# if $TMPDIR is not set:
+#      /tmp		where it might want to write temporary files
+#      /var/tmp		likewise
+#      /usr/tmp		likewise
+if test -n "$TMPDIR" && test -d "$TMPDIR" && test -w "$TMPDIR"; then
+  ac_tmpdirs="$TMPDIR"
+else
+  ac_tmpdirs='/tmp /var/tmp /usr/tmp'
+fi
+for ac_dir in  . $ac_tmpdirs `eval echo $prefix/lib $exec_prefix/lib` ; do
   test -d $ac_dir || continue
   test -w $ac_dir || continue # It is less confusing to not echo anything here.
   (echo 1 > $ac_dir/conftest9012345) 2>/dev/null
@@@@ -2302,14 +2519,15 @@@@
 
 
 echo $ac_n "checking for working fnmatch function""... $ac_c" 1>&6
+echo "configure:2523: checking for working fnmatch function" >&5
 if eval "test \"`echo '$''{'ccvs_cv_sys_working_fnmatch'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   if test "$cross_compiling" = yes; then
   ccvs_cv_sys_working_fnmatch=no
 else
-cat > conftest.$ac_ext <<EOF
-#line 2313 "configure"
+  cat > conftest.$ac_ext <<EOF
+#line 2531 "configure"
 #include "confdefs.h"
 
 #include <fnmatch.h>
@@@@ -2321,16 +2539,20 @@@@
 	? 0 : 1);
 }
 EOF
-{ (eval echo configure:2325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }
-if test -s conftest && (./conftest; exit) 2>/dev/null; then
+if { (eval echo configure:2543: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
   ccvs_cv_sys_working_fnmatch=yes
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
   ccvs_cv_sys_working_fnmatch=no
 fi
-fi
 rm -fr conftest*
 fi
 
+fi
+
 if test $ccvs_cv_sys_working_fnmatch = no; then
   LIBOBJS="$LIBOBJS fnmatch.o"
 fi
@@@@ -2342,11 +2564,12 @@@@
 # only looks in /etc/hosts), so we only look for -lsocket if we need
 # it.
 echo $ac_n "checking for connect""... $ac_c" 1>&6
+echo "configure:2568: checking for connect" >&5
 if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2350 "configure"
+#line 2573 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@@@ -2356,8 +2579,7 @@@@
     builtin and then its argument prototype would still apply.  */
 char connect();
 
-int main() { return 0; }
-int t() {
+int main() {
 
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
@@@@ -2370,16 +2592,18 @@@@
 
 ; return 0; }
 EOF
-if { (eval echo configure:2374: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:2596: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_connect=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_func_connect=no"
 fi
 rm -f conftest*
-
 fi
+
 if eval "test \"`echo '$ac_cv_func_'connect`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   :
@@@@ -2387,30 +2611,32 @@@@
   echo "$ac_t""no" 1>&6
 case "$LIBS" in
 *-lnsl*) ;;
-*) echo $ac_n "checking for -lnsl_s""... $ac_c" 1>&6
-ac_lib_var=`echo nsl_s'_'printf | tr './+\055' '__p_'`
+*) echo $ac_n "checking for printf in -lnsl_s""... $ac_c" 1>&6
+echo "configure:2616: checking for printf in -lnsl_s" >&5
+ac_lib_var=`echo nsl_s'_'printf | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl_s  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2399 "configure"
+#line 2624 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
 char printf();
 
-int main() { return 0; }
-int t() {
+int main() {
 printf()
 ; return 0; }
 EOF
-if { (eval echo configure:2411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:2635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=no"
 fi
@@@@ -2420,7 +2646,8 @@@@
 fi
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-    ac_tr_lib=HAVE_LIB`echo nsl_s | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+    ac_tr_lib=HAVE_LIB`echo nsl_s | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
   cat >> confdefs.h <<EOF
 #define $ac_tr_lib 1
 EOF
@@@@ -2434,30 +2661,32 @@@@
 esac
 case "$LIBS" in
 *-lnsl*) ;;
-*) echo $ac_n "checking for -lnsl""... $ac_c" 1>&6
-ac_lib_var=`echo nsl'_'printf | tr './+\055' '__p_'`
+*) echo $ac_n "checking for printf in -lnsl""... $ac_c" 1>&6
+echo "configure:2666: checking for printf in -lnsl" >&5
+ac_lib_var=`echo nsl'_'printf | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2446 "configure"
+#line 2674 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
 char printf();
 
-int main() { return 0; }
-int t() {
+int main() {
 printf()
 ; return 0; }
 EOF
-if { (eval echo configure:2458: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:2685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=no"
 fi
@@@@ -2467,7 +2696,8 @@@@
 fi
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-    ac_tr_lib=HAVE_LIB`echo nsl | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+    ac_tr_lib=HAVE_LIB`echo nsl | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
   cat >> confdefs.h <<EOF
 #define $ac_tr_lib 1
 EOF
@@@@ -2481,30 +2711,32 @@@@
 esac
 case "$LIBS" in
 *-lsocket*) ;;
-*) echo $ac_n "checking for -lsocket""... $ac_c" 1>&6
-ac_lib_var=`echo socket'_'connect | tr './+\055' '__p_'`
+*) echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
+echo "configure:2716: checking for connect in -lsocket" >&5
+ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2493 "configure"
+#line 2724 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
 char connect();
 
-int main() { return 0; }
-int t() {
+int main() {
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:2505: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:2735: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=no"
 fi
@@@@ -2514,7 +2746,8 @@@@
 fi
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-    ac_tr_lib=HAVE_LIB`echo socket | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+    ac_tr_lib=HAVE_LIB`echo socket | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
   cat >> confdefs.h <<EOF
 #define $ac_tr_lib 1
 EOF
@@@@ -2528,30 +2761,32 @@@@
 esac
 case "$LIBS" in
 *-linet*) ;;
-*) echo $ac_n "checking for -linet""... $ac_c" 1>&6
-ac_lib_var=`echo inet'_'connect | tr './+\055' '__p_'`
+*) echo $ac_n "checking for connect in -linet""... $ac_c" 1>&6
+echo "configure:2766: checking for connect in -linet" >&5
+ac_lib_var=`echo inet'_'connect | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-linet  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2540 "configure"
+#line 2774 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
 char connect();
 
-int main() { return 0; }
-int t() {
+int main() {
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:2552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:2785: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=no"
 fi
@@@@ -2561,7 +2796,8 @@@@
 fi
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-    ac_tr_lib=HAVE_LIB`echo inet | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+    ac_tr_lib=HAVE_LIB`echo inet | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
   cat >> confdefs.h <<EOF
 #define $ac_tr_lib 1
 EOF
@@@@ -2595,98 +2831,102 @@@@
 
 krb_h=
 echo $ac_n "checking for krb.h""... $ac_c" 1>&6
+echo "configure:2835: checking for krb.h" >&5
 if test "$cross_compiling" != yes && test -r $KRB4/include/krb.h; then
    hold_cflags=$CFLAGS
    CFLAGS="$CFLAGS -I$KRB4/include"
    cat > conftest.$ac_ext <<EOF
-#line 2603 "configure"
+#line 2840 "configure"
 #include "confdefs.h"
 #include <krb.h>
-int main() { return 0; }
-int t() {
+int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:2611: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:2847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   krb_h=yes krb_incdir=$KRB4/include
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   CFLAGS=$hold_cflags
            cat > conftest.$ac_ext <<EOF
-#line 2618 "configure"
+#line 2856 "configure"
 #include "confdefs.h"
 #include <krb.h>
-int main() { return 0; }
-int t() {
+int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:2626: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:2863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   krb_h=yes krb_incdir=
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
 fi
 rm -f conftest*
-
 fi
 rm -f conftest*
-
d1991 16
a2006 320
 else
    cat > conftest.$ac_ext <<EOF
-#line 2638 "configure"
+#line 2876 "configure"
 #include "confdefs.h"
 #include <krb.h>
-int main() { return 0; }
-int t() {
+int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:2646: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:2883: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   krb_h=yes krb_incdir=
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
 fi
 rm -f conftest*
-
 fi
 if test -z "$krb_h"; then
   cat > conftest.$ac_ext <<EOF
-#line 2655 "configure"
+#line 2894 "configure"
 #include "confdefs.h"
 #include <krb.h>
-int main() { return 0; }
-int t() {
+int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:2663: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:2901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   krb_h=yes krb_incdir=
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   if test "$cross_compiling" != yes && test -r $KRB4/include/kerberosIV/krb.h; then
        hold_cflags=$CFLAGS
        CFLAGS="$CFLAGS -I$KRB4/include/kerberosIV"
        cat > conftest.$ac_ext <<EOF
-#line 2672 "configure"
+#line 2912 "configure"
 #include "confdefs.h"
 #include <krb.h>
-int main() { return 0; }
-int t() {
+int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:2680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:2919: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   krb_h=yes krb_incdir=$KRB4/include/kerberosIV
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
 fi
 rm -f conftest*
-
        CFLAGS=$hold_cflags
      fi
 fi
 rm -f conftest*
-
 fi
 echo "$ac_t""$krb_h" 1>&6
 
@@@@ -2697,30 +2937,32 @@@@
   if test "$cross_compiling" != yes && test -r $KRB4/lib/libkrb.a; then
        hold_ldflags=$LDFLAGS
        LDFLAGS="-L${KRB4}/lib $LDFLAGS"
-       echo $ac_n "checking for -lkrb""... $ac_c" 1>&6
-ac_lib_var=`echo krb'_'printf | tr './+\055' '__p_'`
+       echo $ac_n "checking for printf in -lkrb""... $ac_c" 1>&6
+echo "configure:2942: checking for printf in -lkrb" >&5
+ac_lib_var=`echo krb'_'printf | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-lkrb  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2709 "configure"
+#line 2950 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
 char printf();
 
-int main() { return 0; }
-int t() {
+int main() {
 printf()
 ; return 0; }
 EOF
-if { (eval echo configure:2721: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:2961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=no"
 fi
@@@@ -2736,30 +2978,32 @@@@
 LDFLAGS=$hold_ldflags
             # Using open here instead of printf so we don't
             # get confused by the cached value for printf from above.
-            echo $ac_n "checking for -lkrb""... $ac_c" 1>&6
-ac_lib_var=`echo krb'_'open | tr './+\055' '__p_'`
+            echo $ac_n "checking for open in -lkrb""... $ac_c" 1>&6
+echo "configure:2983: checking for open in -lkrb" >&5
+ac_lib_var=`echo krb'_'open | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-lkrb  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2748 "configure"
+#line 2991 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
 char open();
 
-int main() { return 0; }
-int t() {
+int main() {
 open()
 ; return 0; }
 EOF
-if { (eval echo configure:2760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:3002: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=no"
 fi
@@@@ -2778,30 +3022,32 @@@@
 
        LDFLAGS=$hold_ldflags
   else
-       echo $ac_n "checking for -lkrb""... $ac_c" 1>&6
-ac_lib_var=`echo krb'_'printf | tr './+\055' '__p_'`
+       echo $ac_n "checking for printf in -lkrb""... $ac_c" 1>&6
+echo "configure:3027: checking for printf in -lkrb" >&5
+ac_lib_var=`echo krb'_'printf | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-lkrb  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2790 "configure"
+#line 3035 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
 char printf();
 
-int main() { return 0; }
-int t() {
+int main() {
 printf()
 ; return 0; }
 EOF
-if { (eval echo configure:2802: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:3046: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=no"
 fi
@@@@ -2829,30 +3075,32 @@@@
     # the user's setting for LDFLAGS
     hold_ldflags=$LDFLAGS
     test -n "${krb_libdir}" && LDFLAGS="$LDFLAGS -L${krb_libdir}"
-    echo $ac_n "checking for -ldes""... $ac_c" 1>&6
-ac_lib_var=`echo des'_'printf | tr './+\055' '__p_'`
+    echo $ac_n "checking for printf in -ldes""... $ac_c" 1>&6
+echo "configure:3080: checking for printf in -ldes" >&5
+ac_lib_var=`echo des'_'printf | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-ldes  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2841 "configure"
+#line 3088 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
 char printf();
 
-int main() { return 0; }
-int t() {
+int main() {
 printf()
 ; return 0; }
 EOF
-if { (eval echo configure:2853: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:3099: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=no"
 fi
@@@@ -2876,11 +3124,12 @@@@
 for ac_func in krb_get_err_text
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:3128: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2884 "configure"
+#line 3133 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@@@ -2890,8 +3139,7 @@@@
     builtin and then its argument prototype would still apply.  */
 char $ac_func();
 
-int main() { return 0; }
-int t() {
+int main() {
 
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
@@@@ -2904,16 +3152,18 @@@@
 
 ; return 0; }
 EOF
-if { (eval echo configure:2908: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:3156: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=no"
 fi
 rm -f conftest*
-
 fi
+
 if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
   echo "$ac_t""yes" 1>&6
     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
@@@@ -2941,24 +3191,27 @@@@
 CPPFLAGS="$CPPFLAGS -I$GSSAPI/include "
 for ac_hdr in krb5.h gssapi.h gssapi/gssapi.h gssapi/gssapi_generic.h
 do
-ac_safe=`echo "$ac_hdr" | tr './\055' '___'`
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:3197: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 2951 "configure"
+#line 3202 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2956: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
+{ (eval echo configure:3207: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
   eval "ac_cv_header_$ac_safe=yes"
 else
   echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_header_$ac_safe=no"
 fi
@@@@ -2966,7 +3219,7 @@@@
 fi
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-    ac_tr_hdr=HAVE_`echo $ac_hdr | tr 'abcdefghijklmnopqrstuvwxyz./\055' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ___'`
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
   cat >> confdefs.h <<EOF
 #define $ac_tr_hdr 1
 EOF
@@@@ -2996,7 +3249,7 @@@@
   CPPFLAGS="-I$GSSAPI/include $CPPFLAGS"
   if test "$ac_cv_header_gssapi_h" = "yes"; then
d2008 14
a2021 8
-#line 3000 "configure"
+#line 3253 "configure"
 #include "confdefs.h"
 #include <gssapi.h>
 EOF
@@@@ -3012,7 +3265,7 @@@@
 
   else
d2023 623
a2645 2455
-#line 3016 "configure"
+#line 3269 "configure"
 #include "confdefs.h"
 #include <gssapi/gssapi.h>
 EOF
@@@@ -3030,30 +3283,32 @@@@
   CPPFLAGS=$save_CPPFLAGS
   # This is necessary on Irix 5.3, in order to link against libkrb5 --
   # there, an_to_ln.o refers to things defined only in -lgen.
-  echo $ac_n "checking for -lgen""... $ac_c" 1>&6
-ac_lib_var=`echo gen'_'compile | tr './+\055' '__p_'`
+  echo $ac_n "checking for compile in -lgen""... $ac_c" 1>&6
+echo "configure:3288: checking for compile in -lgen" >&5
+ac_lib_var=`echo gen'_'compile | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-lgen  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3042 "configure"
+#line 3296 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
 char compile();
 
-int main() { return 0; }
-int t() {
+int main() {
 compile()
 ; return 0; }
 EOF
-if { (eval echo configure:3054: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:3307: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=no"
 fi
@@@@ -3063,7 +3318,8 @@@@
 fi
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-    ac_tr_lib=HAVE_LIB`echo gen | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+    ac_tr_lib=HAVE_LIB`echo gen | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
   cat >> confdefs.h <<EOF
 #define $ac_tr_lib 1
 EOF
@@@@ -3096,11 +3352,12 @@@@
 fi
 
 echo $ac_n "checking for gethostname""... $ac_c" 1>&6
+echo "configure:3356: checking for gethostname" >&5
 if eval "test \"`echo '$''{'ac_cv_func_gethostname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3104 "configure"
+#line 3361 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostname(); below.  */
@@@@ -3110,8 +3367,7 @@@@
     builtin and then its argument prototype would still apply.  */
 char gethostname();
 
-int main() { return 0; }
-int t() {
+int main() {
 
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
@@@@ -3124,16 +3380,18 @@@@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:3384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_gethostname=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_func_gethostname=no"
 fi
 rm -f conftest*
-
 fi
+
 if eval "test \"`echo '$ac_cv_func_'gethostname`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   :
@@@@ -3193,30 +3451,32 @@@@
 ### there's any harm in just testing for -lcrypt first.
 
 if test "$enable_server" = yes; then
-echo $ac_n "checking for -lcrypt""... $ac_c" 1>&6
-ac_lib_var=`echo crypt'_'crypt | tr './+\055' '__p_'`
+echo $ac_n "checking for crypt in -lcrypt""... $ac_c" 1>&6
+echo "configure:3456: checking for crypt in -lcrypt" >&5
+ac_lib_var=`echo crypt'_'crypt | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_save_LIBS="$LIBS"
 LIBS="-lcrypt  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3205 "configure"
+#line 3464 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
     builtin and then its argument prototype would still apply.  */
 char crypt();
 
-int main() { return 0; }
-int t() {
+int main() {
 crypt()
 ; return 0; }
 EOF
-if { (eval echo configure:3217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:3475: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=no"
 fi
@@@@ -3226,7 +3486,8 @@@@
 fi
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
-    ac_tr_lib=HAVE_LIB`echo crypt | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+    ac_tr_lib=HAVE_LIB`echo crypt | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
   cat >> confdefs.h <<EOF
 #define $ac_tr_lib 1
 EOF
@@@@ -3240,11 +3501,12 @@@@
 for ac_func in crypt
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:3505: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3248 "configure"
+#line 3510 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@@@ -3254,8 +3516,7 @@@@
     builtin and then its argument prototype would still apply.  */
 char $ac_func();
 
-int main() { return 0; }
-int t() {
+int main() {
 
 /* The GNU C library defines this for functions which it implements
     to always fail with ENOSYS.  Some functions are actually named
@@@@ -3268,16 +3529,18 @@@@
 
 ; return 0; }
 EOF
-if { (eval echo configure:3272: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+if { (eval echo configure:3533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=no"
 fi
 rm -f conftest*
-
 fi
+
 if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
   echo "$ac_t""yes" 1>&6
     ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
@@@@ -3299,33 +3562,102 @@@@
 fi
 fi # enable_server
 
+
+# Check whether --enable-mysql or --disable-mysql was given.
+if test "${enable_mysql+set}" = set; then
+  enableval="$enable_mysql"
+  case "${enableval}" in
+    yes) mysql=true ;;
+    no) mysql=false ;;
+    *) { echo "configure: error: bad value ${enableval} for MySQL option" 1>&2; exit 1; } ;;
+   esac
+else
+  mysql=false
+fi
+
+  if test "$mysql" = "true"; then
+    cat >> confdefs.h <<\EOF
+#define MYSQL_SUPPORT 1
+EOF
+
+  echo $ac_n "checking for MySQL directory""... $ac_c" 1>&6
+echo "configure:3585: checking for MySQL directory" >&5
+  # Check whether --with-mysql or --without-mysql was given.
+if test "${with_mysql+set}" = set; then
+  withval="$with_mysql"
+  MYSQL_BASE_DIR=$withval
+          echo "$ac_t""$withval" 1>&6
+]
+else
+  
+          MYSQL_BASE_DIR=/usr/local
+          echo "$ac_t""/usr/local" 1>&6
+
+fi
+
+  if test -f $MYSQL_BASE_DIR/include/mysql/mysql.h; then
+          MYSQL_INCDIR=$MYSQL_BASE_DIR/include/mysql
+          MYSQL_LIBDIR=$MYSQL_BASE_DIR/lib/mysql
+  elif test -f $MYSQL_BASE_DIR/include/mysql.h; then
+          MYSQL_INCDIR=$MYSQL_BASE_DIR/include
+          MYSQL_LIBDIR=$MYSQL_BASE_DIR/lib
+  else
+          { echo "configure: error: Invalid MySQL directory - unable to find mysql.h under $MYSQL_BASE_DIR" 1>&2; exit 1; }
+  fi
+
+
+# Check whether --enable-tigris or --disable-tigris was given.
+if test "${enable_tigris+set}" = set; then
+  enableval="$enable_tigris"
+  case "${enableval}" in
+    yes) tigris=true ;;
+    no) tigris=false ;;
+    *) { echo "configure: error: bad value ${enableval} for Tigris option" 1>&2; exit 1; } ;;
+   esac
+else
+  tigris=false
+fi
+
+if test "$tigris" = "true"; then
+  cat >> confdefs.h <<\EOF
+#define TIGRIS 1
+EOF
+
+fi
+
+  CFLAGS="$CFLAGS -I$MYSQL_INCDIR"
+  LDFLAGS="$LDFLAGS -L$MYSQL_LIBDIR"
+  LIBS="$LIBS -lmysqlclient"
+fi
+
 cat >> confdefs.h <<\EOF
 #define PRESERVE_PERMISSIONS_SUPPORT 1
 EOF
 
 
 echo $ac_n "checking for cygwin32""... $ac_c" 1>&6
+echo "configure:3640: checking for cygwin32" >&5
 if eval "test \"`echo '$''{'ccvs_cv_sys_cygwin32'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3313 "configure"
+#line 3645 "configure"
 #include "confdefs.h"
 
-int main() { return 0; }
-int t() {
+int main() {
 return __CYGWIN32__;
 ; return 0; }
 EOF
-if { (eval echo configure:3321: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3652: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ccvs_cv_sys_cygwin32=yes
 else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
   rm -rf conftest*
   ccvs_cv_sys_cygwin32=no
 fi
 rm -f conftest*
-
 fi
 
 echo "$ac_t""$ccvs_cv_sys_cygwin32" 1>&6
@@@@ -3372,11 +3704,25 @@@@
 # --recheck option to rerun configure.
 #
 EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
 # Ultrix sh set writes to stderr and can't be redirected directly,
 # and sets the high bit in the cache file unless we assign to the vars.
 (set) 2>&1 |
-  sed -n "s/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=\${\1='\2'}/p" \
-  >> confcache
+  case `(ac_space=' '; set | grep ac_space) 2>&1` in
+  *ac_space=\ *)
+    # `set' does not quote correctly, so add quotes (double-quote substitution
+    # turns \\\\ into \\, and sed turns \\ into \).
+    sed -n \
+      -e "s/'/'\\\\''/g" \
+      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+    ;;
+  *)
+    # `set' quotes correctly as required by POSIX, so do not add quotes.
+    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+    ;;
+  esac >> confcache
 if cmp -s $cache_file confcache; then
   :
 else
@@@@ -3431,7 +3777,7 @@@@
     echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
     exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
   -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
-    echo "$CONFIG_STATUS generated by autoconf version 2.10"
+    echo "$CONFIG_STATUS generated by autoconf version 2.13"
     exit 0 ;;
   -help | --help | --hel | --he | --h)
     echo "\$ac_cs_usage"; exit 0 ;;
@@@@ -3456,9 +3802,11 @@@@
  s/@@@@/%@@/; s/@@@@/@@%/; s/@@g\$/%g/' > conftest.subs <<\\CEOF
 $ac_vpsub
 $extrasub
+s%@@SHELL@@%$SHELL%g
 s%@@CFLAGS@@%$CFLAGS%g
 s%@@CPPFLAGS@@%$CPPFLAGS%g
 s%@@CXXFLAGS@@%$CXXFLAGS%g
+s%@@FFLAGS@@%$FFLAGS%g
 s%@@DEFS@@%$DEFS%g
 s%@@LDFLAGS@@%$LDFLAGS%g
 s%@@LIBS@@%$LIBS%g
@@@@ -3481,6 +3829,7 @@@@
 s%@@CPP@@%$CPP%g
 s%@@CVS@@%$CVS%g
 s%@@INSTALL_PROGRAM@@%$INSTALL_PROGRAM%g
+s%@@INSTALL_SCRIPT@@%$INSTALL_SCRIPT%g
 s%@@INSTALL_DATA@@%$INSTALL_DATA%g
 s%@@RANLIB@@%$RANLIB%g
 s%@@YACC@@%$YACC%g
@@@@ -3494,6 +3843,42 @@@@
 
 CEOF
 EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+  if test $ac_beg -gt 1; then
+    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+  else
+    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+  fi
+  if test ! -s conftest.s$ac_file; then
+    ac_more_lines=false
+    rm -f conftest.s$ac_file
+  else
+    if test -z "$ac_sed_cmds"; then
+      ac_sed_cmds="sed -f conftest.s$ac_file"
+    else
+      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+    fi
+    ac_file=`expr $ac_file + 1`
+    ac_beg=$ac_end
+    ac_end=`expr $ac_end + $ac_max_sed_cmds`
+  fi
+done
+if test -z "$ac_sed_cmds"; then
+  ac_sed_cmds=cat
+fi
+EOF
+
 cat >> $CONFIG_STATUS <<EOF
 
 CONFIG_FILES=\${CONFIG_FILES-"Makefile lib/Makefile src/Makefile zlib/Makefile diff/Makefile doc/Makefile \
@@@@ -3505,14 +3890,14 @@@@
 EOF
 cat >> $CONFIG_STATUS <<\EOF
 for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
-  # Support "outfile[:infile]", defaulting infile="outfile.in".
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
   case "$ac_file" in
-  *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'`
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
        ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
   *) ac_file_in="${ac_file}.in" ;;
   esac
 
-  # Adjust relative srcdir, etc. for subdirectories.
+  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
 
   # Remove last slash and all that follows it.  Not all systems have dirname.
   ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
@@@@ -3540,6 +3925,7 @@@@
   [/$]*) INSTALL="$ac_given_INSTALL" ;;
   *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
   esac
+
   echo creating "$ac_file"
   rm -f "$ac_file"
   configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
@@@@ -3548,14 +3934,16 @@@@
 # $configure_input" ;;
   *) ac_comsub= ;;
   esac
+
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
   sed -e "$ac_comsub
 s%@@configure_input@@%$configure_input%g
 s%@@srcdir@@%$srcdir%g
 s%@@top_srcdir@@%$top_srcdir%g
 s%@@INSTALL@@%$INSTALL%g
-" -f conftest.subs $ac_given_srcdir/$ac_file_in > $ac_file
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
 fi; done
-rm -f conftest.subs
+rm -f conftest.s*
 
 # These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
 # NAME is the cpp macro being defined and VALUE is the value it is being given.
@@@@ -3576,11 +3964,17 @@@@
 ac_eC=' '
 ac_eD='%g'
 
-CONFIG_HEADERS=${CONFIG_HEADERS-"config.h src/options.h"}
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+  CONFIG_HEADERS="config.h src/options.h"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
 for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
-  # Support "outfile[:infile]", defaulting infile="outfile.in".
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
   case "$ac_file" in
-  *:*) ac_file_in=`echo "$ac_file"|sed 's%.*:%%'`
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
        ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
   *) ac_file_in="${ac_file}.in" ;;
   esac
@@@@ -3588,7 +3982,8 @@@@
   echo creating $ac_file
 
   rm -f conftest.frag conftest.in conftest.out
-  cp $ac_given_srcdir/$ac_file_in conftest.in
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  cat $ac_file_inputs > conftest.in
 
 EOF
 
@@@@ -3616,8 +4011,6 @@@@
 
 # Break up conftest.vals because some shells have a limit on
 # the size of here documents, and old seds have small limits too.
-# Maximum number of lines to put in a single here document.
-ac_max_here_lines=12
 
 rm -f conftest.tail
 while :
@@@@ -3659,7 +4052,11 @@@@
   fi
 fi; done
 
+EOF
+cat >> $CONFIG_STATUS <<EOF
 
+EOF
+cat >> $CONFIG_STATUS <<\EOF
 
 exit 0
 EOF
diff --exclude=CVS -urN cvs.orig/configure.in cvs/configure.in
--- cvs.orig/configure.in	Sat Jul 10 23:57:52 1999
+++ cvs/configure.in	Mon Jul 26 14:15:28 1999
@@@@ -346,6 +346,72 @@@@
 fi
 fi # enable_server
 
+dnl
+dnl MySQL support. Part of this configure input is taken from the
+dnl mod_auth_mysql package. Credit should be given.
+dnl
+dnl Use --enable-mysql to activate MySQL support,
+dnl Use --with-mysql to tell autoconf where the MySQL libs are
+
+AC_ARG_ENABLE(mysql,
+  [  --enable-mysql          enable MySQL support],
+  [case "${enableval}" in
+    yes) mysql=true ;;
+    no) mysql=false ;;
+    *) AC_MSG_ERROR(bad value ${enableval} for MySQL option) ;;
+   esac],
+  [mysql=false])
+  if test "$mysql" = "true"; then
+    AC_DEFINE(MYSQL_SUPPORT)
+  AC_MSG_CHECKING(for MySQL directory)
+  AC_ARG_WITH(mysql,
+  [  --with-mysql=DIR      Specify the MySQL installation directory.  Default:  /usr/local],[
+
+          MYSQL_BASE_DIR=$withval
+          AC_MSG_RESULT($withval)
+],[
+          MYSQL_BASE_DIR=/usr/local
+          AC_MSG_RESULT(/usr/local)
+])
+  if test -f $MYSQL_BASE_DIR/include/mysql/mysql.h; then
+          MYSQL_INCDIR=$MYSQL_BASE_DIR/include/mysql
+          MYSQL_LIBDIR=$MYSQL_BASE_DIR/lib/mysql
+  elif test -f $MYSQL_BASE_DIR/include/mysql.h; then
+          MYSQL_INCDIR=$MYSQL_BASE_DIR/include
+          MYSQL_LIBDIR=$MYSQL_BASE_DIR/lib
+  else
+          AC_MSG_ERROR(Invalid MySQL directory - unable to find mysql.h under $MYSQL_BASE_DIR)
+  fi
+
+dnl
+dnl Tigris support. Know about modules and projects and things. Requires
+dnl MySQL support, although configure doesn't know that yet.
+dnl
+dnl Use --enable-tigris
+
+AC_ARG_ENABLE(tigris,
+  [  --enable-tigris        enable Tigris support],
+  [case "${enableval}" in
+    yes) tigris=true ;;
+    no) tigris=false ;;
+    *) AC_MSG_ERROR(bad value ${enableval} for Tigris option) ;;
+   esac],
+  [tigris=false])
+if test "$tigris" = "true"; then
+  AC_DEFINE(TIGRIS)
+fi
+
+dnl  MYSQL_INCLUDE=-I$MYSQL_INCDIR
+dnl  MYSQL_LFLAGS=-L$MYSQL_LIBDIR
+dnl  MYSQL_LIBS=-lmysqlclient
+dnl  AC_SUBST(MYSQL_LIBS)
+dnl  AC_SUBST(MYSQL_LFLAGS)
+dnl  AC_SUBST(MYSQL_INCLUDE)
+  CFLAGS="$CFLAGS -I$MYSQL_INCDIR"
+  LDFLAGS="$LDFLAGS -L$MYSQL_LIBDIR"
+  LIBS="$LIBS -lmysqlclient"
+fi
+
 dnl For the moment we will assume that all systems which have
 dnl the unixyness to run configure are unixy enough to do the
 dnl PreservePermissions stuff.  I have this sinking feeling that
diff --exclude=CVS -urN cvs.orig/doc/cvs.texinfo cvs/doc/cvs.texinfo
--- cvs.orig/doc/cvs.texinfo	Sat Jul 10 23:57:58 1999
+++ cvs/doc/cvs.texinfo	Mon Jul 26 03:03:58 1999
@@@@ -140,6 +140,7 @@@@
 @@menu
 * Overview::                    An introduction to CVS
 * Repository::                  Where all your sources are stored
+* Security::                    Setting up local security for CVS
 * Starting a new project::      Starting a project with CVS
 * Revisions::                   Numeric and symbolic names for revisions
 * Branching and merging::       Diverging/rejoining branches of development
@@@@ -2041,6 +2042,7 @@@@
 * GSSAPI authenticated::        Direct connections using GSSAPI
 * Kerberos authenticated::      Direct connections with kerberos
 * Connecting via fork::         Using a forked @@code{cvs server} to connect
+* Changing the base path::      Using @@samp{-D} to change the base path
 @@end menu
 
 @@node Server requirements
@@@@ -2667,6 +2669,181 @@@@
 by default, or the value of the @@code{CVS_SERVER}
 environment variable.
 
+@@node Changing the base path
+@@subsection Using @@samp{-D} to change the base path
+
+The @@samp{-D} option allows all the files to be based
+in some directory.  So, for instance, if the command
+was:
+
+@@example
+/usr/local/bin/cvs -L -b /usr/local/bin -D /home/cvs pserver
+@@end example
+
+then if the user had the following @@code{CVSROOT} variable:
+
+@@example
+:pserver:myname@@@@hostname:/ver1
+@@end example
+
+then the repository would actually be in:
+
+@@example
+/home/cvs/ver1
+@@end example
+
+This is convenient because it allows the repository to
+be moved without affecting the user's environment
+variables.  It also makes the user's environment
+variables shorter and more convenient.
+
+@@c ---------------------------------------------------------------------
+@@node Security
+@@chapter Security
+@@cindex Security (intro)
+@@cindex Security, example
+
+A remote @@sc{cvs} @@dfn{repository} can be set up to
+have its own security system outside of the standard
+security provided by the system.  This allows the
+administrator to provide @@sc{cvs} accounts without
+having to set up accounts on the system.  It also
+provides some directory-level security.
+
+This feature has only been checked with pserver.  It
+may or may not work with kerberos.
+
+To enable this feature, add the @@samp{-L} option to
+the invokation from the @@code{inetd.conf} file.  It
+would be best to run the command as some user besides
+root that will own the repository.
+
+The provided security will only work at a directory
+level.  Files cannot be individually protected with
+this feature.
+
+@@menu
+* Setting up security::         How to set up security
+* User maintenance::            How to add and delete users
+* Setting permissions::         Setting permissions for directories
+* Security files::              Files in the repository
+* Passwords::                   Setting and changing passwords
+@@end menu
+
+@@node Setting up security
+@@section How to set up security
+
+Security is rather easy to set up.  First setup the
+@@code{inetd.conf} file to invoke cvs with the @@samp{-L}
+option.  Changing the base path as described in
+@@pxref{Changing the base path} can be very convenient.
+The command should run as the user that owns the
+repository (not root).  With the @@samp{-L} option,
+@@sc{cvs} will run as the user that invokes it, not the
+user.  In fact, the system user names and passwords are
+never checked with this option.  The built-in password
+file is the only one used.
+
+Next, running as the user that will own the repository,
+create the repository.  Pick a user name to be the
+administrator.  In the @@code{CVSROOT} directory, create
+a @@file{passwd} file and add the administrator as
+described in @@pxref{Password authentication server}.
+You have to figure out a clever way of setting the
+first password, such as using the @@file{passwd} file on
+your system to get the first password in for the admin.
+
+Now create a file named @@file{admin} and put the
+administrators name in it on the first line.  Now check
+both of these files in using RCS and add them to the
+@@file{checkoutlist} file as described in that file's
+instructions.  Don't forget to check out the files
+again after they have been checked in.
+
+At this point, the administrator is ready to go.  Set
+the environment variable to the repository (using the
+pserver method) and log in.
+
+@@node User maintenance
+@@section How to add and delete users
+
+The @@sc{cvs} setpass command can be user to add new
+users with the @@samp{-a} option.  Only the
+administrator can do this.  If the setpass command is
+given a user name as a parameter and the user does not
+already exist, the user will be added with the password
+the setpass command prompts for.
+
+To delete a user, the administrator can use the
+@@sc{cvs} deluser command.  Note that deleting a user
+does not remove them from any user permissions, so it
+is a relatively safe operation.
+
+@@node Setting permissions
+@@section Setting permissions for directories
+
+The owner of a file and the administrator can modify
+directory permissions.  Three permissions are available:
+
+@@example
+c - create - create and delete files and directories
+r - read   - retrieve file and look at information
+w - write  - modify files and change information
+@@end example
+
+The owner and administrator have all these
+capabilities.  Other users can be granted these
+capabilities using the @@sc{cvs} setperm command.  It
+takes a user name and a set of permissions separated by
+a colon then a list of directories to grant permissions
+for.  So for instance:
+
+@@example
+cvs setperm theuser:rw dir1 dir2 dir3
+@@end example
+
+will grant the user named @@code{theuser} read and write
+access to the three specified directories.  Specifying
+just the user or nothing after the colon will delete
+all the user's permissions.
+
+To view the current permissions the @@sc{cvs} listperm
+command can be used.  It will show the owner and all
+the users that have permissions in the given
+directories.
+
+If the user name @@code{ALL} is granted permissions,
+those permissions will be extended to all users of the
+repository.  This is an easy way to give everyone read
+access to a directory, for instance.  If a users is
+specifically in the permissions, the @@code{ALL} will
+not be applied to them, just the permissions in their
+entry.
+
+The owner or a directory can be reassigned using the
+@@sc{cvs} setowner command.
+
+@@node Security files
+@@section Files in the repository
+
+Every directory in the repository will contain two
+security files: the @@file{owner} file and the
+@@file{perms} file.  The @@file{owner} file contains the
+name of the directory's owner.  The @@file{perms} file
+contains the permissions for other users.  These files
+will not be checked out in any way, they stay internal
+to the repository.  The repository owner can modify
+these file if necessary; their format is
+straightforward.
+
+@@node Passwords
+@@section Setting and changing passwords
+
+Users can use the @@sc{cvs} setpass command with no
+parameters to modify their passwords.  The
+administrator can specify a user on the command line
+to change their password.
+
 @@c ---------------------------------------------------------------------
 @@node Read-only access
 @@section Read-only repository access
@@@@ -7385,6 +7562,11 @@@@
 * rdiff::                       'patch' format diffs between releases
 * release::                     Indicate that a directory is no longer in use
 * update::                      Bring work tree in sync with repository
+* setpass::                     Modify a user's password or create a user
+* deluser::                     Delete a user
+* setperm::                     Set a user's permissions for a directory
+* setowner::                    Change a directory's owner
+* listperm::                    Show a directory's permissions
 @@end menu
 
 @@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
@@@@ -9029,6 +9211,106 @@@@
 $ cvs diff -u | less
 @@end example
 
+@@node setpass
+@@appendixsec Modify a user's password or create a user
+@@cindex setpass (subcommand)
+
+@@itemize @@bullet
+@@item
+setpass [-a] [username]
+@@item
+Requires: repository
+@@item
+Changes: password file
+@@end itemize
+
+If invoked without a username, this will prompt the
+user for a new password and change the password to the
+new one specified by the user.
+
+If invoked by the administrator with a username, it
+allows another user's password to be modified.
+
+If invoked by the administrator with the @@samp{-a}
+option, it allows addition of new users.
+
+This only works with remote pserver repositories.
+
+@@node deluser
+@@appendixsec Delete a user
+@@cindex deluser (subcommand)
+
+@@itemize @@bullet
+@@item
+deluser username
+@@item
+Requires: repository
+@@item
+Changes: password file
+@@end itemize
+
+Allows the administrator to delete users from the
+repository.
+
+This only works with remote pserver repositories.
+
+@@node setperm
+@@appendixsec Set a user's permissions for a directory
+@@cindex setperm (subcommand)
+
+@@itemize @@bullet
+@@item
+setperm username:perm directory [directory ...]
+@@item
+Requires: repository, directories
+@@item
+Changes: directories' permission files
+@@end itemize
+
+Allows the owner of a directory to allow or disallow
+access to a repository directory to other users of the
+repository.
+
+The @@samp{perm} field can only contain three
+characters: c, r, and w.  These character mean:
+
+@@example
+c - create - create and delete files and directories
+r - read   - retrieve file and look at information
+w - write  - modify files and change information
+@@end example
+
+
+@@node setowner
+@@appendixsec Change a directory's owner
+@@cindex setowner (subcommand)
+
+@@itemize @@bullet
+@@item
+setowner username directory [directory ...]
+@@item
+Requires: repository, directories
+@@item
+Changes: directories' owner files
+@@end itemize
+
+Allows the owner of a directory to assign a new owner
+to directories.
+
+@@node listperm
+@@appendixsec Show a directory's permissions
+@@cindex listperm (subcommand)
+
+@@itemize @@bullet
+@@item
+listperm directory [directory ...]
+@@item
+Requires: repository, directories
+@@end itemize
+
+Lists the owner and other users that have permissions
+in the directory.
+
 @@c - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 @@node export
 @@appendixsec export---Export sources from CVS, similar to checkout
@@@@ -12287,6 +12569,13 @@@@
 @@item USER
 Username of the user running @@sc{cvs} (on the @@sc{cvs}
 server machine).
+
+@@item CVS_USER
+This is set to the username provided by the user when
+the pserver or kserver access methods are used, and to
+the empty string otherwise.  (CVS_USER and USER may
+differ when @@file{$CVSROOT/CVSROOT/passwd} is used to
+map cvs usernames to system usernames.)
 @@end table
 
 If you want to pass a value to the administrative files
diff --exclude=CVS -urN cvs.orig/doc/cvsclient.texi cvs/doc/cvsclient.texi
--- cvs.orig/doc/cvsclient.texi	Sat Jul 10 23:57:58 1999
+++ cvs/doc/cvsclient.texi	Mon Jul 26 02:51:31 1999
@@@@ -1065,6 +1065,11 @@@@
 @@itemx watchers \n
 @@itemx editors \n
 @@itemx annotate \n
+@@itemx setowner \n
+@@itemx setperm \n
+@@itemx setpass \n
+@@itemx listperm \n
+@@itemx deluser \n
 Response expected: yes.  Actually do a cvs command.  This uses any
 previous @@code{Argument}, @@code{Directory}, @@code{Entry}, or
 @@code{Modified} requests, if they have been sent.  The
diff --exclude=CVS -urN cvs.orig/src/Makefile.in cvs/src/Makefile.in
--- cvs.orig/src/Makefile.in	Sat Jul 10 23:57:54 1999
+++ cvs/src/Makefile.in	Wed Jul 28 05:32:31 1999
@@@@ -43,7 +43,8 @@@@
 lock.c log.c login.c logmsg.c main.c mkmodules.c modules.c myndbm.c no_diff.c \
 parseinfo.c patch.c rcs.c rcscmds.c recurse.c release.c remove.c repos.c \
 root.c rtag.c scramble.c server.c status.c subr.c filesubr.c run.c \
-tag.c update.c watch.c wrapper.c vers_ts.c version.c zlib.c
+tag.c update.c watch.c wrapper.c vers_ts.c version.c zlib.c setowner.c \
+setperm.c perms.c listperm.c setpass.c mysqlsubr.c
 
 OBJECTS = add.o admin.o buffer.o checkin.o checkout.o classify.o client.o \
 commit.o create_adm.o cvsrc.o diff.o edit.o entries.o expand_path.o \
@@@@ -52,7 +53,8 @@@@
 parseinfo.o patch.o rcs.o rcscmds.o recurse.o release.o remove.o repos.o \
 root.o rtag.o scramble.o server.o status.o tag.o update.o \
 watch.o wrapper.o vers_ts.o \
-subr.o filesubr.o run.o version.o error.o zlib.o
+subr.o filesubr.o run.o version.o error.o zlib.o setowner.o setperm.o \
+perms.o listperm.o setpass.o mysqlsubr.o
 
 HEADERS = buffer.h cvs.h rcs.h hardlink.h hash.h myndbm.h \
 	update.h server.h client.h error.h fileattr.h edit.h watch.h
diff --exclude=CVS -urN cvs.orig/src/add.c cvs/src/add.c
--- cvs.orig/src/add.c	Sat Jul 10 23:57:55 1999
+++ cvs/src/add.c	Wed Jul 28 02:01:20 1999
@@@@ -304,6 +304,9 @@@@
 	/* Find the repository associated with our current dir.  */
 	repository = Name_Repository (NULL, finfo.update_dir);
 
+        if (! verify_create (repository))
+           error (1, 0, "User '%s' cannot change %s", getcaller(), repository);
+ 
 	entries = Entries_Open (0, NULL);
 
 	finfo.repository = repository;
@@@@ -738,6 +741,11 @@@@
 		goto out;
 	    }
 	    (void) umask (omask);
+	    if (local_security)
+	    {
+	       change_owner(rcsdir, getcaller());
+	       change_perms(rcsdir, "", NULL);
+	    }
 	}
 
 	/* Now set the default file attributes to the ones we inherited
diff --exclude=CVS -urN cvs.orig/src/admin.c cvs/src/admin.c
--- cvs.orig/src/admin.c	Sat Jul 10 23:57:55 1999
+++ cvs/src/admin.c	Mon Jul 26 02:51:47 1999
@@@@ -432,7 +432,7 @@@@
     err = start_recursion (admin_fileproc, (FILESDONEPROC) NULL, admin_dirproc,
 			   (DIRLEAVEPROC) NULL, (void *)&admin_data,
 			   argc, argv, 0,
-			   W_LOCAL, 0, 0, (char *) NULL, 1);
+			   W_LOCAL, 0, 0, (char *) NULL, 1, verify_admin);
     Lock_Cleanup ();
 
  return_it:
@@@@ -843,5 +843,4 @@@@
 {
     if (!quiet)
 	error (0, 0, "Administrating %s", update_dir);
-    return (R_PROCESS);
 }
diff --exclude=CVS -urN cvs.orig/src/checkout.c cvs/src/checkout.c
--- cvs.orig/src/checkout.c	Sat Jul 10 23:57:55 1999
+++ cvs/src/checkout.c	Wed Jul 28 02:02:10 1999
@@@@ -532,6 +532,12 @@@@
     Sanitize_Repository_Name (repository);
 
 
+    if (! verify_read(repository))
+    {
+       error (0, 0, "User %s cannot access %s", getcaller(), argv[0]);
+       return (1);
+    }
+
     /* save the original value of preload_update_dir */
     if (preload_update_dir != NULL)
 	oldupdate = xstrdup (preload_update_dir);
diff --exclude=CVS -urN cvs.orig/src/client.c cvs/src/client.c
--- cvs.orig/src/client.c	Sat Jul 10 23:57:55 1999
+++ cvs/src/client.c	Mon Jul 26 02:51:47 1999
@@@@ -5502,7 +5502,8 @@@@
     err = start_recursion
 	(send_fileproc, send_filesdoneproc,
 	 send_dirent_proc, (DIRLEAVEPROC)NULL, (void *) &args,
-	 argc, argv, local, W_LOCAL, aflag, 0, (char *)NULL, 0);
+	 argc, argv, local, W_LOCAL, aflag, 0, (char *)NULL, 0,
+         (PERMPROC) NULL);
     if (err)
 	error_exit ();
     if (toplevel_repos == NULL)
diff --exclude=CVS -urN cvs.orig/src/commit.c cvs/src/commit.c
--- cvs.orig/src/commit.c	Sat Jul 10 23:57:55 1999
+++ cvs/src/commit.c	Mon Jul 26 02:51:47 1999
@@@@ -468,7 +468,7 @@@@
 			       find_dirent_proc, (DIRLEAVEPROC) NULL,
 			       (void *)&find_args,
 			       argc, argv, local, W_LOCAL, 0, 0,
-			       (char *)NULL, 0);
+			       (char *)NULL, 0, (PERMPROC) NULL);
 	if (err)
 	    error (1, 0, "correct above errors first!");
 
@@@@ -649,7 +649,8 @@@@
      */
     err = start_recursion (check_fileproc, check_filesdoneproc,
 			   check_direntproc, (DIRLEAVEPROC) NULL, NULL, argc,
-			   argv, local, W_LOCAL, aflag, 0, (char *) NULL, 1);
+			   argv, local, W_LOCAL, aflag, 0, (char *) NULL, 1,
+			   verify_write);
     if (err)
     {
 	Lock_Cleanup ();
@@@@ -664,7 +665,7 @@@@
 	err = start_recursion (commit_fileproc, commit_filesdoneproc,
 			       commit_direntproc, commit_dirleaveproc, NULL,
 			       argc, argv, local, W_LOCAL, aflag, 0,
-			       (char *) NULL, 1);
+			       (char *) NULL, 1, verify_write);
 
     /*
      * Unlock all the dirs and clean up
diff --exclude=CVS -urN cvs.orig/src/cvs.h cvs/src/cvs.h
--- cvs.orig/src/cvs.h	Sat Jul 10 23:57:55 1999
+++ cvs/src/cvs.h	Wed Jul 28 05:37:32 1999
@@@@ -64,6 +64,10 @@@@
 char *strerror ();
 #endif
 
+#ifdef MYSQL_SUPPORT
+#include <mysql.h>
+#endif
+
 #include <fnmatch.h> /* This is supposed to be available on Posix systems */
 
 #include <ctype.h>
@@@@ -187,6 +191,7 @@@@
 #define CVSROOTADM_WRITERS	"writers"
 #define CVSROOTADM_PASSWD	"passwd"
 #define CVSROOTADM_CONFIG	"config"
+#define CVSROOTADM_MYSQL        "mysql"
 
 #define CVSNULLREPOS		"Emptydir"	/* an empty directory */
 
@@@@ -383,6 +388,22 @@@@
 extern char *CVSroot_username;	/* the username or NULL if method == local */
 extern char *CVSroot_hostname;	/* the hostname or NULL if method == local */
 extern char *CVSroot_directory;	/* the directory name */
+extern char *CVSroot_prefix;    /* Prefix for CVSroot if supplied on cmdline */
+
+extern int local_security;	/* Only use the built-in CVS security system */
+
+/* Verification routines for local security, will always return 1
+   if local_security is false, otherwise will return 1 if the operations
+   is permitted and 0 if not. */
+int verify_admin PROTO(());
+int verify_owner PROTO((const char *));
+int verify_read PROTO((const char *));
+int verify_write PROTO((const char *));
+int verify_create PROTO((const char *));
+int change_owner PROTO((const char *, const char *));
+int change_perms PROTO((const char *, const char *, const char *));
+void list_owner PROTO((const char *));
+void list_perms PROTO((const char *));
 
 /* These variables keep track of all of the CVSROOT directories that
    have been seen by the client and the current one of those selected.  */
@@@@ -493,6 +514,11 @@@@
 int unlink_file PROTO((const char *f));
 int unlink_file_dir PROTO((const char *f));
 int update PROTO((int argc, char *argv[]));
+int setowner PROTO((int argc, char **argv));
+int setperm PROTO((int argc, char **argv));
+int listperm PROTO((int argc, char **argv));
+int setpass PROTO((int argc, char **argv));
+int deluser PROTO((int argc, char **argv));
 int xcmp PROTO((const char *file1, const char *file2));
 int yesno PROTO((void));
 void *valloc PROTO((size_t bytes));
@@@@ -620,6 +646,8 @@@@
 typedef	int (*DIRLEAVEPROC) PROTO ((void *callerdat, char *dir, int err,
 				    char *update_dir, List *entries));
 
+typedef int (*PERMPROC) PROTO ((const char *dir));
+
 extern int mkmodules PROTO ((char *dir));
 extern int init PROTO ((int argc, char **argv));
 
@@@@ -633,7 +661,7 @@@@
 		     void *callerdat,
 		     int argc, char *argv[], int local, int which,
 		     int aflag, int readlock, char *update_preload,
-		     int dosrcs));
+		     int dosrcs, PERMPROC permproc));
 void SIG_beginCrSect PROTO((void));
 void SIG_endCrSect PROTO((void));
 void read_cvsrc PROTO((int *argc, char ***argv, char *cmdname));
@@@@ -857,7 +885,7 @@@@
 extern unsigned long int lookup_command_attribute PROTO((char *));
 
 #if defined(AUTH_CLIENT_SUPPORT) || defined(AUTH_SERVER_SUPPORT)
-char *scramble PROTO ((char *str));
+char *enscramble PROTO ((char *str));
 char *descramble PROTO ((char *str));
 #endif /* AUTH_CLIENT_SUPPORT || AUTH_SERVER_SUPPORT */
 
@@@@ -879,4 +907,28 @@@@
 
 #if defined(SERVER_SUPPORT) || defined(CLIENT_SUPPORT)
 #include "server.h"
+#endif
+
+#ifdef MYSQL_SUPPORT
+/* MySQL config variables */
+extern char *mysql_host;
+extern int mysql_portnum;
+extern char *mysql_unix_socket;
+extern char *mysql_user;
+extern char *mysql_passwd;
+extern char *mysql_db;
+extern char *mysql_passwd_table;
+extern char *mysql_username_col;
+extern char *mysql_passwd_col;
+extern char *mysql_serveruser_table;
+extern char *mysql_cvsuser_col;
+extern char *mysql_serveruser_col;
+extern char *mysql_encrypt;
+extern char *mysql_default_user;
+
+/* The database itself; NULL if inactive */
+extern MYSQL *CVS_mysql;
+
+extern void cvs_mysql_connect PROTO ((void));
+extern void cvs_mysql_disconnect PROTO ((void));
 #endif
diff --exclude=CVS -urN cvs.orig/src/diff.c cvs/src/diff.c
--- cvs.orig/src/diff.c	Sat Jul 10 23:57:55 1999
+++ cvs/src/diff.c	Mon Jul 26 02:51:47 1999
@@@@ -393,7 +393,7 @@@@
     /* start the recursion processor */
     err = start_recursion (diff_fileproc, diff_filesdoneproc, diff_dirproc,
 			   diff_dirleaveproc, NULL, argc, argv, local,
-			   which, 0, 1, (char *) NULL, 1);
+			   which, 0, 1, (char *) NULL, 1, verify_read);
 
     /* clean up */
     free (options);
diff --exclude=CVS -urN cvs.orig/src/edit.c cvs/src/edit.c
--- cvs.orig/src/edit.c	Sat Jul 10 23:57:55 1999
+++ cvs/src/edit.c	Mon Jul 26 02:51:47 1999
@@@@ -103,7 +103,7 @@@@
     err = start_recursion (onoff_fileproc, onoff_filesdoneproc,
 			   (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
 			   argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
-			   0);
+			   0, verify_write);
 
     Lock_Cleanup ();
     return err;
@@@@ -246,7 +246,7 @@@@
 	err += start_recursion (dummy_fileproc, (FILESDONEPROC) NULL,
 				(DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
 				argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
-				0);
+				0, NULL);
 
 	send_to_server ("noop\012", 0);
 	if (strcmp (command_name, "release") == 0)
@@@@ -263,7 +263,7 @@@@
 	err += start_recursion (ncheck_fileproc, (FILESDONEPROC) NULL,
 				(DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
 				argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
-				0);
+				0, NULL);
 	Lock_Cleanup ();
     }
     return err;
@@@@ -432,7 +432,7 @@@@
     err = start_recursion (edit_fileproc, (FILESDONEPROC) NULL,
 			   (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
 			   argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
-			   0);
+			   0, verify_write);
 
     err += send_notifications (argc, argv, local);
 
@@@@ -590,7 +590,7 @@@@
     err = start_recursion (unedit_fileproc, (FILESDONEPROC) NULL,
 			   (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
 			   argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
-			   0);
+			   0, verify_write);
 
     err += send_notifications (argc, argv, local);
 
@@@@ -1105,5 +1105,5 @@@@
     return start_recursion (editors_fileproc, (FILESDONEPROC) NULL,
 			    (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
 			    argc, argv, local, W_LOCAL, 0, 1, (char *)NULL,
-			    0);
+			    0, verify_write);
 }
diff --exclude=CVS -urN cvs.orig/src/error.c cvs/src/error.c
--- cvs.orig/src/error.c	Sat Jul 10 23:57:55 1999
+++ cvs/src/error.c	Wed Jul 28 06:15:13 1999
@@@@ -65,6 +65,7 @@@@
 error_exit PROTO ((void))
 {
     Lock_Cleanup();
+    cvs_mysql_disconnect();
 #ifdef SERVER_SUPPORT
     if (server_active)
 	server_cleanup (0);
diff --exclude=CVS -urN cvs.orig/src/import.c cvs/src/import.c
--- cvs.orig/src/import.c	Sat Jul 10 23:57:55 1999
+++ cvs/src/import.c	Wed Jul 28 02:02:37 1999
@@@@ -272,6 +272,9 @@@@
     }
 #endif
 
+    if (! verify_create (repository))
+       error (1, 0, "User %s cannot create files in %s", getcaller(), argv[0]);
+
     /*
      * Make all newly created directories writable.  Should really use a more
      * sophisticated security mechanism here.
diff --exclude=CVS -urN cvs.orig/src/listperm.c cvs/src/listperm.c
--- cvs.orig/src/listperm.c	Wed Dec 31 16:00:00 1969
+++ cvs/src/listperm.c	Wed Jul 28 02:15:37 1999
@@@@ -0,0 +1,101 @@@@
+/*
+ * Copyright (c) 1992, Brian Berliner and Jeff Polk
+ * Copyright (c) 1989-1992, Brian Berliner
+ * 
+ * You may distribute under the terms of the GNU General Public License as
+ * specified in the README file that comes with the CVS 1.4 kit.
+ * 
+ * listperm
+ * 
+ * Shows the current permissions
+ */
+
+#include "cvs.h"
+
+static const char *const listperm_usage[] =
+{
+    "Usage: %s %s <directory1> [<directory2 ...]\n",
+    NULL
+};
+
+int
+listperm (argc, argv)
+   int argc;
+   char **argv;
+{
+   char *user;
+   int i;
+   char *repository;
+   int c;
+   int err = 0;
+   char *permptr;
+
+
+   if (argc == -1)
+      usage (listperm_usage);
+
+   wrap_setup ();
+
+   optind = 1;
+   while ((c = getopt (argc, argv, "")) != -1)
+   {
+      switch (c)
+      {
+      case '?':
+      default:
+	 usage (listperm_usage);
+	 break;
+      }
+   }
+   argc -= optind;
+   argv += optind;
+
+   if (argc <= 0)
+      usage (listperm_usage);
+
+   /* find the repository associated with our current dir */
+   repository = Name_Repository ((char *) NULL, (char *) NULL);
+
+#ifdef CLIENT_SUPPORT
+   if (client_active)
+   {
+      start_server ();
+      ign_setup ();
+
+      send_file_names (argc, argv, SEND_EXPAND_WILD);
+      send_files (argc, argv, 0, 0, SEND_NO_CONTENTS);
+      send_to_server ("listperm\012", 0);
+      return get_responses_and_close ();
+   }
+#endif
+
+   /* walk the arg list checking files/dirs */
+   for (i = 0; i < argc; i++)
+   {
+      char dname[PATH_MAX];
+      (void) sprintf (dname, "%s/%s", repository, argv[i]);
+      if (!isdir (dname))
+      {
+	 error (0, 0, "`%s' is not a directory", dname);
+	 err++;
+      }
+      else
+      {
+	 if (!verify_read (dname))
+	 {
+	    error (0, 0, "'%s' cannot list '%s'\n", getcaller(), argv[i]);
+	    err++;
+	 }
+	 else
+	 {
+	    cvs_output ("File: ", 0);
+	    cvs_output (argv[i], 0);
+	    cvs_output ("\n", 0);
+	    list_owner (dname);
+	    list_perms (dname);
+	 }
+      }
+   }
+
+   return (err);
+}
diff --exclude=CVS -urN cvs.orig/src/lock.c cvs/src/lock.c
--- cvs.orig/src/lock.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/lock.c	Mon Jul 26 02:51:47 1999
@@@@ -900,7 +900,8 @@@@
     lock_tree_list = getlist ();
     err = start_recursion ((FILEPROC) NULL, lock_filesdoneproc,
 			   (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL, argc,
-			   argv, local, W_LOCAL, aflag, 0, (char *) NULL, 0);
+			   argv, local, W_LOCAL, aflag, 0, (char *) NULL, 0,
+			   NULL);
     sortlist (lock_tree_list, fsortcmp);
     if (Writer_Lock (lock_tree_list) != 0)
 	error (1, 0, "lock failed - giving up");
diff --exclude=CVS -urN cvs.orig/src/log.c cvs/src/log.c
--- cvs.orig/src/log.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/log.c	Mon Jul 26 02:51:47 1999
@@@@ -246,7 +246,7 @@@@
 			   (DIRLEAVEPROC) NULL, (void *) &log_data,
 			   argc - optind, argv + optind, local,
 			   W_LOCAL | W_REPOS | W_ATTIC, 0, 1,
-			   (char *) NULL, 1);
+			   (char *) NULL, 1, verify_read);
     return (err);
 }
 
diff --exclude=CVS -urN cvs.orig/src/login.c cvs/src/login.c
--- cvs.orig/src/login.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/login.c	Wed Jul 28 04:07:53 1999
@@@@ -143,7 +143,7 @@@@
 
     passfile = construct_cvspass_filename ();
     typed_password = getpass ("CVS password: ");
-    typed_password = scramble (typed_password);
+    typed_password = enscramble (typed_password);
 
     /* Force get_cvs_password() to use this one (when the client
      * confirms the new password with the server), instead of
diff --exclude=CVS -urN cvs.orig/src/main.c cvs/src/main.c
--- cvs.orig/src/main.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/main.c	Wed Jul 28 06:18:23 1999
@@@@ -132,6 +132,14 @@@@
     { "update",   "up",       "upd",       update },
     { "watch",    NULL,	      NULL,	   watch },
     { "watchers", NULL,	      NULL,	   watchers },
+#ifndef TIGRIS
+    /* Tigris doesn't use this part of the acl patch, or want it */
+    { "setowner", NULL,	      NULL,	   setowner },
+    { "setperm",  NULL,	      NULL,	   setperm },
+    { "listperm", NULL,	      NULL,	   listperm },
+    { "setpass",  NULL,	      NULL,	   setpass },
+    { "deluser",  NULL,	      NULL,	   deluser },
+#endif /* TIGRIS */
 #ifdef SERVER_SUPPORT
     { "server",   NULL,       NULL,        server },
 #endif
@@@@ -214,6 +222,13 @@@@
     "        update       Bring work tree in sync with repository\n",
     "        watch        Set watches\n",
     "        watchers     See who is watching a file\n",
+#ifndef TIGRIS
+    "        setowner     Change the owner of a file\n",
+    "        setperm      Set the permissions for another user\n",
+    "        listperm     List the directories permissions\n",
+    "        setpass      Set the user's password\n",
+    "        deluser      Delete a user\n",
+#endif /* TIGRIS */
     "(Specify the --help option for a list of other help options)\n",
     NULL,
 };
@@@@ -222,7 +237,9 @@@@
 {
     /* Omit -b because it is just for compatibility.  */
     "CVS global options (specified before the command name) are:\n",
+    "    -D           Adds a prefix to CVSROOT\n",
     "    -H           Displays usage information for command.\n",
+    "    -L           Use local CVS security\n",
     "    -Q           Cause CVS to be really quiet.\n",
     "    -q           Cause CVS to be somewhat quiet.\n",
     "    -r           Make checked-out files read-only.\n",
@@@@ -509,7 +526,7 @@@@
     opterr = 1;
 
     while ((c = getopt_long
-            (argc, argv, "+Qqrwtnlvb:T:e:d:Hfz:s:xa", long_options, &option_index))
+            (argc, argv, "+Qqrwtnlvb:T:e:d:D:LHfz:s:xa", long_options, &option_index))
            != EOF)
     {
 	switch (c)
@@@@ -593,6 +610,12 @@@@
 		free_CVSroot = 1;
 		cvs_update_env = 1;	/* need to update environment */
 		break;
+	    case 'D':
+		CVSroot_prefix = optarg;
+		break;
+	    case 'L':
+		local_security = 1;
+		break;
 	    case 'H':
 	        help = 1;
 		break;
@@@@ -992,6 +1015,25 @@@@
 		   if we didn't, then there would be no way to check in a new
 		   CVSROOT/config file to fix the broken one!  */
 		parse_config (CVSroot_directory);
+#ifdef MYSQL_SUPPORT
+		/* We want to connect to the MySQL server under pretty
+		 * much the same conditions as parsing the config file,
+		 * and ASAP afterwards (before we actually need to do
+		 * anything involving permissions, when we might need
+		 * to access it.
+		 *
+		 * N.B. that this isn't quite right when looping; we
+		 * might want to connect to several different servers
+		 * for different server roots.  Not quite sure how to
+		 * deal with that at the moment.  I don't need it for
+		 * Tigris, so I'll quietly ignore.  Note that
+		 * parse_config does the same thing (ignoring multiple
+		 * calls by using a static state variable).
+		 * 
+		 * This isn't the right place for this comment, either.
+		 */
+		cvs_mysql_connect();
+#endif
 	    }
 
 #ifdef CLIENT_SUPPORT
@@@@ -1033,6 +1075,8 @@@@
     } /* end of stuff that gets done if the user DOESN'T ask for help */
 
     Lock_Cleanup ();
+
+    cvs_mysql_disconnect();
 
     free (program_path);
     if (CVSroot_cmdline != NULL)
diff --exclude=CVS -urN cvs.orig/src/mkmodules.c cvs/src/mkmodules.c
--- cvs.orig/src/mkmodules.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/mkmodules.c	Wed Jul 28 03:27:07 1999
@@@@ -332,6 +332,11 @@@@
     {CVSROOTADM_WRITERS,
 	"a %s file specifies read/write users",
 	NULL},
+#ifdef MYSQL
+    {CVSROOTADM_MYSQL,
+	"a %s file configures the use of a MySQL server",
+	NULL},
+#endif
 
     /* Some have suggested listing CVSROOTADM_PASSWD here too.  This
        would mean that CVS commands which operate on the
@@@@ -350,6 +355,7 @@@@
        elsewhere, using a similar password, etc, and so saving old
        passwords, even hashed, is probably not a good idea.  */
 
+
     {CVSROOTADM_CONFIG,
 	 "a %s file configures various behaviors",
 	 config_contents},
@@@@ -845,6 +851,9 @@@@
 	return get_responses_and_close ();
     }
 #endif /* CLIENT_SUPPORT */
+
+    if (! verify_admin ())
+       error (1, 0, "Only the administrator can initialize new CVS stuff");
 
     /* Note: we do *not* create parent directories as needed like the
        old cvsinit.sh script did.  Few utilities do that, and a
diff --exclude=CVS -urN cvs.orig/src/mysqlsubr.c cvs/src/mysqlsubr.c
--- cvs.orig/src/mysqlsubr.c	Wed Dec 31 16:00:00 1969
+++ cvs/src/mysqlsubr.c	Wed Jul 28 06:07:21 1999
@@@@ -0,0 +1,75 @@@@
+/* mysqlsubr.c --- subroutines for dealing with the MySQL database
+   Jim Blandy <jimb@@cyclic.com>
+
+   This file is part of GNU CVS.
+
+   GNU CVS 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, 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.  */
+
+#include "cvs.h"
+
+#ifdef MYSQL_SUPPORT
+
+/* MySQL config variables */
+char *mysql_host = NULL;
+int mysql_portnum = 0;
+char *mysql_unix_socket = NULL;
+char *mysql_user = NULL;
+char *mysql_passwd = NULL;
+char *mysql_db = NULL;
+char *mysql_passwd_table = NULL;
+char *mysql_username_col = NULL;
+char *mysql_passwd_col = NULL;
+char *mysql_serveruser_table = NULL;
+char *mysql_cvsuser_col = NULL;
+char *mysql_serveruser_col = NULL;
+char *mysql_encrypt = NULL;
+char *mysql_default_user = NULL;
+
+/* The database itself; NULL if inactive */
+MYSQL *CVS_mysql = NULL;
+
+/* Initialize the MySQL connection */
+void
+cvs_mysql_connect(void)
+{
+    /* Check to see we're not reconnecting */
+    if (CVS_mysql != NULL)
+	return;
+
+    /* Only bother if MySQL use is configured */
+    if (!mysql_host && !mysql_portnum && !mysql_unix_socket
+	&& !mysql_user && !mysql_passwd && !mysql_db)
+	return;
+
+    /* We require several fields to be present */
+    if (!mysql_user || !mysql_passwd || !mysql_db) {
+	error(1, 0, "missing required database parameters in CVSROOT/config");
+    }
+
+    CVS_mysql = mysql_init(NULL);
+    if (!mysql_real_connect(CVS_mysql, mysql_host, mysql_user, mysql_passwd,
+			    mysql_db, mysql_portnum, mysql_unix_socket, 0)) {
+	error(1, 0, "failed to connect to database: Error: %s\n",
+	      mysql_error(CVS_mysql));
+    }
+}
+
+/* Close the MySQL connection */
+void
+cvs_mysql_disconnect(void)
+{
+    if (CVS_mysql != NULL) {
+	mysql_close(CVS_mysql);
+	CVS_mysql = NULL;
+    }
+}
+
+#endif /* MYSQL_SUPPORT */
diff --exclude=CVS -urN cvs.orig/src/options.h-SAVED cvs/src/options.h-SAVED
--- cvs.orig/src/options.h-SAVED	Wed Dec 31 16:00:00 1969
+++ cvs/src/options.h-SAVED	Wed Aug 11 09:50:11 1999
@@@@ -0,0 +1,201 @@@@
+/* src/options.h.  Generated automatically by configure.  */
+/*
+ * Copyright (c) 1992, Brian Berliner and Jeff Polk
+ * Copyright (c) 1989-1992, Brian Berliner
+ * 
+ * You may distribute under the terms of the GNU General Public License as
+ * specified in the README file that comes with the CVS source distribution.
+ * 
+ * This file holds (most of) the configuration tweaks that can be made to
+ * customize CVS for your site.  CVS comes configured for a typical SunOS 4.x
+ * environment.  The comments for each configurable item are intended to be
+ * self-explanatory.  All #defines are tested first to see if an over-riding
+ * option was specified on the "make" command line.
+ * 
+ * If special libraries are needed, you will have to edit the Makefile.in file
+ * or the configure script directly.  Sorry.
+ */
+
+/* By default, CVS stores its modules and other such items in flat
+   text files (MY_NDBM enables this).  Turning off MY_NDBM causes CVS
+   to look for a system-supplied ndbm database library and use it
+   instead.  That may speed things up, but the default setting
+   generally works fine too.  */
+
+#ifndef MY_NDBM
+#define	MY_NDBM
+#endif
+
+/*
+ * The "patch" program to run when using the CVS server and accepting
+ * patches across the network.  Specify a full pathname if your site
+ * wants to use a particular patch.
+ */
+#ifndef PATCH_PROGRAM
+#define PATCH_PROGRAM	"patch"
+#endif
+
+/* Directory used for storing temporary files, if not overridden by
+   environment variables or the -T global option.  There should be little
+   need to change this (-T is a better mechanism if you need to use a
+   different directory for temporary files).  */
+#ifndef TMPDIR_DFLT
+#define	TMPDIR_DFLT	"/tmp"
+#endif
+
+/*
+ * The default editor to use, if one does not specify the "-e" option
+ * to cvs, or does not have an EDITOR environment variable.  I set
+ * this to just "vi", and use the shell to find where "vi" actually
+ * is.  This allows sites with /usr/bin/vi or /usr/ucb/vi to work
+ * equally well (assuming that your PATH is reasonable).
+ */
+#ifndef EDITOR_DFLT
+#define	EDITOR_DFLT	"vi"
+#endif
+
+/*
+ * The default umask to use when creating or otherwise setting file or
+ * directory permissions in the repository.  Must be a value in the
+ * range of 0 through 0777.  For example, a value of 002 allows group
+ * rwx access and world rx access; a value of 007 allows group rwx
+ * access but no world access.  This value is overridden by the value
+ * of the CVSUMASK environment variable, which is interpreted as an
+ * octal number.
+ */
+#ifndef UMASK_DFLT
+#define	UMASK_DFLT	002
+#endif
+
+/*
+ * The cvs admin command is restricted to the members of the group
+ * CVS_ADMIN_GROUP.  If this group does not exist, all users are
+ * allowed to run cvs admin.  To disable the cvs admin for all users,
+ * create an empty group CVS_ADMIN_GROUP.  To disable access control
+ * for cvs admin, comment out the define below.
+ */
+#ifndef CVS_ADMIN_GROUP
+#define CVS_ADMIN_GROUP "cvsadmin"
+#endif
+
+/*
+ * The Repository file holds the path to the directory within the
+ * source repository that contains the RCS ,v files for each CVS
+ * working directory.  This path is either a full-path or a path
+ * relative to CVSROOT.
+ * 
+ * The big advantage that I can see to having a relative path is that
+ * one can change the physical location of the master source
+ * repository, change the contents of CVS/Root files in your
+ * checked-out code, and CVS will work without problems.
+ *
+ * Therefore, RELATIVE_REPOS is now the default.  In the future, this
+ * is likely to disappear entirely as a compile-time (or other) option,
+ * so if you have other software which relies on absolute pathnames,
+ * update them.
+ */
+#define RELATIVE_REPOS 1
+
+/*
+ * When committing or importing files, you must enter a log message.
+ * Normally, you can do this either via the -m flag on the command
+ * line or an editor will be started for you.  If you like to use
+ * logging templates (the rcsinfo file within the $CVSROOT/CVSROOT
+ * directory), you might want to force people to use the editor even
+ * if they specify a message with -m.  Enabling FORCE_USE_EDITOR will
+ * cause the -m message to be appended to the temp file when the
+ * editor is started.
+ */
+#ifndef FORCE_USE_EDITOR
+/* #define 	FORCE_USE_EDITOR */
+#endif
+
+/*
+ * When locking the repository, some sites like to remove locks and
+ * assume the program that created them went away if the lock has
+ * existed for a long time.  This used to be the default for previous
+ * versions of CVS.  CVS now attempts to be much more robust, so lock
+ * files should not be left around by mistake. The new behaviour will
+ * never remove old locks (they must now be removed by hand).
+ * Enabling CVS_FUDGELOCKS will cause CVS to remove locks that are
+ * older than CVSLCKAGE seconds.
+ * 
+ * Use of this option is NOT recommended.
+ */
+#ifndef CVS_FUDGELOCKS
+/* #define CVS_FUDGELOCKS */
+#endif
+
+/*
+ * When committing a permanent change, CVS and RCS make a log entry of
+ * who committed the change.  If you are committing the change logged
+ * in as "root" (not under "su" or other root-priv giving program),
+ * CVS/RCS cannot determine who is actually making the change.
+ *
+ * As such, by default, CVS disallows changes to be committed by users
+ * logged in as "root".  You can disable this option by commenting out
+ * the lines below.
+ */
+#ifndef CVS_BADROOT
+#define	CVS_BADROOT
+#endif
+
+/* Define this to enable the SETXID support.  The way to use this is
+   to create a group with no users in it (except perhaps cvs
+   administrators), set the cvs executable to setgid that group, chown
+   all the repository files to that group, and change all directory
+   permissions in the repository to 770.  The last person to modify a
+   file will own it, but as long as directory permissions are set
+   right that won't matter.  You'll need a system which inherits file
+   groups from the parent directory (WARNING: using the wrong kind of
+   system (I think Solaris 2.4 is the wrong kind, for example) will
+   create a security hole!  You will receive no warning other than the
+   fact that files in the working directory are owned by the group
+   which cvs is setgid to).
+
+   One security hole which has been reported is that setgid is not
+   turned off when the editor is invoked--most editors provide a way
+   to execute a shell, or the user can specify an editor (this one is
+   large enough to drive a truck through).  Don't assume that the
+   holes described here are the only ones; I don't know how carefully
+   SETXID has been inspected for security holes.  */
+#ifndef SETXID_SUPPORT
+/* #define SETXID_SUPPORT */
+#endif
+
+/*
+ * Should we build the password-authenticating client?  Whether to
+ * include the password-authenticating _server_, on the other hand, is
+ * set in config.h.
+ */
+#ifdef CLIENT_SUPPORT
+#define AUTH_CLIENT_SUPPORT 1
+#endif
+
+/*
+ * If you are working with a large remote repository and a 'cvs
+ * checkout' is swamping your network and memory, define these to
+ * enable flow control.  You will end up with even less probability of
+ * a consistent checkout (see Concurrency in cvs.texinfo), but CVS
+ * doesn't try to guarantee that anyway.  The master server process
+ * will monitor how far it is getting behind, if it reaches the high
+ * water mark, it will signal the child process to stop generating
+ * data when convenient (ie: no locks are held, currently at the
+ * beginning of a new directory).  Once the buffer has drained
+ * sufficiently to reach the low water mark, it will be signalled to
+ * start again.  You may override the default hi/low watermarks here
+ * too.
+ */
+#define SERVER_FLOWCONTROL
+#define SERVER_HI_WATER (2 * 1024 * 1024)
+#define SERVER_LO_WATER (1 * 1024 * 1024)
+
+/* End of CVS configuration section */
+
+/*
+ * Externs that are included in libc, but are used frequently enough
+ * to warrant defining here.
+ */
+#ifndef STDC_HEADERS
+extern void exit ();
+#endif
diff --exclude=CVS -urN cvs.orig/src/parseinfo.c cvs/src/parseinfo.c
--- cvs.orig/src/parseinfo.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/parseinfo.c	Wed Jul 28 04:13:38 1999
@@@@ -367,8 +367,40 @@@@
 	       opendir it or something, but I don't see any particular
 	       reason to do that now rather than waiting until lock.c.  */
 	}
+#ifdef MYSQL_SUPPORT
+	else if (strcmp (line, "MysqlPort") == 0) {
+	    mysql_portnum = atoi(p);
+	}
+	else if (strncmp (line, "Mysql", 5) == 0)
+	{
+	    char *key = line + 5;
+	    char **param;
+
+	    if (!strcmp(key, "Host")) param = &mysql_host;
+	    else if (!strcmp(key, "UnixSocket")) param = &mysql_unix_socket;
+	    else if (!strcmp(key, "User")) param = &mysql_user;
+	    else if (!strcmp(key, "Passwd")) param = &mysql_passwd;
+	    else if (!strcmp(key, "DB")) param = &mysql_db;
+	    else if (!strcmp(key, "PasswdTable")) param = &mysql_passwd_table;
+	    else if (!strcmp(key, "UsernameCol")) param = &mysql_username_col;
+	    else if (!strcmp(key, "PasswdCol")) param = &mysql_passwd_col;
+	    else if (!strcmp(key, "ServerUserTable")) 
+		param = &mysql_serveruser_table;
+	    else if (!strcmp(key, "CVSUserCol")) param = &mysql_cvsuser_col;
+	    else if (!strcmp(key, "ServerUserCol")) 
+		param = &mysql_serveruser_col;
+	    else if (!strcmp(key, "Encrypt")) param = &mysql_encrypt;
+	    else if (!strcmp(key, "DefaultUser")) param = &mysql_default_user;
+	    else goto keyword_error;
+
+	    if (*param != NULL)
+		free (*param);
+	    *param = xstrdup (p);
+	}
+#endif /* MYSQL_SUPPORT */
 	else
 	{
+	keyword_error:
 	    /* We may be dealing with a keyword which was added in a
 	       subsequent version of CVS.  In that case it is a good idea
 	       to complain, as (1) the keyword might enable a behavior like
diff --exclude=CVS -urN cvs.orig/src/patch.c cvs/src/patch.c
--- cvs.orig/src/patch.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/patch.c	Wed Jul 28 02:16:01 1999
@@@@ -325,6 +325,12 @@@@
 	free (path);
     }
 
+    if (! verify_read(repository))
+    {
+       error (0, 0, "User %s cannot access %s", getcaller(), repository);
+       return (1);
+    }
+
     /* cd to the starting repository */
     if ( CVS_CHDIR (repository) < 0)
     {
@@@@ -354,7 +360,7 @@@@
     err = start_recursion (patch_fileproc, (FILESDONEPROC) NULL, patch_dirproc,
 			   (DIRLEAVEPROC) NULL, NULL,
 			   *pargc - 1, argv + 1, local,
-			   which, 0, 1, where, 1);
+			   which, 0, 1, where, 1, verify_read);
     free (where);
 
     return (err);
diff --exclude=CVS -urN cvs.orig/src/perms.c cvs/src/perms.c
--- cvs.orig/src/perms.c	Wed Dec 31 16:00:00 1969
+++ cvs/src/perms.c	Sun Aug  1 22:42:58 1999
@@@@ -0,0 +1,693 @@@@
+/*
+ * Copyright (c) 1992, Brian Berliner and Jeff Polk
+ * Copyright (c) 1989-1992, Brian Berliner
+ * 
+ * You may distribute under the terms of the GNU General Public License as
+ * specified in the README file that comes with the CVS 1.4 kit.
+ * 
+ * Checking permissions for the current user in the specified
+ * directory.
+ * 
+ */
+
+#include "cvs.h"
+
+int local_security = 0;		/* Only use the built-in CVS security system */
+
+int
+verify_admin ()
+{
+   static int is_admin_set = 0;
+   static int is_the_admin = 0;
+
+   char *filename;
+   FILE *fp;
+   char *linebuf = NULL;
+   int  linebuf_len;
+   char *name;
+
+
+   if (!local_security)
+      return 1;
+
+   if (is_admin_set)
+   {
+      return (is_the_admin);
+   }
+   else
+   {
+      is_admin_set = 1;
+
+      filename = xmalloc (strlen (CVSroot_directory)
+			  + strlen ("/CVSROOT")
+			  + strlen ("/admin")
+			  + 1);
+
+      strcpy (filename, CVSroot_directory);
+      strcat (filename, "/CVSROOT");
+      strcat (filename, "/admin");
+
+      fp = CVS_FOPEN (filename, "r");
+      if (fp != NULL)
+      {
+	 if (getline (&linebuf, &linebuf_len, fp) >= 0)
+	 {
+	    name = strtok (linebuf, "\n");
+	    if (strcmp (getcaller(), name) == 0)
+	       is_the_admin = 1;
+	    free (linebuf);
+	 }
+	 if (ferror (fp))
+	    error (1, errno, "cannot read %s", filename);
+	 if (fclose (fp) < 0)
+	    error (0, errno, "cannot close %s", filename);
+      }
+   }
+
+   return (is_the_admin);
+}
+
+int
+verify_owner (dir)
+   const char *dir;
+{
+   char *filename;
+   char *linebuf = NULL;
+   int linebuf_len;
+   char *owner;
+   FILE *fp;
+   int retval = 0;
+
+
+   if (!local_security)
+      return 1;
+
+   if (verify_admin ())
+      return 1;
+
+   filename = xmalloc (strlen (dir)
+		       + strlen ("/owner")
+		       + 1);
+
+   strcpy (filename, dir);
+   strcat (filename, "/owner");
+
+   fp = CVS_FOPEN (filename, "r");
+   if (fp == NULL)
+   {
+      error (0, errno, "cannot open %s", filename);
+      retval = 0;
+   }
+   else
+   {
+      if (getline (&linebuf, &linebuf_len, fp) >= 0)
+      {
+	 owner = strtok(linebuf, "\n");
+	 if (strcmp(owner, getcaller()) == 0)
+	    retval = 1;
+	 else
+	    retval = 0;
+	 
+	 free (linebuf);
+      }
+      else
+	 retval = 0;
+
+      if (ferror (fp))
+	 error (0, errno, "cannot read %s", filename);
+      if (fclose (fp) < 0)
+	 error (0, errno, "cannot close %s", filename);
+   }
+
+   free (filename);
+
+   return retval;
+}
+
+#ifdef TIGRIS
+static void
+find_tigris_privs_query(MYSQL *mysql, int *perms, char *query) {
+    MYSQL_RES *res;
+    MYSQL_ROW row;
+
+    mysql_real_query(mysql, query, strlen(query));
+    res = mysql_use_result(mysql);
+    /* check for 'Y's in the results
+     * We presume that read is the first column, and write is the second
+     */
+    while ((row = mysql_fetch_row(res))) {
+	if (row[0] && row[0][0] == 'Y' && *perms == 0)
+	    *perms = 1;
+	if (row[1] && row[1][0] == 'Y' && *perms != 2)
+	    *perms = 2;
+    }
+    mysql_free_result(res);
+}
+
+/* Check for permission to read/write (for us, write and create are the same)
+ * from the Tigris database. Note that domain level privs supercede
+ * project level, which supercede module level. At this time there is no way
+ * to remove privs from someone who has them higher up.
+ *
+ * Returns 0 for no privs, 1 for read-only privs, and 2 for read-write privs
+ * (we assume that if write privs exist, read ones do as well)
+ */
+static int
+find_tigris_privs(const char *project, int project_len,
+		  const char *module, int module_len) {
+    char *username;
+    int perms = 0;
+
+    /* This will give the CVS username, or the actual login name. Either way,
+     * this is what we want to use for priviledges
+     */
+    username = getcaller();
+    
+    if (CVS_mysql == NULL) {
+	error(1, 0 , "database connection not established");
+    } else {
+	char *query;
+
+	/* First check domain-level configs */
+
+	/* SELECT checkout_priv,commit_priv FROM domain_privs WHERE username =
+	 * '<usr>'
+	 * strlen("SELECT... WHERE username = ''\0") = 72
+	 */
+	query = xmalloc(72 + strlen(username) + 64 /* for good measure */);
+	sprintf(query, "SELECT checkout_priv,commit_priv FROM domain_privs "
+		"WHERE username = '%s'", username);
+	find_tigris_privs_query(CVS_mysql, &perms, query);
+	free(query);
+	
+	/* project level */
+
+	if (perms != 2 && project != NULL) {
+	    /* When the module exists, we only want to check the domain
+	     * privs if the module is non-private
+	     */
+	    if (module != NULL) {
+		/* SELECT checkout_priv,commit_priv FROM
+		 * project_privs,project_modules WHERE
+		 * project_privs.project = '<project>' AND
+		 * project_privs.username = '<user>' AND
+		 * project_modules.project = '<project>' AND
+		 * project_modules.module = '<mod>' and
+		 * project_modules.private = 'N'
+		 * strlen (...) = 232 */
+		query = xmalloc(232 + 2*project_len + module_len
+				+ strlen(username) + 64);
+		sprintf(query, "SELECT checkout_priv,commit_priv FROM "
+			"project_privs,project_modules WHERE "
+			"project_privs.project = '%.*s' AND "
+			"project_privs.username = '%s' AND "
+			"project_modules.project = '%.*s' AND "
+			"project_modules.module = '%.*s' AND "
+			"project_modules.private = 'N'",
+			project_len, project, username,
+			project_len, project, module_len, module);
+	    } else {
+		/* SELECT checkout_priv,commit_priv FROM project_privs
+		 * WHERE project = '<project>' AND username = '<user>'
+		 * strlen("SELECT ch...= '' AND username = ''\0") = 90
+		 */
+		query = xmalloc(90 + project_len + strlen(username) + 64);
+		sprintf(query, "SELECT checkout_priv,commit_priv FROM "
+			"project_privs WHERE project = '%.*s' AND "
+			"username = '%s'",
+			project_len, project, username);
+	    }
+	    find_tigris_privs_query(CVS_mysql, &perms, query);
+	    free(query);
+	}
+
+	/* module level */
+
+	/* SELECT checkout_priv,commit_priv FROM module_privs WHERE
+	 * project = '<project>' AND module = '<module>'
+	 * AND username = '<user>'
+	 * strlen("SEl... '' AND module = '' AND username = ''\0") = 105
+	 */
+	if (perms != 2 && project != NULL && module != NULL) {
+	    query = xmalloc(105 + project_len + module_len
+			    + strlen(username) + 64);
+	    sprintf(query, "SELECT checkout_priv,commit_priv FROM "
+		    "module_privs WHERE project = '%.*s' AND "
+		    "module = '%.*s' AND username = '%s'",
+		    project_len, project, module_len, module, username);
+	    find_tigris_privs_query(CVS_mysql, &perms, query);
+	    free(query);
+	}
+    }
+    
+    return perms;
+}
+
+#endif /* TIGRIS */
+
+static int
+find_perms (dir, perm)
+   const char *dir;
+   char *perm;
+{
+#ifdef TIGRIS
+   int rootlen;
+#else
+   char *filename;
+   char *linebuf = NULL;
+   int linebuf_len;
+   char *name;
+   char *permptr;
+   FILE *fp;
+#endif
+   int retval = 1;
+   char all_perms[4];
+
+
+   all_perms[0] = '\0';
+
+   if (!local_security)
+   {
+      strcpy(perm, "rwc");
+      return 0;
+   }
+
+#ifdef TIGRIS
+   rootlen = strlen(CVSroot_directory);
+
+   if (!strncmp(dir, CVSroot_directory, rootlen) && dir[rootlen] == '/') {
+       const char *project, *module, *path;
+       int modlen, projlen;
+       int privs;
+
+       if (dir[rootlen] == '/') {
+	   project = dir + rootlen + 1; /* points to project/module/path */
+	   module = strchr(project, '/');
+	   if (module != NULL) {
+	       projlen = module++ - project;
+	       path = strchr(module, '/');
+	       if (path != NULL) {
+		   modlen = path++ - module;
+	       } else {
+		   modlen = strlen(module);
+	       }
+	   } else {
+	       projlen = strlen(project);
+	       modlen = 0;
+	       path = NULL;
+	   }
+       } else {
+	   path = module = project = NULL;
+	   modlen = projlen = 0;
+       }
+
+       if ((privs = find_tigris_privs(project, projlen, module, modlen))) {
+	   strcpy(perm, privs == 2 ? "rwc" : "r");
+	   retval = 0;
+       }
+
+#if 0
+       printf("PROJ: %.*s MOD: %.*s DIR: %s\n", projlen, project,
+	      modlen, module, path);
+#endif
+   } else {
+       strcpy(perm, "");
+   }
+
+#else
+
+   if (verify_owner (dir))
+   {
+      strcpy(perm, "rwc");
+      return 0;
+   }
+
+   filename = xmalloc (strlen (dir)
+		       + strlen ("/perms")
+		       + 1);
+
+   strcpy (filename, dir);
+   strcat (filename, "/perms");
+
+   fp = CVS_FOPEN (filename, "r");
+   if (fp == NULL)
+   {
+      error (0, errno, "cannot open %s", filename);
+      retval = 1;
+   }
+   else
+   {
+      while (getline (&linebuf, &linebuf_len, fp) >= 0)
+      {
+	 name = strtok(linebuf, ":");
+	 if (strcmp(name, getcaller()) == 0)
+	 {
+	    permptr = strtok(NULL, "\n :");
+	    if (permptr != NULL)
+	    {
+	       strncpy(perm, permptr, 4);
+	       retval = 0;
+	    }
+	    free (linebuf);
+	    break;
+	 }
+	 else if (strcmp (name, "ALL") == 0)
+	 {
+	    permptr = strtok(NULL, "\n :");
+	    if (permptr != NULL)
+	    {
+	       strncpy(all_perms, permptr, 4);
+	    }
+	 }
+	 
+	 free (linebuf);
+	 linebuf = NULL;
+      }
+
+      /* If we didn't find the user but found ALL, set it to ALL's perms */
+      if ((retval == 1) && (all_perms[0] != '\0'))
+      {
+	 strcpy(perm, all_perms);
+	 retval = 0;
+      }
+
+      if (ferror (fp))
+	 error (0, errno, "cannot read %s", filename);
+      if (fclose (fp) < 0)
+	 error (0, errno, "cannot close %s", filename);
+   }
+
+   free (filename);
+#endif /* TIGRIS */
+
+   return retval;
+}
+
+int
+verify_read (dir)
+   const char *dir;
+{
+   char perm[4];
+
+   if (find_perms (dir, perm))
+      return 0;
+   else
+      if (strchr(perm, 'r') == NULL)
+	 return 0;
+      else
+	 return 1;
+}
+
+int
+verify_write (dir)
+   const char *dir;
+{
+   char perm[4];
+
+   if (find_perms (dir, perm))
+      return 0;
+   else
+      if (strchr(perm, 'w') == NULL)
+	 return 0;
+      else
+	 return 1;
+}
+
+int
+verify_create (dir)
+   const char *dir;
+{
+   char perm[4];
+
+   if (find_perms (dir, perm))
+      return 0;
+   else
+   {
+      if (strchr(perm, 'c') == NULL)
+	 return 0;
+      else
+	 return 1;
+   }
+}
+
+int
+change_owner (dir, user)
+   const char *dir;
+   const char *user;
+{
+   char *filename;
+   char *linebuf = NULL;
+   int linebuf_len;
+   char owner;
+   FILE *fp;
+   int retval = 0;
+
+
+   filename = xmalloc (strlen (dir)
+		       + strlen ("/owner")
+		       + 1);
+
+   strcpy (filename, dir);
+   strcat (filename, "/owner");
+
+   fp = CVS_FOPEN (filename, "w");
+   if (fp == NULL)
+   {
+      error (0, errno, "cannot open %s for writing", filename);
+      retval = 0;
+   }
+   else
+   {
+      fprintf (fp, "%s\n", user);
+      if (ferror (fp))
+	 error (0, errno, "cannot write %s", filename);
+      if (fclose (fp) < 0)
+	 error (0, errno, "cannot close %s", filename);
+   }
+
+   free (filename);
+
+   return retval;
+}
+
+static void
+node_deleted(p)
+   Node *p;
+{
+   if (p->key != NULL)
+      free (p->key);
+   if (p->data != NULL)
+      free (p->data);
+}
+
+static int
+write_node(p, v)
+   Node *p;
+   void *v;
+{
+   FILE *fp;
+
+   fp = v;
+   fprintf(fp, "%s:%s\n", p->key, p->data);
+   return 0;
+}
+
+int
+change_perms(dir, user, perm)
+   const char *dir;
+   const char *user;
+   const char *perm;
+{
+   char *filename;
+   char *linebuf = NULL;
+   int linebuf_len;
+   char *name;
+   FILE *fp;
+   int retval = 1;
+   char all_perms[4];
+   List *userlist;
+   char *permptr;
+   Node *namenode;
+
+
+   filename = xmalloc (strlen (dir)
+		       + strlen ("/perms")
+		       + 1);
+
+   strcpy (filename, dir);
+   strcat (filename, "/perms");
+
+   userlist = getlist();
+
+   fp = CVS_FOPEN (filename, "r");
+   if (fp != NULL)
+   {
+      while (getline (&linebuf, &linebuf_len, fp) >= 0)
+      {
+	 name = strtok(linebuf, ":");
+	 permptr = strtok(NULL, "\n :");
+	 if ((permptr != NULL) && strlen(permptr) != 0)
+	 {
+	    namenode = getnode();
+	    namenode->type = LIST;
+	    namenode->key = xstrdup (name);
+	    namenode->data = xstrdup (permptr);
+	    namenode->delproc = node_deleted;
+	    addnode(userlist, namenode);
+	 }
+
+	 free (linebuf);
+	 linebuf = NULL;
+      }
+      if (ferror (fp))
+      {
+	 error (1, errno, "cannot read %s", filename);
+      }
+      if (fclose (fp) < 0)
+	 error (0, errno, "cannot close %s", filename);
+   }
+
+   namenode = findnode(userlist, user);
+   if (namenode == NULL)
+   {
+      if (perm != NULL)
+      {
+	 namenode = getnode();
+	 namenode->type = LIST;
+	 namenode->key = xstrdup (user);
+	 namenode->data = xstrdup (perm);
+	 namenode->delproc = node_deleted;
+	 addnode(userlist, namenode);
+      }
+   }
+   else if (perm != NULL)
+   {
+      free (namenode->data);
+      namenode->data = xstrdup (perm);
+   }
+   else
+   {
+      delnode (namenode);
+   }
d2647 11
a2657 5
+   fp = CVS_FOPEN (filename, "w");
+   if (fp == NULL)
+   {
+      error (0, errno, "cannot open %s for writing", filename);
+   }
d2659 88
a2746 42
+   {
+      walklist(userlist, write_node, fp);
+      retval = 0;
+   }
+
+   dellist(&userlist);
+
+   free (filename);
+
+   return retval;
+}
+
+void
+list_owner (dir)
+   const char *dir;
+{
+   char *filename;
+   char *linebuf = NULL;
+   int linebuf_len;
+   char *owner;
+   FILE *fp;
+   int retval = 0;
+
+
+   if (!local_security)
+   {
+      error (0, 0, "No owner");
+      return;
+   }
+
+   filename = xmalloc (strlen (dir)
+		       + strlen ("/owner")
+		       + 1);
+
+   strcpy (filename, dir);
+   strcat (filename, "/owner");
+
+   fp = CVS_FOPEN (filename, "r");
+   if (fp == NULL)
+   {
+      error (0, errno, "cannot open %s", filename);
+   }
d2748 744
a3491 108
+   {
+      if (getline (&linebuf, &linebuf_len, fp) >= 0)
+      {
+	 owner = strtok(linebuf, "\n");
+	 cvs_output ("Owner: ", 0);
+	 cvs_output (owner, 0);
+	 cvs_output ("\n", 0);
+	 free (linebuf);
+      }
+      else
+	 error (0, 0, "Error reading line in %d", filename);
+
+      if (ferror (fp))
+	 error (0, errno, "cannot read %s", filename);
+      if (fclose (fp) < 0)
+	 error (0, errno, "cannot close %s", filename);
+   }
+
+   free (filename);
+}
+
+void
+list_perms (dir)
+   const char *dir;
+{
+   char *filename;
+   char *linebuf = NULL;
+   int linebuf_len;
+   char *name;
+   char *permptr;
+   FILE *fp;
+   int retval = 1;
+
+
+   if (!local_security)
+   {
+      return;
+   }
+
+   filename = xmalloc (strlen (dir)
+		       + strlen ("/perms")
+		       + 1);
+
+   strcpy (filename, dir);
+   strcat (filename, "/perms");
+
+   fp = CVS_FOPEN (filename, "r");
+   if (fp == NULL)
+   {
+      error (0, errno, "cannot open %s", filename);
+   }
+   else
+   {
+      while (getline (&linebuf, &linebuf_len, fp) >= 0)
+      {
+	 permptr = strtok(linebuf, "\n");
+	 cvs_output ("  ", 0);
+	 cvs_output (permptr, 0);
+	 cvs_output ("\n", 0);
+	 free (linebuf);
+	 linebuf = NULL;
+      }
+
+      if (ferror (fp))
+	 error (0, errno, "cannot read %s", filename);
+      if (fclose (fp) < 0)
+	 error (0, errno, "cannot close %s", filename);
+   }
+
+   free (filename);
+}
+
diff --exclude=CVS -urN cvs.orig/src/rcs.c cvs/src/rcs.c
--- cvs.orig/src/rcs.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/rcs.c	Mon Jul 26 02:51:47 1999
@@@@ -8824,7 +8824,7 @@@@
     return start_recursion (annotate_fileproc, (FILESDONEPROC) NULL,
 			    (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
 			    argc, argv, local, W_LOCAL, 0, 1, (char *)NULL,
-			    1);
+			    1, verify_read);
 }
 
 /*
diff --exclude=CVS -urN cvs.orig/src/recurse.c cvs/src/recurse.c
--- cvs.orig/src/recurse.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/recurse.c	Wed Jul 28 02:16:26 1999
@@@@ -35,6 +35,7 @@@@
     int aflag;
     int readlock;
     int dosrcs;
+    PERMPROC permproc;
 };
 
 static int do_recursion PROTO ((struct recursion_frame *frame));
@@@@ -59,6 +60,44 @@@@
 };
 
 
+static int
+verify_access (permproc, dir)
+    PERMPROC permproc;
+    char *dir;
+{
+    char *hostdir;
+    int  retval;
+
+    if (permproc == NULL)
d3493 2
a3494 1
+        return 1;
d3496 7
a3502 2
+
+    if (repository == NULL)
d3504 45
a3548 17
+       if (isdir (CVSADM))
+	  hostdir = Name_Repository ((char *) NULL, dir);
+       else
+       {
+	  hostdir = xmalloc (strlen (CVSroot_directory)
+			     + 1
+			     + strlen (dir)
+			     + 1);
+	  strcpy (hostdir, CVSroot_directory);
+	  strcat (hostdir, "/");
+	  strcat (hostdir, dir);
+       }
+
+       retval = permproc (hostdir);
+       free (hostdir);
+    }
+    else
d3550 1
a3550 1
+       retval = permproc (repository);
d3552 1
d3554 49
a3602 115
+}
+
 /* Start a recursive command.
 
    Command line arguments (ARGC, ARGV) dictate the directories and
@@@@ -67,7 +106,7 @@@@
 int
 start_recursion (fileproc, filesdoneproc, direntproc, dirleaveproc, callerdat,
 		 argc, argv, local, which, aflag, readlock,
-		 update_preload, dosrcs)
+		 update_preload, dosrcs, permproc)
     FILEPROC fileproc;
     FILESDONEPROC filesdoneproc;
     DIRENTPROC 	direntproc;
@@@@ -105,6 +144,7 @@@@
     int readlock;
     char *update_preload;
     int dosrcs;
+    PERMPROC permproc;
 {
     int i, err = 0;
 #ifdef CLIENT_SUPPORT
@@@@ -123,6 +163,7 @@@@
     frame.aflag = aflag;
     frame.readlock = readlock;
     frame.dosrcs = dosrcs;
+    frame.permproc = permproc;
 
     expand_wild (argc, argv, &argc, &argv);
 
@@@@ -284,7 +325,17 @@@@
 		file_to_try = xstrdup (argv[i]);
 
 	    if (isfile (file_to_try))
-		addfile (&files_by_dir, dir, comp);
+	    {
+	        if (! verify_access (frame.permproc, dir))
+		{
+		    error (0, 0, "User '%s' cannot access %s",
+			   getcaller(), dir);
+		}
+		else
+		{
+		   addfile (&files_by_dir, dir, comp);
+		}
+	    }
 	    else if (isdir (dir))
 	    {
 		if ((which & W_LOCAL) && isdir (CVSADM)
@@@@ -620,6 +671,15 @@@@
     }
     srepository = repository;		/* remember what to free */
 
+    /*
+     * Do we have access to this directory?
+     */
+    if (! verify_access (frame->permproc, update_dir))
+    {
+       error (0, 0, "User '%s' cannot access %s", getcaller(), update_dir);
+       return (1);
+    }
+
     fileattr_startdir (repository);
 
     /*
@@@@ -1155,6 +1215,7 @@@@
     List *save_dirlist;
     char *save_update_dir = NULL;
     struct saved_cwd cwd;
+
 
     /* if this dir was also an explicitly named argument, then skip
        it.  We'll catch it later when we do dirs. */
diff --exclude=CVS -urN cvs.orig/src/remove.c cvs/src/remove.c
--- cvs.orig/src/remove.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/remove.c	Mon Jul 26 02:51:48 1999
@@@@ -90,7 +90,7 @@@@
 		start_recursion (remove_force_fileproc, (FILESDONEPROC) NULL,
 				 (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL,
 				 (void *) NULL, argc, argv, local, W_LOCAL,
-				 0, 0, (char *) NULL, 0);
+				 0, 0, (char *) NULL, 0, NULL);
 	    }
 	    /* else FIXME should probably act as if the file doesn't exist
 	       in doing the following checks.  */
@@@@ -112,7 +112,8 @@@@
     err = start_recursion (remove_fileproc, (FILESDONEPROC) NULL,
                            remove_dirproc, (DIRLEAVEPROC) NULL, NULL,
 			   argc, argv,
-                           local, W_LOCAL, 0, 1, (char *) NULL, 1);
+                           local, W_LOCAL, 0, 1, (char *) NULL, 1,
+			   verify_create);
 
     if (removed_files)
 	error (0, 0, "use '%s commit' to remove %s permanently", program_name,
diff --exclude=CVS -urN cvs.orig/src/root.c cvs/src/root.c
--- cvs.orig/src/root.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/root.c	Mon Jul 26 02:51:48 1999
@@@@ -289,6 +289,7 @@@@
 char *CVSroot_username;		/* the username or NULL if method == local */
 char *CVSroot_hostname;		/* the hostname or NULL if method == local */
 char *CVSroot_directory;	/* the directory name */
+char *CVSroot_prefix = NULL;    /* Prefix for CVSroot if supplied on cmdline */
 
 int
 parse_cvsroot (CVSroot)
@@@@ -496,7 +497,19 @@@@
 set_local_cvsroot (dir)
     char *dir;
 {
-    CVSroot_original = dir;
+    if (CVSroot_prefix == NULL)
+    {
+        CVSroot_original = xstrdup (dir);
+    }
d3605 4
a3608 6
+        CVSroot_original = malloc (strlen(dir) + strlen(CVSroot_prefix) + 1);
+        if (CVSroot_original != NULL)
+        {
+            strcpy(CVSroot_original, CVSroot_prefix);
+            strcat(CVSroot_original, dir);
+        }
d3610 28
a3637 348
     CVSroot_method = local_method;
     CVSroot_directory = CVSroot_original;
     CVSroot_username = NULL;
diff --exclude=CVS -urN cvs.orig/src/rtag.c cvs/src/rtag.c
--- cvs.orig/src/rtag.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/rtag.c	Mon Jul 26 02:51:48 1999
@@@@ -316,7 +316,7 @@@@
     err = start_recursion (check_fileproc, check_filesdoneproc,
                            (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
                            *pargc - 1, argv + 1, local, which, 0, 1,
-                           where, 1);
+                           where, 1, verify_write);
     
     if (err)
     {
@@@@ -327,7 +327,7 @@@@
     err = start_recursion (rtag_fileproc, rtag_filesdoneproc, rtag_dirproc,
 			   (DIRLEAVEPROC) NULL, NULL,
 			   *pargc - 1, argv + 1, local,
-			   which, 0, 0, where, 1);
+			   which, 0, 0, where, 1, verify_write);
     free (where);
     dellist(&mtlist);
 
diff --exclude=CVS -urN cvs.orig/src/scramble.c cvs/src/scramble.c
--- cvs.orig/src/scramble.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/scramble.c	Wed Jul 28 02:52:38 1999
@@@@ -69,9 +69,9 @@@@
   243,233,253,240,194,250,191,155,142,137,245,235,163,242,178,152 };
 
 
-/* SCRAMBLE and DESCRAMBLE work like this:
+/* ENSCRAMBLE and DESCRAMBLE work like this:
  *
- * scramble(STR) returns SCRM, a scrambled copy of STR.  SCRM[0] is a
+ * enscramble(STR) returns SCRM, a scrambled copy of STR.  SCRM[0] is a
  * single letter indicating the scrambling method.  As of this
  * writing, the only legal method is 'A', but check the code for more
  * up-to-date information.  The copy will have been allocated with
@@@@ -84,7 +84,7 @@@@
 
 /* Return a malloc'd, scrambled version of STR. */
 char *
-scramble (str)
+enscramble (str)
     char *str;
 {
     int i;
@@@@ -127,7 +127,7 @@@@
 #endif  /* DIAGNOSTIC */
 
     /* Method `A' is symmetrical, so scramble again to decrypt. */
-    s = scramble (str + 1);
+    s = enscramble (str + 1);
 
     /* Shift the whole string one char to the left, pushing the unwanted
        'A' off the left end.  Safe, because s is null-terminated. */
@@@@ -165,7 +165,7 @@@@
     for (i = 0; i < 5; i++)
     {
 	printf ("clear%d: %s\n", i, cleartexts[i]);
-	e = scramble (cleartexts[i]);
+	e = enscramble (cleartexts[i]);
 	printf ("scram%d: %s\n", i, e);
 	m = descramble (e);
 	free (e);
diff --exclude=CVS -urN cvs.orig/src/server.c cvs/src/server.c
--- cvs.orig/src/server.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/server.c	Wed Jul 28 21:37:24 1999
@@@@ -793,6 +793,9 @@@@
     /* For pserver, this will already have happened, and the call will do
        nothing.  But for rsh, we need to do it now.  */
     parse_config (CVSroot_directory);
+#ifdef MYSQL_SUPPORT
+    cvs_mysql_connect();
+#endif
 
     path = malloc (strlen (CVSroot_directory)
 		   + sizeof (CVSROOTADM)
@@@@ -3389,6 +3392,41 @@@@
 }
 
 void
+serve_setowner (arg)
+   char *arg;
+{
+   do_cvs_command ("setowner", setowner);
+}
+
+void
+serve_setperm (arg)
+   char *arg;
+{
+   do_cvs_command ("setperm", setperm);
+}
+
+void
+serve_listperm (arg)
+   char *arg;
+{
+   do_cvs_command ("listperm", listperm);
+}
+
+void
+serve_setpass (arg)
+   char *arg;
+{
+   do_cvs_command ("setpass", setpass);
+}
+
+void
+serve_deluser (arg)
+   char *arg;
+{
+   do_cvs_command ("deluser", deluser);
+}
+
+void
 server_update_entries (file, update_dir, repository, updated)
     char *file;
     char *update_dir;
@@@@ -4526,6 +4564,11 @@@@
   REQ_LINE("expand-modules", serve_expand_modules, 0),
   REQ_LINE("ci", serve_ci, RQ_ESSENTIAL),
   REQ_LINE("co", serve_co, RQ_ESSENTIAL),
+  REQ_LINE("setowner", serve_setowner, 0),
+  REQ_LINE("setperm", serve_setperm, 0),
+  REQ_LINE("listperm", serve_listperm, 0),
+  REQ_LINE("setpass", serve_setpass, 0l),
+  REQ_LINE("deluser", serve_deluser, 0),
   REQ_LINE("update", serve_update, RQ_ESSENTIAL),
   REQ_LINE("diff", serve_diff, 0),
   REQ_LINE("log", serve_log, 0),
@@@@ -5079,10 +5122,10 @@@@
     umask (0);
 
 #if HAVE_PUTENV
-    /* Set LOGNAME and USER in the environment, in case they are
-       already set to something else.  */
+    /* Set LOGNAME and and CVS_USER in the environment, in case they
+       are already set to something else.  */
     {
-	char *env;
+	char *env, *cvs_user;
 
 	env = xmalloc (sizeof "LOGNAME=" + strlen (username));
 	(void) sprintf (env, "LOGNAME=%s", username);
@@@@ -5091,6 +5134,11 @@@@
 	env = xmalloc (sizeof "USER=" + strlen (username));
 	(void) sprintf (env, "USER=%s", username);
 	(void) putenv (env);
+
+         cvs_user = NULL != CVS_Username ? CVS_Username : "";
+	 env = xmalloc (sizeof "CVS_USER=" + strlen (cvs_user));
+         (void) sprintf (env, "CVS_USER=%s", cvs_user);
+         (void) putenv (env);	
     }
 #endif /* HAVE_PUTENV */
 }
@@@@ -5199,6 +5247,163 @@@@
     return retval;
 }
 
+#ifdef MYSQL_SUPPORT
+/* 
+ * Read the mysql file and set up the server.
+ *
+ * 0 means no entry found for this user.
+ * 1 means entry found and password matches.
+ * 2 means entry found, but password does not match.
+ *
+ * If success, host_user_ptr will be set to point at the system
+ * username (i.e., the "real" identity, which may or may not be the
+ * CVS username) of this user; caller may free this.  Global
+ * CVS_Username will point at an allocated copy of cvs username (i.e.,
+ * the username argument below).
+ */
+static int
+check_mysql_password (username, password, repository, host_user_ptr)
+    char *username, *password, *repository, **host_user_ptr;
+{
+    int retval;
+    MYSQL_RES *res;
+    MYSQL_ROW row;
+    char *query;
+
+    retval = 0;
+    *host_user_ptr = NULL;
+
+    /* Check configuration for MySQL password configuration */
+    if (!mysql_passwd_table && !mysql_username_col && !mysql_passwd_col
+	&& !mysql_serveruser_table && !mysql_cvsuser_col
+	&& !mysql_serveruser_col && !mysql_default_user) {
+	return 0;
+    }
+
+    if (!mysql_passwd_table || !mysql_username_col || !mysql_passwd_col) {
+	error(0, 0, "missing required MySQL password parameters in config");
+	return 0;
+    }
+
+    if (CVS_mysql == NULL) {
+	error(0, 0, "MySQL password configured, but database inactive");
+	return 0;
+    }
+
+    /* Perform the query to get the password info out of the
+     * database. Unfortunately, because the caller to this
+     * function wants to know whether we found the user or not,
+     * not simply if the password matched, we can't just use SQL
+     * to find rows that match both name and password. We just ask
+     * for the password (and in the case of MySQL-encryption, the
+     * encrypted password), and compare it ourselves.
+     *
+     * (also, MySQL does case-insensitive string compares, so that
+     * might not be a good idea at any rate, for unencrypted
+     * passwords. But it's a minor point, and you can turn it off
+     * anyway.)  
+     */
+    
+    /* SELECT <pwd-col>, PASSWORD('<pwd>') FROM <table> WHERE
+     * <user-col> = '<username>'\0
+     * strlen("SELECT  , PASSWORD('') FROM  WHERE  = ''\0") = 41
+     */
+    query = xmalloc(41 + strlen(mysql_passwd_col) + strlen(password)
+		    + strlen(mysql_passwd_table) 
+		    + strlen(mysql_username_col)
+		    + strlen(username) 
+		    + 64 /* for good measure */);
+    if (mysql_encrypt && !strcasecmp(mysql_encrypt, "mysql")) {
+	sprintf(query, "SELECT %s, PASSWORD('%s') FROM %s WHERE "
+		"%s = '%s'", mysql_passwd_col, password, 
+		mysql_passwd_table, mysql_username_col, username);
+    } else {
+	sprintf(query, "SELECT %s FROM %s WHERE %s = '%s'",
+		mysql_passwd_col, mysql_passwd_table,
+		mysql_username_col, username);
+    }
+
+    
+    mysql_real_query(CVS_mysql, query, strlen(query));
+    res = mysql_use_result(CVS_mysql);
+    /* The API requires us to grab all the values, so let's only
+     * concern ourselves with the last one - overwrite over until
+     * the query is over. 
+     */
+    while ((row = mysql_fetch_row(res))) {
+	unsigned long *lengths = mysql_fetch_lengths(res);
+	/* We found something! What we do now depends on 
+	 * what type of encryption we're using.
+	 */
+	retval = 2;	/* Not a match until proven otherwise */
+	if (!mysql_encrypt || !strcasecmp(mysql_encrypt, "none")) {
+	    if (lengths[0] == strlen(password)
+		&& !strncmp(password, row[0], lengths[0]))
+		retval = 1;
+	} else if (!strcasecmp(mysql_encrypt, "crypt")) {
+	    char *crypted_pwd = crypt(password, row[0]);
+	    if (lengths[0] == strlen(crypted_pwd)
+		&& !strncmp(crypted_pwd, row[0], lengths[0]))
+		retval = 1;
+	} else if (!strcasecmp(mysql_encrypt, "mysql")) {
+	    if (lengths[0] == lengths[1]
+		&& !strncmp(row[0], row[1], lengths[0]))
+		retval = 1;
+	} else {
+	    error(0, 0, "unknown encryption type %s", mysql_encrypt);
+	    retval = 0;
+	}
+    }
+    
+    mysql_free_result(res);
+    free(query);
+    
+    /* If we found the result, we now need to find the host
+     * (server) username
+     */
+    if (retval == 1) {
+	if (mysql_serveruser_table && mysql_serveruser_col 
+	    && mysql_cvsuser_col) {
+	    /* SELECT <serveruser_col> FROM <serveruser_table>
+	     * WHERE <cvsuser_col> = '<username>'\0
+	     * strlen("SELECT  FROM  WHERE  = ''\0") = 26
+	     */
+	    query = xmalloc(26 + strlen(mysql_serveruser_col)
+			    + strlen(mysql_cvsuser_col)
+			    + strlen(username)
+			    + 64 /* for good measure */);
+	    sprintf(query, "SELECT %s FROM %s WHERE %s = '%s'",
+		    mysql_serveruser_col, mysql_serveruser_table, 
+		    mysql_cvsuser_col,
+		    username);
+	    
+	    mysql_real_query(CVS_mysql, query, strlen(query));
+	    res = mysql_use_result(CVS_mysql);
+	    
+	    while ((row = mysql_fetch_row(res))) {
+		unsigned long *lengths = mysql_fetch_lengths(res);
+		if (row[0] != NULL) {
+		    *host_user_ptr = xmalloc(lengths[0]);
+		    strcpy(*host_user_ptr, row[0]);
+		}
+	    }
+	    
+	    mysql_free_result(res);
+	    free(query);		    
+	}
+	
+	if (*host_user_ptr == NULL) {
+	    if (mysql_default_user != NULL) {
+		*host_user_ptr = xstrdup(mysql_default_user);
+	    } else {
+		*host_user_ptr = xstrdup(username);
+	    }
+	}
+    }
+
+    return retval;
+}
+#endif
 
 /* Return a hosting username if password matches, else NULL. */
 static char *
@@@@ -5212,6 +5417,11 @@@@
        password file.  If so, that's enough to authenticate with.  If
        not, we'll check /etc/passwd. */
 
+#ifdef MYSQL_SUPPORT
+    rc = check_mysql_password (username, password, repository,
+			       &host_user);
+    if (rc == 0)
+#endif
     rc = check_repository_password (username, password, repository,
 				    &host_user);
 
@@@@ -5351,6 +5561,7 @@@@
     char *descrambled_password;
 #endif /* AUTH_SERVER_SUPPORT */
     int verify_and_exit = 0;
+    char *real_repository = NULL;
 
     /* The Authentication Protocol.  Client sends:
      *
@@@@ -5446,6 +5657,19 @@@@
     strip_trailing_newlines (username);
     strip_trailing_newlines (password);
 
+    if (CVSroot_prefix != NULL)
d3639 1
a3639 5
+        real_repository = malloc (strlen(CVSroot_prefix)
+				  + strlen(repository)
+                                  + 1);
+        strcpy(real_repository, CVSroot_prefix);
+        strcat(real_repository, repository);
d3643 26
a3668 1
+        real_repository = repository;
d3670 25
a3694 14
+
     /* ... and make sure the protocol ends on the right foot. */
     /* See above comment about error handling.  */
     getline (&tmp, &tmp_allocated, stdin);
@@@@ -5470,11 +5694,25 @@@@
        file, parse_config already printed an error.  We keep going.
        Why?  Because if we didn't, then there would be no way to check
        in a new CVSROOT/config file to fix the broken one!  */
-    parse_config (repository);
+    parse_config (real_repository);
 
+#ifdef MYSQL_SUPPORT
+    /* We need to connect to the database now, because we may need it
+     * to check the password just a few lines down.
a3695 2
+    cvs_mysql_connect();
+#endif
d3697 384
a4080 53
     /* We need the real cleartext before we hash it. */
     descrambled_password = descramble (password);
-    host_user = check_password (username, descrambled_password, repository);
+    host_user = check_password (username, descrambled_password,
+                                real_repository);
+
+    if (CVSroot_prefix != NULL)
+    {
+       free (real_repository);
+    }
+
     memset (descrambled_password, 0, strlen (descrambled_password));
     free (descrambled_password);
     if (host_user == NULL)
@@@@ -5497,7 +5735,8 @@@@
 	SYSTEM_CLEANUP ();
 #endif
 
-	exit (0);
+// For some reason this messes things up. Stop it.
+//	exit (0);
     }
 
     /* Set Pserver_Repos so that we can check later that the same
@@@@ -5506,7 +5745,8 @@@@
     strcpy (Pserver_Repos, repository);
 
     /* Switch to run as this user. */
-    switch_to_user (host_user);
+    if (! local_security)
+        switch_to_user (host_user);
     free (tmp);
     free (repository);
     free (username);
@@@@ -5593,7 +5833,8 @@@@
     }
 
     /* Switch to run as this user. */
-    switch_to_user (user);
+    if (! local_security)
+        switch_to_user (user);
 }
 #endif /* HAVE_KERBEROS */
 
@@@@ -5685,10 +5926,14 @@@@
 			      &mechid) != GSS_S_COMPLETE
 	    || krb5_parse_name (kc, ((gss_buffer_t) &desc)->value, &p) != 0
 	    || krb5_aname_to_localname (kc, p, sizeof buf, buf) != 0
-	    || krb5_kuserok (kc, p, buf) != TRUE)
+            || (!local_security && krb5_kuserok (kc, p, buf) != TRUE))
 	{
 	    error (1, 0, "access denied");
 	}
d4082 707
a4788 901
+	{
+       	    CVS_Username = xstrdup(buf);
+	}
 	krb5_free_principal (kc, p);
 	krb5_free_context (kc);
     }
@@@@ -5705,7 +5950,8 @@@@
 	    error (1, errno, "fwrite failed");
     }
 
-    switch_to_user (buf);
+    if (! local_security)
+        switch_to_user (buf);
 
     printf ("I LOVE YOU\n");
     fflush (stdout);
diff --exclude=CVS -urN cvs.orig/src/setowner.c cvs/src/setowner.c
--- cvs.orig/src/setowner.c	Wed Dec 31 16:00:00 1969
+++ cvs/src/setowner.c	Wed Jul 28 02:17:56 1999
@@@@ -0,0 +1,101 @@@@
+/*
+ * Copyright (c) 1992, Brian Berliner and Jeff Polk
+ * Copyright (c) 1989-1992, Brian Berliner
+ * 
+ * You may distribute under the terms of the GNU General Public License as
+ * specified in the README file that comes with the CVS 1.4 kit.
+ * 
+ * Setowner
+ * 
+ * Changes the owner of a directory to the given name.
+ */
+
+#include "cvs.h"
+
+static const char *const setowner_usage[] =
+{
+    "Usage: %s %s user directory...\n",
+    NULL
+};
+
+int
+setowner (argc, argv)
+   int argc;
+   char **argv;
+{
+   char *user;
+   int i;
+   char *repository;
+   int c;
+   int err = 0;
+
+
+   if (argc == 1 || argc == -1)
+      usage (setowner_usage);
+
+   wrap_setup ();
+
+   optind = 1;
+   while ((c = getopt (argc, argv, "")) != -1)
+   {
+      switch (c)
+      {
+      case '?':
+      default:
+	 usage (setowner_usage);
+	 break;
+      }
+   }
+   argc -= optind;
+   argv += optind;
+
+   if (argc <= 1)
+      usage (setowner_usage);
+
+   /* find the repository associated with our current dir */
+   repository = Name_Repository ((char *) NULL, (char *) NULL);
+
+#ifdef CLIENT_SUPPORT
+   if (client_active)
+   {
+      start_server ();
+      ign_setup ();
+
+      send_arg (argv[0]); /* Send the user name */
+      argc--;
+      argv++;
+      send_file_names (argc, argv, SEND_EXPAND_WILD);
+      send_files (argc, argv, 0, 0, SEND_NO_CONTENTS);
+      send_to_server ("setowner\012", 0);
+      return get_responses_and_close ();
+   }
+#endif
+
+   user = argv[0];
+
+   /* walk the arg list checking files/dirs */
+   for (i = 1; i < argc; i++)
+   {
+      char dname[PATH_MAX];
+      (void) sprintf (dname, "%s/%s", repository, argv[i]);
+      if (!isdir (dname))
+      {
+	 error (0, 0, "`%s' is not a directory", dname);
+	 err++;
+      }
+      else
+      {
+	 if (!verify_owner (dname))
+	 {
+	    error (0, 0, "'%s' does not own '%s'\n", getcaller(), dname);
+	    err++;
+	 }
+	 else
+	 {
+	    change_owner (dname, user);
+	 }
+      }
+   }
+
+   return (err);
+}
diff --exclude=CVS -urN cvs.orig/src/setpass.c cvs/src/setpass.c
--- cvs.orig/src/setpass.c	Wed Dec 31 16:00:00 1969
+++ cvs/src/setpass.c	Wed Jul 28 02:57:32 1999
@@@@ -0,0 +1,466 @@@@
+/*
+ * Copyright (c) 1992, Brian Berliner and Jeff Polk
+ * Copyright (c) 1989-1992, Brian Berliner
+ * 
+ * You may distribute under the terms of the GNU General Public License as
+ * specified in the README file that comes with the CVS 1.4 kit.
+ * 
+ * setpass
+ * 
+ * Changes the password of the caller
+ */
+
+#include "cvs.h"
+
+extern char *crypt PROTO((const char *, const char *));
+
+#define ascii_to_bin(c) ((c)>='a'?(c-59):(c)>='A'?((c)-53):(c)-'.')
+#define bin_to_ascii(c) ((c)>=38?((c)-38+'a'):(c)>=12?((c)-12+'A'):(c)+'.')
+
+static const char *const setpass_usage[] =
+{
+    "Usage: %s %s [-a] [username]\n",
+    "\t-a\tAdd the user\n",
+    NULL
+};
+
+static void
+node_deleted(p)
+   Node *p;
+{
+   if (p->key != NULL)
+      free (p->key);
+   if (p->data != NULL)
+      free (p->data);
+}
+
+static int
+write_node (p, v)
+   Node *p;
+   void *v;
+{
+   FILE *fp;
+
+   fp = v;
+   fprintf (fp, "%s:%s\n", p->key, p->data);
+   return 0;
+}
+
+int
+setpass (argc, argv)
+   int argc;
+   char **argv;
+{
+   int c;
+   int err = 0;
+   char *typed_password, *typed_password2;
+   char *filename;
+   List *userlist;
+   Node *namenode;
+   char *rest;
+   char *oldpassword;
+   char *oldrest;
+   FILE *fp;
+   char *linebuf = NULL;
+   int  linebuf_len;
+   char *username;
+   int  adduser = 0;
+
+
+   if (argc == -1)
+      usage (setpass_usage);
+
+   wrap_setup ();
+
+   optind = 1;
+   while ((c = getopt (argc, argv, "a")) != -1)
+   {
+      switch (c)
+      {
+      case 'a':
+	 adduser = 1;
+	 break;
+
+      case '?':
+      default:
+	 usage (setpass_usage);
+	 break;
+      }
+   }
+   argc -= optind;
+   argv += optind;
+
+#ifdef CLIENT_SUPPORT
+   if (client_active)
+   {
+      if (argc > 1)
+	 usage (setpass_usage);
+
+      if (CVSroot_method != pserver_method)
+      {
+	 error (0, 0, "can only use pserver method with `setpass' command");
+	 error (1, 0, "CVSROOT: %s", CVSroot_original);
+      }
+    
+      if (! CVSroot_username)
+      {
+	 error (0, 0, "CVSROOT \"%s\" is not fully-qualified.",
+		CVSroot_original);
+	 error (1, 0, "Please make sure to specify \"user@@host\"!");
+      }
+
+      start_server ();
+      ign_setup ();
+
+      printf ("Changing password for %s@@%s\n",
+	      (argc == 1) ? argv[0] : CVSroot_username, CVSroot_hostname);
+      fflush (stdout);
+
+      typed_password = getpass ("New password: ");
+      typed_password = xstrdup (typed_password);
+      if (strlen(typed_password) == 0)
+	 error (1, 0, "A password must be supplied");
+
+      typed_password2 = getpass ("Verify password: ");
+      if (strcmp(typed_password, typed_password2) != 0)
+      {
+	 memset (typed_password, 0, strlen (typed_password));
+	 free (typed_password);
+	 memset (typed_password2, 0, strlen (typed_password2));
+	 error (1, 0, "Passwords do not match, try again");
+      }
+      memset (typed_password2, 0, strlen (typed_password2));
+      typed_password = enscramble (typed_password);
+
+      if (adduser)
+	 send_arg ("-a");
+
+      send_arg (typed_password); /* Send the new password */
+
+      if (argc == 1)
+	 send_arg(argv[0]);
+
+      send_to_server ("setpass\012", 0);
+      memset (typed_password, 0, strlen (typed_password));
+      free (typed_password);
+      return get_responses_and_close ();
+   }
+#endif
+
+   if (!server_active)
+   {
+      error (1, 0, "Server is not active, not permitted interactively");
+   }
+
+#ifndef AUTH_SERVER_SUPPORT
+   error (1, 0, "Authentication not supported");
+#else
+   if ((argc != 1) && (argc != 2))
+      usage (setpass_usage);
+
+   if ((argc == 2) && (! verify_admin ()))
+      error (1, 0,
+	     "Only the administrator can add or change another's password");
+
+   if (strlen(argv[0]) == 0)
+      error (1, 0, "A password must be supplied");
+
+   {
+      time_t tm;
+      char salt[2];
+      char *cryptstr;
+      char setup_str[1024];
+
+      argv[0] = descramble (argv[0]);
+
+      time(&tm);
+      salt[0] = bin_to_ascii(tm & 0x3f);
+      salt[1] = bin_to_ascii((tm >> 5) & 0x3f);
+      cryptstr = crypt(argv[0], salt);
+      memset (argv[0], 0, strlen (argv[0]));
+
+      filename = xmalloc (strlen (CVSroot_directory)
+			  + strlen ("/CVSROOT")
+			  + strlen ("/passwd")
+			  + 1);
+
+      strcpy (filename, CVSroot_directory);
+      strcat (filename, "/CVSROOT");
+      strcat (filename, "/passwd");
+
+      sprintf (setup_str, "co -l %s", filename);
+      run_setup (setup_str);
+      if (run_exec("/dev/null", "/dev/null", "/dev/null", RUN_REALLY) != 0)
+	 error (1, 0, "Error checking out password file");
+
+      userlist = getlist();
+
+      fp = CVS_FOPEN (filename, "r");
+      if (fp != NULL)
+      {
+	 while (getline (&linebuf, &linebuf_len, fp) >= 0)
+	 {
+	    namenode = getnode();
+	    namenode->type = LIST;
+	    namenode->key = xstrdup (strtok (linebuf, ":\n"));
+	    if ((namenode->key == NULL) || (strlen (namenode->key) == 0))
+	    {
+	       freenode (namenode);
+	    }
+	    else
+	    {
+	       namenode->data = xstrdup (strtok (NULL, "\n"));
+	       namenode->delproc = node_deleted;
+	       addnode(userlist, namenode);
+	    }
+	    
+	    free (linebuf);
+	    linebuf = NULL;
+	 }
+	 if (ferror (fp))
+	    error (1, errno, "cannot read %s", filename);
+	 if (fclose (fp) < 0)
+	    error (0, errno, "cannot close %s", filename);
+      }
+
+      if (argc == 1)
+	 username = getcaller();
+      else
+	 username = argv[1];
+
+      namenode = findnode(userlist, username);
+      if (namenode == NULL)
+      {
+	 if (argc == 1)
+	    error (1, 0, "Could not find %s in password file", username);
+
+	 if (!adduser)
+	    error (1, 0, "Could not find %s in password file", username);
+
+	 namenode = getnode();
+	 namenode->type = LIST;
+	 namenode->key = xstrdup (argv[1]);
+	 namenode->delproc = node_deleted;
+	 namenode->data = NULL;
+	 addnode(userlist, namenode);
+      }
+
+      rest = namenode->data;
+      if (rest == NULL)
+      {
+	 oldrest = NULL;
+	 namenode->data = xmalloc (16);
+      }
+      else
+      {
+	 namenode->data = xmalloc (strlen(rest) + 1);
+	 oldpassword = strtok (rest, ":");
+	 oldrest = strtok (NULL, "");
+      }
+
+      if (oldrest != NULL)
+      {
+	 sprintf (namenode->data, "%s:%s", cryptstr, oldrest);
+	 free (rest);
+      }
+      else
+	 sprintf (namenode->data, "%s:", cryptstr);
+   
+      fp = CVS_FOPEN (filename, "w");
+      if (fp == NULL)
+      {
+	 error (0, errno, "cannot open %s for writing", filename);
+      }
+      else
+      {
+	 walklist(userlist, write_node, fp);
+	 if (fclose (fp) < 0)
+	    error (0, errno, "cannot close %s", filename);
+      }
+
+      dellist(&userlist);
+
+      sprintf (setup_str, "ci %s", filename);
+      run_setup (setup_str);
+      if (run_exec("/dev/null", "/dev/null", "/dev/null", RUN_REALLY) != 0)
+	 error (0, 0, "Error checking in password file");
+
+      sprintf (setup_str, "co %s", filename);
+      run_setup (setup_str);
+      if (run_exec("/dev/null", "/dev/null", "/dev/null", RUN_REALLY) != 0)
+	 error (0, 0, "Error checking out password file");
+
+    }
+#endif
+   free (filename);
+
+   return (err);
+}
+
+static const char *const deluser_usage[] =
+{
+    "Usage: %s %s username\n",
+    NULL
+};
+
+int
+deluser (argc, argv)
+   int argc;
+   char **argv;
+{
+   int c;
+   int err = 0;
+   char *filename;
+   List *userlist;
+   Node *namenode;
+   char *rest;
+   char *oldpassword;
+   char *oldrest;
+   FILE *fp;
+   char *linebuf = NULL;
+   int  linebuf_len;
+   char setup_str[1024];
+
+
+   if (argc == -1)
+      usage (deluser_usage);
+
+   wrap_setup ();
+
+   optind = 1;
+   while ((c = getopt (argc, argv, "")) != -1)
+   {
+      switch (c)
+      {
+      case '?':
+      default:
+	 usage (deluser_usage);
+	 break;
+      }
+   }
+   argc -= optind;
+   argv += optind;
+
+#ifdef CLIENT_SUPPORT
+   if (client_active)
+   {
+      if (argc != 1)
+	 usage (deluser_usage);
+
+      if (CVSroot_method != pserver_method)
+      {
+	 error (0, 0, "can only use pserver method with `deluser' command");
+	 error (1, 0, "CVSROOT: %s", CVSroot_original);
+      }
+    
+      if (! CVSroot_username)
+      {
+	 error (0, 0, "CVSROOT \"%s\" is not fully-qualified.",
+		CVSroot_original);
+	 error (1, 0, "Please make sure to specify \"user@@host\"!");
+      }
+
+      start_server ();
+      ign_setup ();
+
+      send_arg(argv[0]);
+
+      send_to_server ("deluser\012", 0);
+      return get_responses_and_close ();
+   }
+#endif
+
+   if (!server_active)
+   {
+      error (1, 0, "Server is not active, not permitted interactively");
+   }
+
+   if (argc != 1)
+      usage (deluser_usage);
+
+   if (! verify_admin ())
+      error (1, 0,
+	     "Only the administrator can delete a user");
+
+   filename = xmalloc (strlen (CVSroot_directory)
+		       + strlen ("/CVSROOT")
+		       + strlen ("/passwd")
+		       + 1);
+   
+   strcpy (filename, CVSroot_directory);
+   strcat (filename, "/CVSROOT");
+   strcat (filename, "/passwd");
+
+   sprintf (setup_str, "co -l %s", filename);
+   run_setup (setup_str);
+   if (run_exec("/dev/null", "/dev/null", "/dev/null", RUN_REALLY) != 0)
+      error (1, 0, "Error checking out password file");
+
+   userlist = getlist();
+   
+   fp = CVS_FOPEN (filename, "r");
+   if (fp != NULL)
+   {
+      while (getline (&linebuf, &linebuf_len, fp) >= 0)
+      {
+	 namenode = getnode();
+	 namenode->type = LIST;
+	 namenode->key = xstrdup (strtok (linebuf, ":\n"));
+	 if ((namenode->key == NULL) || (strlen (namenode->key) == 0))
+	 {
+	    freenode (namenode);
+	 }
+	 else
+	 {
+	    namenode->data = xstrdup (strtok (NULL, "\n"));
+	    namenode->delproc = node_deleted;
+	    addnode(userlist, namenode);
+	 }
+	    
+	 free (linebuf);
+	 linebuf = NULL;
+      }
+      if (ferror (fp))
+	 error (1, errno, "cannot read %s", filename);
+      if (fclose (fp) < 0)
+	 error (0, errno, "cannot close %s", filename);
+   }
+
+   namenode = findnode(userlist, getcaller());
+   if (namenode == NULL)
+   {
+      error (1, 0, "Could not find %s in password file", getcaller());
+   }
+   else
+   {
+      delnode (namenode);
+   }
+   
+   fp = CVS_FOPEN (filename, "w");
+   if (fp == NULL)
+   {
+      error (0, errno, "cannot open %s for writing", filename);
+   }
+   else
+   {
+      walklist(userlist, write_node, fp);
+      if (fclose (fp) < 0)
+	 error (0, errno, "cannot close %s", filename);
+   }
+   
+   dellist(&userlist);
+
+   sprintf (setup_str, "ci %s", filename);
+   run_setup (setup_str);
+   if (run_exec("/dev/null", "/dev/null", "/dev/null", RUN_REALLY) != 0)
+      error (0, 0, "Error checking in password file");
+
+   sprintf (setup_str, "co %s", filename);
+   run_setup (setup_str);
+   if (run_exec("/dev/null", "/dev/null", "/dev/null", RUN_REALLY) != 0)
+      error (0, 0, "Error checking out password file");
+
+    free (filename);
+
+   return (err);
+}
diff --exclude=CVS -urN cvs.orig/src/setperm.c cvs/src/setperm.c
--- cvs.orig/src/setperm.c	Wed Dec 31 16:00:00 1969
+++ cvs/src/setperm.c	Wed Jul 28 02:18:12 1999
@@@@ -0,0 +1,161 @@@@
+/*
+ * Copyright (c) 1992, Brian Berliner and Jeff Polk
+ * Copyright (c) 1989-1992, Brian Berliner
+ * 
+ * You may distribute under the terms of the GNU General Public License as
+ * specified in the README file that comes with the CVS 1.4 kit.
+ * 
+ * setperm
+ * 
+ * Sets the permission for the specified user for the directory
+ */
+
+#include "cvs.h"
+
+static const char *const setperm_usage[] =
+{
+    "Usage: %s %s user:perm directory...\n",
+    NULL
+};
+
+int
+check_perms(perm)
+   char *perm;
+{
+   int foundc, foundr, foundw;
+
+   if (strlen(perm) > 3)
+      return 0;
+
+   foundc = 0,
+   foundr = 0;
+   foundw = 0;
+   while (*perm != '\0')
+   {
+      switch (*perm)
+      {
+      case 'c':
+	 if (foundc)
+	    return 0;
+	 foundc = 1;
+	 break;
+
+      case 'r':
+	 if (foundr)
+	    return 0;
+	 foundr = 1;
+	 break;
+
+      case 'w':
+	 if (foundw)
+	    return 0;
+	 foundw = 1;
+	 break;
+
+      default:
+	 return 0;
+      }
+      perm++;
+   }
+
+   return 1;
+}
+
+int
+setperm (argc, argv)
+   int argc;
+   char **argv;
+{
+   char *user;
+   int i;
+   char *repository;
+   int c;
+   int err = 0;
+   char *permptr;
+
+
+   if (argc == 1 || argc == -1)
+      usage (setperm_usage);
+
+   wrap_setup ();
+
+   optind = 1;
+   while ((c = getopt (argc, argv, "")) != -1)
+   {
+      switch (c)
+      {
+      case '?':
+      default:
+	 usage (setperm_usage);
+	 break;
+      }
+   }
+   argc -= optind;
+   argv += optind;
+
+   if (argc <= 1)
+      usage (setperm_usage);
+
+   /* find the repository associated with our current dir */
+   repository = Name_Repository ((char *) NULL, (char *) NULL);
+
+#ifdef CLIENT_SUPPORT
+   if (client_active)
+   {
+      start_server ();
+      ign_setup ();
+
+      send_arg (argv[0]); /* Send the user name and permissions */
+      argc--;
+      argv++;
+      send_file_names (argc, argv, SEND_EXPAND_WILD);
+      send_files (argc, argv, 0, 0, SEND_NO_CONTENTS);
+      send_to_server ("setperm\012", 0);
+      return get_responses_and_close ();
+   }
+#endif
+
+   user = strtok (argv[0], ":");
+   permptr = strtok (NULL, "");
+
+   if ((permptr != NULL) && (strlen(permptr) == 0))
+   {
+      permptr = NULL;
+   }
+
+   if (permptr == NULL)
+   {
+      /* Ok, nothing to do. */
+   }
+   else if  (! check_perms(permptr))
+   {
+      error(1, 0, "Invalid permissions: '%s', can only have r, w, and c",
+	    permptr);
+   }
+
+   /* walk the arg list checking files/dirs */
+   for (i = 1; i < argc; i++)
+   {
+      char dname[PATH_MAX];
+      (void) sprintf (dname, "%s/%s", repository, argv[i]);
+      if (!isdir (dname))
+      {
+	 error (0, 0, "`%s' is not a directory", dname);
+	 err++;
+      }
+      else
+      {
+	 if (!verify_owner (dname))
+	 {
+	    error (0, 0, "'%s' does not own '%s'\n", getcaller(), argv[i]);
+	    err++;
+	 }
+	 else
+	 {
+	    change_perms (dname, user, permptr);
+	 }
+      }
+   }
+
+   return (err);
+}
diff --exclude=CVS -urN cvs.orig/src/status.c cvs/src/status.c
--- cvs.orig/src/status.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/status.c	Mon Jul 26 02:51:48 1999
@@@@ -105,7 +105,7 @@@@
     err = start_recursion (status_fileproc, (FILESDONEPROC) NULL,
 			   status_dirproc, (DIRLEAVEPROC) NULL, NULL,
 			   argc, argv, local,
-			   W_LOCAL, 0, 1, (char *) NULL, 1);
+			   W_LOCAL, 0, 1, (char *) NULL, 1, verify_read);
 
     return (err);
 }
diff --exclude=CVS -urN cvs.orig/src/tag.c cvs/src/tag.c
--- cvs.orig/src/tag.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/tag.c	Mon Jul 26 02:51:48 1999
@@@@ -200,7 +200,7 @@@@
     err = start_recursion (check_fileproc, check_filesdoneproc,
                            (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
                            argc, argv, local, W_LOCAL, 0, 1,
-                           (char *) NULL, 1);
+                           (char *) NULL, 1, verify_write);
     
     if (err)
     {
@@@@ -210,7 +210,7 @@@@
     /* start the recursion processor */
     err = start_recursion (tag_fileproc, tag_filesdoneproc, tag_dirproc,
 			   (DIRLEAVEPROC) NULL, NULL, argc, argv, local,
-			   W_LOCAL, 0, 0, (char *) NULL, 1);
+			   W_LOCAL, 0, 0, (char *) NULL, 1, verify_write);
     dellist(&mtlist);
     return (err);
 }
@@@@ -841,7 +841,7 @@@@
 			   val_direntproc, (DIRLEAVEPROC) NULL,
 			   (void *)&the_val_args,
 			   argc, argv, local, which, aflag,
-			   1, NULL, 1);
+			   1, NULL, 1, verify_write);
     if (repository != NULL && repository[0] != '\0')
     {
 	if (restore_cwd (&cwd, NULL))
diff --exclude=CVS -urN cvs.orig/src/update.c cvs/src/update.c
--- cvs.orig/src/update.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/update.c	Mon Jul 26 02:51:48 1999
@@@@ -466,7 +466,7 @@@@
 	err = start_recursion (get_linkinfo_proc, (FILESDONEPROC) NULL,
 			       (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
 			       argc, argv, local, which, aflag, 1,
-			       preload_update_dir, 1);
+			       preload_update_dir, 1, NULL);
 	if (err)
 	    return (err);
 
@@@@ -482,7 +482,7 @@@@
     err = start_recursion (update_fileproc, update_filesdone_proc,
 			   update_dirent_proc, update_dirleave_proc, NULL,
 			   argc, argv, local, which, aflag, 1,
-			   preload_update_dir, 1);
+			   preload_update_dir, 1, verify_read);
 
     /* see if we need to sleep before returning */
     if (last_register_time)
@@@@ -1321,7 +1321,8 @@@@
 
 	    if (cvswrite
 		&& !file_is_dead
-		&& !fileattr_get (finfo->file, "_watched"))
+		&& !fileattr_get (finfo->file, "_watched")
+		&& verify_write (finfo->repository))
 	    {
 		if (revbuf == NULL)
 		    xchmod (finfo->file, 1);
@@@@ -1717,7 +1718,8 @@@@
 		< 0)
 		error (0, errno, "cannot change mode of file %s", finfo->file);
 	    if (cvswrite
-		&& !fileattr_get (finfo->file, "_watched"))
+		&& !fileattr_get (finfo->file, "_watched")
+		&& verify_write (finfo->repository))
 		xchmod (finfo->file, 1);
 
 	    /* Check the diff output to make sure patch will be handle it.  */
diff --exclude=CVS -urN cvs.orig/src/watch.c cvs/src/watch.c
--- cvs.orig/src/watch.c	Sat Jul 10 23:57:56 1999
+++ cvs/src/watch.c	Mon Jul 26 02:51:49 1999
@@@@ -353,7 +353,7 @@@@
     err = start_recursion (addremove_fileproc, addremove_filesdoneproc,
 			   (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
 			   argc, argv, local, W_LOCAL, 0, 0, (char *)NULL,
-			   1);
+			   1, verify_write);
 
     Lock_Cleanup ();
     return err;
@@@@ -525,5 +525,5 @@@@
     return start_recursion (watchers_fileproc, (FILESDONEPROC) NULL,
 			    (DIRENTPROC) NULL, (DIRLEAVEPROC) NULL, NULL,
 			    argc, argv, local, W_LOCAL, 0, 1, (char *)NULL,
-			    1);
+			    1, verify_write);
 }
diff --exclude=CVS -urN cvs.orig/windows-NT/SCC/Makefile cvs/windows-NT/SCC/Makefile
--- cvs.orig/windows-NT/SCC/Makefile	Wed Dec 31 16:00:00 1969
+++ cvs/windows-NT/SCC/Makefile	Wed Aug 11 10:11:57 1999
@@@@ -0,0 +1,39 @@@@
+# Generated automatically from Makefile.in by configure.
+# Makefile for distributing files.  Note that it only has a dist-dir
+# target, so other targets should not recurse into this directory.
+# This makefile is in the public domain.
+
+#### Start of system configuration section. ####
+
+srcdir = .
+top_srcdir = ../..
+
+# Just in case...
+SHELL = /bin/sh
+
+
+DISTFILES = \
+	.cvsignore ChangeLog Makefile.in README.txt \
+	SCC.mak SCC.dsp scc.c scc.def pubscc.h
+
+all:
+.PHONY:	all
+
+dist-dir: ${DISTFILES}
+	mkdir ${DISTDIR}
+	for i in ${DISTFILES}; do \
+	  ln $(srcdir)/$${i} ${DISTDIR}; \
+	done
+.PHONY: dist-dir
+
+subdir = windows-NT/SCC
+Makefile: ../../config.status Makefile.in
+	cd ../.. && CONFIG_FILES=$(subdir)/$@@ CONFIG_HEADERS= ./config.status
+
+# CYGNUS LOCAL: don't depend on auto-re-config
+#../config.status: ../configure
+#	cd .. ; $(SHELL) config.status --recheck
+
+# CYGNUS LOCAL: don't depend on auto-re-config
+#../configure: ../configure.in
+#	cd $(top_srcdir) ; autoconf
@


1.1
log
@iniital checkin
@
text
@d2824 1
a2824 1
+  [  --with-mysql=DIR      Specify the MySQL installation directory.  Default:  /usr/local],
@

