]> git.ipfire.org Git - thirdparty/krb5.git/commitdiff
Merge trunk changes from r23900 to r23906
authorGreg Hudson <ghudson@mit.edu>
Tue, 20 Apr 2010 07:41:09 +0000 (07:41 +0000)
committerGreg Hudson <ghudson@mit.edu>
Tue, 20 Apr 2010 07:41:09 +0000 (07:41 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/branches/iakerb@23907 dc483132-0cff-0310-8789-dd5450dbe970

src/aclocal.m4
src/config/post.in
src/config/pre.in
src/config/shlib.conf
src/include/krb5/krb5.hin
src/kdc/do_tgs_req.c
src/lib/krb5/krb/get_creds.c
src/lib/krb5/krb/get_in_tkt.c
src/lib/krb5/krb/init_creds_ctx.h
src/tests/dejagnu/Makefile.in
src/util/k5test.py

index a9725fca678e7882478a2fa28efb0c14f72a1100..5637f6870f4e2bc157408505b3186457aca25876 100644 (file)
@@ -1131,7 +1131,9 @@ dnl Set up environment for running dynamic executables out of build tree
 AC_DEFUN(KRB5_RUN_FLAGS,
 [AC_REQUIRE([KRB5_LIB_AUX])dnl
 KRB5_RUN_ENV="$RUN_ENV"
-AC_SUBST(KRB5_RUN_ENV)])
+KRB5_RUN_VARS="$RUN_VARS"
+AC_SUBST(KRB5_RUN_ENV)
+AC_SUBST(KRB5_RUN_VARS)])
 
 dnl
 dnl KRB5_LIB_AUX
index f9fae21cb8a25ad401aaf4df9146ff01dd18a85d..c4cdcae3bf9577f8941b5fce07c911d1cc35d6fa 100644 (file)
@@ -136,14 +136,12 @@ check-unix:: check-pytests
 
 check-pytests:: check-pytests-@HAVE_PYTHON@
 
-check-pytests-yes:
+check-pytests-yes: runenv.py
        @pytests="$(PYTESTS)"; \
        for t in $$pytests; do \
-               echo "$(KRB5_RUN_ENV)" \
-                       PYTHONPATH=$(top_srcdir)/util VALGRIND="$(VALGRIND)" \
+               echo PYTHONPATH=`pwd`:$(top_srcdir)/util VALGRIND="$(VALGRIND)" \
                        $(PYTHON) $(srcdir)/$$t $(PYTESTFLAGS); \
-               $(KRB5_RUN_ENV) \
-               PYTHONPATH=$(top_srcdir)/util VALGRIND="$(VALGRIND)" \
+               PYTHONPATH=`pwd`:$(top_srcdir)/util VALGRIND="$(VALGRIND)" \
                        $(PYTHON) $(srcdir)/$$t $(PYTESTFLAGS) || exit 1; \
        done
 
@@ -152,11 +150,22 @@ check-pytests-no:
                echo "+++ Skipping because Python not available: $(PYTESTS)"; \
        fi
 
+pyrunenv.vals: Makefile
+       $(KRB5_RUN_ENV) \
+       for i in $(KRB5_RUN_VARS); do \
+               eval echo 'env['\\\'$$i\\\''] = '\\\'\$$$$i\\\'; \
+       done > $@
+
+runenv.py: pyrunenv.vals
+       echo 'env = {}' > $@
+       cat pyrunenv.vals >> $@
+
 clean:: clean-$(WHAT)
 
 clean-unix::
        $(RM) $(OBJS) $(DEPTARGETS_CLEAN) $(EXTRA_FILES) et-[ch]-*.et et-[ch]-*.[ch]
        -$(RM) -r $(top_srcdir)/autom4te.cache
+       $(RM) runenv.py pyrunenv.vals
 
 clean-windows::
        $(RM) *.$(OBJEXT)
index 6bf9cc438ee105e9d67710e29d9aaba5106bda04..a39c0faa5e40a619dee965b3711b87dcde904cf2 100644 (file)
@@ -398,6 +398,7 @@ APPUTILS_LIB        = -lapputils
 
 # So test programs can find their libraries without "make install", etc.
 KRB5_RUN_ENV=@KRB5_RUN_ENV@
+KRB5_RUN_VARS=@KRB5_RUN_VARS@
 
 #
 # variables for --with-tcl=
index 88fa1dca5235193d8bf48935e16daf5e0febd125..f176921f4fb6b0c1053d80abfb2ff72ff3f5cb97 100644 (file)
@@ -98,6 +98,7 @@ alpha*-dec-osf*)
        # of searching for shared libs, since RPATHs take precedence over
        # LD_LIBRARY_PATH.
        RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`$${LD_LIBRARY_PATH+:$$LD_LIBRARY_PATH}; export LD_LIBRARY_PATH; _RLD_ROOT=$(FAKEDEST):$${_RLD_ROOT+$$_RLD_ROOT}$${_RLD_ROOT-/}; export _RLD_ROOT;'
+       RUN_VARS='LD_LIBRARY_PATH _RLD_ROOT'
        ;;
 
 # HPUX *seems* to work under 10.20.
@@ -141,6 +142,7 @@ alpha*-dec-osf*)
        CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) -Wl,+s $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
        CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
        RUN_ENV='SHLIB_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`; export SHLIB_PATH;'
+       RUN_VARS='SHLIB_PATH'
        SHLIB_EXPORT_FILE_DEP=hpux10.exports
        # Do *not* set use_linker_init_option=yes here, because in the
        # case where the library is specified at program link time, the
@@ -188,6 +190,7 @@ mips-sgi-irix6.3)   # This is a Kludge; see below
        for i in N32 64 ''; do
                RUN_ENV="${RUN_ENV+ $RUN_ENV}LD_LIBRARY${i}_PATH=$add\$\${LD_LIBRARY${i}_PATH+:\$\$LD_LIBRARY${i}_PATH}; export LD_LIBRARY${i}_PATH;"
                RUN_ENV="${RUN_ENV} _RLD${i}_ROOT=\$(FAKEDEST):\$\${_RLD${i}_ROOT+\$\${_RLD${i}_ROOT}}\$\${_RLD${i}_ROOT-/}; export _RLD${i}_ROOT;"
+               RUN_VARS="$RUN_VARS LD_LIBRARY${i}_PATH _RLD${i}_ROOT"
        done
        ;;
 
@@ -236,6 +239,7 @@ mips-sgi-irix*)
        for i in N32 64 ''; do
                RUN_ENV="${RUN_ENV+ $RUN_ENV}LD_LIBRARY${i}_PATH=$add\$\${LD_LIBRARY${i}_PATH+:\$\$LD_LIBRARY${i}_PATH}; export LD_LIBRARY${i}_PATH;"
                RUN_ENV="${RUN_ENV} _RLD${i}_ROOT=\$(FAKEDEST):\$\${_RLD${i}_ROOT+\$\${_RLD${i}_ROOT}}\$\${_RLD${i}_ROOT-/}; export _RLD${i}_ROOT;"
+               RUN_VARS="$RUN_VARS LD_LIBRARY${i}_PATH _RLD${i}_ROOT"
        done
        ;;
 
@@ -260,6 +264,7 @@ mips-sni-sysv4)
        CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
        CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
        RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`; export LD_LIBRARY_PATH;'
+       RUN_VARS='LD_LIBRARY_PATH'
        PROFFLAGS=-pg
        ;;
 
@@ -278,6 +283,7 @@ mips-*-netbsd*)
        CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
        CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
        RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`; export LD_LIBRARY_PATH;'
+       RUN_VARS='LD_LIBRARY_PATH'
        PROFFLAGS=-pg
        ;;
 
@@ -295,6 +301,7 @@ mips-*-netbsd*)
        CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
        CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
        RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`; export LD_LIBRARY_PATH;'
+       RUN_VARS='LD_LIBRARY_PATH'
        PROFFLAGS=-pg
        ;;
 
@@ -322,6 +329,7 @@ mips-*-netbsd*)
        CC_LINK_STATIC='$(CC) $(PROG_LIBPATH) $(CFLAGS) $(LDFLAGS)'
        CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
        RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`; export LD_LIBRARY_PATH;'
+       RUN_VARS='LD_LIBRARY_PATH'
        PROFFLAGS=-pg
        ;;
 
@@ -339,6 +347,7 @@ mips-*-netbsd*)
        CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
        CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
        RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`; export LD_LIBRARY_PATH;'
+       RUN_VARS='LD_LIBRARY_PATH'
        PROFFLAGS=-pg
        ;;
 
@@ -364,6 +373,7 @@ mips-*-netbsd*)
        CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) -dynamic $(CXXFLAGS) $(LDFLAGS)'
        CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
        RUN_ENV='DYLD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`; export DYLD_LIBRARY_PATH;'
+       RUN_VARS='DYLD_LIBRARY_PATH'
        ;;
 
 *-*-solaris*)
@@ -399,6 +409,7 @@ mips-*-netbsd*)
        CXX_LINK_SHARED='$(PURE) $(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
        CXX_LINK_STATIC='$(PURE) $(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
        RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`; export LD_LIBRARY_PATH;'
+       RUN_VARS='LD_LIBRARY_PATH'
        ;;
 
 *-*-linux* | *-*-gnu* | *-*-k*bsd*-gnu)
@@ -424,6 +435,7 @@ mips-*-netbsd*)
        CXX_LINK_SHARED='$(CXX) $(PROG_LIBPATH) $(PROG_RPATH_FLAGS) $(CXXFLAGS) $(LDFLAGS)'
        CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
        RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`; export LD_LIBRARY_PATH; '
+       RUN_VARS='LD_LIBRARY_PATH'
 
        ## old version:
        # Linux libc does weird stuff at shlib link time, must be
@@ -451,6 +463,7 @@ mips-*-netbsd*)
        CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH)'
        RUN_ENV='LD_LIBRARY_PATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/
 /:/g"`; export LD_LIBRARY_PATH;'
+       RUN_VARS='LD_LIBRARY_PATH'
        PROFFLAGS=-pg
        ;;
 
@@ -482,6 +495,7 @@ mips-*-netbsd*)
        CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
        # $(PROG_RPATH) is here to handle things like a shared tcl library
        RUN_ENV='LIBPATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`:$(PROG_RPATH):/usr/lib:/usr/local/lib; export LIBPATH; '
+       RUN_VARS='LIBPATH'
        ;;
 
 *-*-aix4.*)
@@ -519,6 +533,7 @@ mips-*-netbsd*)
        CXX_LINK_STATIC='$(CXX) $(PROG_LIBPATH) $(CXXFLAGS) $(LDFLAGS)'
        # $(PROG_RPATH) is here to handle things like a shared tcl library
        RUN_ENV='LIBPATH=`echo $(PROG_LIBPATH) | sed -e "s/-L//g" -e "s/ /:/g"`:$(PROG_RPATH):/usr/lib:/usr/local/lib; export LIBPATH; '
+       RUN_VARS='LIBPATH'
        ;;
 esac
 
index 8138b5f893e424f3e6a498d675c5d41ca05e6a51..1c89f9e923ecca23348abe5fcf7bf03887ebfbe6 100644 (file)
@@ -2371,6 +2371,8 @@ krb5_get_init_creds_password(krb5_context context, krb5_creds *creds,
 struct _krb5_init_creds_context;
 typedef struct _krb5_init_creds_context *krb5_init_creds_context;
 
+#define KRB5_INIT_CREDS_STEP_FLAG_CONTINUE 0x1  /* More responses needed */
+
 void KRB5_CALLCONV
 krb5_init_creds_free(krb5_context context, krb5_init_creds_context ctx);
 
@@ -2475,16 +2477,16 @@ krb5_tkt_creds_get_creds(krb5_context context, krb5_tkt_creds_context ctx,
 void KRB5_CALLCONV
 krb5_tkt_creds_free(krb5_context context, krb5_tkt_creds_context ctx);
 
-#define KRB5_TKT_CREDS_CONTINUE 1  /* Another KDC response is needed. */
+#define KRB5_TKT_CREDS_STEP_FLAG_CONTINUE 0x1  /* More responses needed. */
 
 /**
  * Process a response and generate the next request to acquire credentials.
  *
  * On the first call, @a in should be empty or NULL.  If more responses are
  * needed, the @a flags output parameter will contain @a
- * KRB5_TKT_CREDS_CONTINUE.  In this case, the caller must transport @a out to
- * a KDC for @a realm and receive a response, which should be provided as @a
- * in to the next call.
+ * KRB5_TKT_CREDS_STEP_FLAG_CONTINUE.  In that case, the caller must transport
+ * @a out to a KDC for @a realm and receive a response, which should be
+ * provided as @a in to the next call.
  *
  * @param[in]  context  A krb5 library context (see krb5_init_context())
  * @param[in]  ctx      A TGS acquisition context (see krb5_tkt_creds_init())
index b2f065514098c1ebb3be3b143587dec25c52bdbd..76ca94abc0696b1ccdbfa1f07bcf6524fc18239a 100644 (file)
@@ -543,6 +543,7 @@ tgt_again:
            to the caller */
         ticket_reply = *(header_ticket);
         enc_tkt_reply = *(header_ticket->enc_part2);
+        enc_tkt_reply.authorization_data = NULL;
         clear(enc_tkt_reply.flags, TKT_FLG_INVALID);
     }
 
@@ -554,6 +555,7 @@ tgt_again:
            to the caller */
         ticket_reply = *(header_ticket);
         enc_tkt_reply = *(header_ticket->enc_part2);
+        enc_tkt_reply.authorization_data = NULL;
 
         old_life = enc_tkt_reply.times.endtime - enc_tkt_reply.times.starttime;
 
index e9356f18bdd0b99ea9645b1dc41ec362e234a830..e28391790636a3e37b56a7a40d3689d9286a540f 100644 (file)
@@ -221,7 +221,7 @@ set_caller_request(krb5_context context, krb5_tkt_creds_context ctx)
 
     *ctx->caller_out = out_copy;
     *ctx->caller_realm = realm_copy;
-    *ctx->caller_flags = KRB5_TKT_CREDS_CONTINUE;
+    *ctx->caller_flags = KRB5_TKT_CREDS_STEP_FLAG_CONTINUE;
     return 0;
 
 cleanup:
@@ -1140,7 +1140,7 @@ krb5_tkt_creds_get(krb5_context context, krb5_tkt_creds_context ctx)
                                    &flags);
         if (code == KRB5KRB_ERR_RESPONSE_TOO_BIG && !tcp_only)
             tcp_only = 1;
-        else if (code != 0 || !(flags & KRB5_TKT_CREDS_CONTINUE))
+        else if (code != 0 || !(flags & KRB5_TKT_CREDS_STEP_FLAG_CONTINUE))
             break;
         krb5_free_data_contents(context, &reply);
 
index b1b837d06cd5f9eabdcd783b08fdf15cc6d7c8b4..2b98e45d008ab41710cf39dc286ab93db33ddb98 100644 (file)
@@ -1083,7 +1083,7 @@ init_creds_get(krb5_context context,
                                     &flags);
         if (code == KRB5KRB_ERR_RESPONSE_TOO_BIG && !tcp_only)
             tcp_only = 1;
-        else if (code != 0 || (flags & 1) == 0)
+        else if (code != 0 || !(flags & KRB5_INIT_CREDS_STEP_FLAG_CONTINUE))
             break;
 
         krb5_free_data_contents(context, &reply);
@@ -1119,7 +1119,7 @@ krb5_init_creds_get_creds(krb5_context context,
                           krb5_init_creds_context ctx,
                           krb5_creds *creds)
 {
-    if ((ctx->flags & KRB5_INIT_CREDS_STEP_FLAG_COMPLETE) == 0)
+    if (!ctx->complete)
         return KRB5_NO_TKT_SUPPLIED;
 
     return krb5int_copy_creds_contents(context, &ctx->cred, creds);
@@ -1130,7 +1130,7 @@ krb5_init_creds_get_times(krb5_context context,
                           krb5_init_creds_context ctx,
                           krb5_ticket_times *times)
 {
-    if ((ctx->flags & KRB5_INIT_CREDS_STEP_FLAG_COMPLETE) == 0)
+    if (!ctx->complete)
         return KRB5_NO_TKT_SUPPLIED;
 
     *times = ctx->cred.times;
@@ -1979,7 +1979,7 @@ init_creds_step_reply(krb5_context context,
 
     /* success */
     code = 0;
-    ctx->flags |= KRB5_INIT_CREDS_STEP_FLAG_COMPLETE;
+    ctx->complete = TRUE;
 
 cleanup:
     krb5_free_pa_data(context, padata);
@@ -2014,8 +2014,8 @@ krb5_init_creds_step(krb5_context context,
     realm->data = NULL;
     realm->length = 0;
 
-    if (ctx->flags & KRB5_INIT_CREDS_STEP_FLAG_COMPLETE)
-        goto cleanup;
+    if (ctx->complete)
+        return EINVAL;
 
     if (in->length != 0) {
         code = init_creds_step_reply(context, ctx, in);
@@ -2029,7 +2029,7 @@ krb5_init_creds_step(krb5_context context,
             }
             goto copy_realm;
         }
-        if (code != 0 || (ctx->flags & KRB5_INIT_CREDS_STEP_FLAG_COMPLETE))
+        if (code != 0 || ctx->complete)
             goto cleanup;
     }
 
@@ -2065,8 +2065,7 @@ cleanup:
         }
     }
 
-    *flags = (ctx->flags & KRB5_INIT_CREDS_STEP_FLAG_COMPLETE) ? 0 : 1;
-
+    *flags = ctx->complete ? 0 : KRB5_INIT_CREDS_STEP_FLAG_CONTINUE;
     return code;
 }
 
index 1d41a44f4365141ce35fcf3cc369c74aeb9eb0de..6a762982c0b7fbe10a6e7e1e157463f2e7083313 100644 (file)
@@ -14,7 +14,7 @@ struct _krb5_init_creds_context {
     krb5_deltat start_time;
     krb5_deltat tkt_life;
     krb5_deltat renew_life;
-    unsigned int flags;
+    krb5_boolean complete;
     unsigned int loopcount;
     krb5_data password;
     krb5_error *err_reply;
@@ -35,8 +35,6 @@ struct _krb5_init_creds_context {
     krb5_boolean sent_nontrivial_preauth;
 };
 
-#define KRB5_INIT_CREDS_STEP_FLAG_COMPLETE          0x1
-
 krb5_error_code
 krb5_get_as_key_password(krb5_context context,
                          krb5_principal client,
index d8e753001d0ffa883f96a46586a653725601dde6..1cb7509862e1b0b5cf3da1e4e67840204e714841 100644 (file)
@@ -33,12 +33,8 @@ clean::
 clean-unix::
        $(RM) -rf tmpdir dbg.log krb.log krb.sum
 
-runenv.vars: Makefile
-       echo '$(KRB5_RUN_ENV)' | tr ';' '\012' | \
-               sed -ne 's% *\([^=]*\)=.*%\1%p' > runenv.vars
-
-runenv.vals: runenv.vars
-       $(KRB5_RUN_ENV) for i in `cat runenv.vars`; do \
+runenv.vals: Makefile
+       $(KRB5_RUN_ENV) for i in $(KRB5_RUN_VARS); do \
                eval echo "{$$i=\$$$$i}"; done > runenv.vals
 
 site.exp: runenv.vals Makefile
index 2404a46a1f50e94d3afb536522e020d7c3cdc056..1065191e2fa74624fb779e818e024d7ef8caa018 100644 (file)
@@ -304,6 +304,11 @@ import string
 import subprocess
 import sys
 
+# runenv.py is built in each directory where tests are run, providing
+# the environment variable settings needed for running programs in the
+# build tree.  These can vary by platform.
+import runenv
+
 # Used when most things go wrong (other than programming errors) so
 # that the user sees an error message rather than a Python traceback,
 # without help from the test script.  The on-exit handler will display
@@ -462,16 +467,7 @@ def _match_cmdnum(cmdnum, ind):
 # Return an environment suitable for running programs in the build
 # tree.  It is safe to modify the result.
 def _build_env():
-    libdir = os.path.join(buildtop, 'lib')
-    env = os.environ.copy()
-    ldlpath = env.get('LD_LIBRARY_PATH')
-    if ldlpath:
-        ldlpath = libdir + os.pathsep + ldlpath
-    else:
-        ldlpath = libdir
-    env['LD_LIBRARY_PATH'] = ldlpath
-    return env
-
+    return dict(runenv.env)
 
 # Merge the nested dictionaries cfg1 and cfg2 into a new dictionary.
 # cfg1 or cfg2 may be None, in which case the other is returned.  If