s4:heimdal: import lorikeet-heimdal-200907162216 (commit d09910d6803aad96b52ee626327e...
authorAndrew Bartlett <abartlet@samba.org>
Thu, 16 Jul 2009 22:29:03 +0000 (08:29 +1000)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 16 Jul 2009 22:32:01 +0000 (08:32 +1000)
This includes in particular changes to the KDC to resolve bug 6272,
originally by Matthieu Patou <mat+Informatique.Samba@matws.net>.  We
need to sort the AuthorizationData elements to put the PAC first, or
else WinXP breaks when browsed from Win2k8.

Andrew Bartlett

source4/heimdal/kdc/krb5tgs.c
source4/heimdal/lib/gssapi/gssapi/gssapi.h
source4/heimdal/lib/hcrypto/des.h
source4/heimdal/lib/hcrypto/evp.h
source4/heimdal/lib/krb5/krb5.h
source4/heimdal/lib/krb5/log.c

index 6b98506e81caa2cda4207be9481065f02bfe6cab..635eb27e75aa6cf8e14731c6d921f751a98f7360 100644 (file)
@@ -805,17 +805,34 @@ tgs_make_reply(krb5_context context,
     et.flags.hw_authent  = tgt->flags.hw_authent;
     et.flags.anonymous   = tgt->flags.anonymous;
     et.flags.ok_as_delegate = server->entry.flags.ok_as_delegate;
+
+    if(rspac->length) {
+       /*
+        * No not need to filter out the any PAC from the
+        * auth_data since it's signed by the KDC.
+        */
+       ret = _kdc_tkt_add_if_relevant_ad(context, &et,
+                                         KRB5_AUTHDATA_WIN2K_PAC, rspac);
+       if (ret)
+           goto out;
+    }
        
     if (auth_data) {
-       /* XXX Check enc-authorization-data */
-       et.authorization_data = calloc(1, sizeof(*et.authorization_data));
+       unsigned int i = 0;
+
+       /* XXX check authdata */
        if (et.authorization_data == NULL) {
            ret = ENOMEM;
+           krb5_set_error_message(context, ret, "malloc: out of memory");
            goto out;
        }
-       ret = copy_AuthorizationData(auth_data, et.authorization_data);
-       if (ret)
-           goto out;
+       for(i = 0; i < auth_data->len ; i++) {
+           ret = add_AuthorizationData(et.authorization_data, &auth_data->val[i]);
+           if (ret) {
+               krb5_set_error_message(context, ret, "malloc: out of memory");
+               goto out;
+           }
+       }
 
        /* Filter out type KRB5SignedPath */
        ret = find_KRB5SignedPath(context, et.authorization_data, NULL);
@@ -832,18 +849,6 @@ tgs_make_reply(krb5_context context,
        }
     }
 
-    if(rspac->length) {
-       /*
-        * No not need to filter out the any PAC from the
-        * auth_data since it's signed by the KDC.
-        */
-       ret = _kdc_tkt_add_if_relevant_ad(context, &et,
-                                         KRB5_AUTHDATA_WIN2K_PAC,
-                                         rspac);
-       if (ret)
-           goto out;
-    }
-
     ret = krb5_copy_keyblock_contents(context, sessionkey, &et.key);
     if (ret)
        goto out;
index 07c4b36325d307f93054fdae5a8eb9cd8e028725..91141808f54426dde8c960763e6e4af23384a346 100644 (file)
 #endif
 
 #ifndef GSSAPI_DEPRECATED
+#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1 )))
 #define GSSAPI_DEPRECATED __attribute__((deprecated))
+#elif defined(_MSC_VER)
+#define GSSAPI_DEPRECATED __declspec(deprecated)
+#else
+#define GSSAPI_DEPRECATED
+#endif
 #endif
 
 /*
index 14402d4b1c5c5fe7afcf4fc81c4ede8855700503..99eb76c818e78ea3eb8f9b1945a6e42f198874ea 100644 (file)
@@ -84,12 +84,14 @@ typedef struct DES_key_schedule
  *
  */
 
-#if !defined(__GNUC__) && !defined(__attribute__)
-#define __attribute__(x)
-#endif
-
 #ifndef HC_DEPRECATED
+#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1 )))
 #define HC_DEPRECATED __attribute__((deprecated))
+#elif defined(_MSC_VER) && (_MSC_VER>1200) 
+#define HC_DEPRECATED __declspec(deprecated)
+#else
+#define HC_DEPRECATED
+#endif
 #endif
 
 #ifdef __cplusplus
index a7c8fac900c06df5c0627a4683532b239efa869f..0086a069602e22309e5903897fa082e6b934525c 100644 (file)
@@ -190,10 +190,17 @@ struct hc_evp_md {
 #endif
 
 #ifndef HC_DEPRECATED
+#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1 )))
 #define HC_DEPRECATED __attribute__((deprecated))
+#elif defined(_MSC_VER) && (_MSC_VER>1200) 
+#define HC_DEPRECATED __declspec(deprecated)
+#else
+#define HC_DEPRECATED
 #endif
+#endif
+
 #ifndef HC_DEPRECATED_CRYPTO
-#define HC_DEPRECATED_CRYPTO __attribute__((deprecated))
+#define HC_DEPRECATED_CRYPTO HC_DEPRECATED
 #endif
 
 
index 13dafacf21bd2227d8a20a118b7d36fbfb255a1b..1f2e76972898446112916aa6e8d7ae1b108ceec6 100644 (file)
 #endif
 
 #ifndef KRB5_DEPRECATED
+#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1 )))
 #define KRB5_DEPRECATED __attribute__((deprecated))
+#elif defined(_MSC_VER) && (_MSC_VER>1200) 
+#define KRB5_DEPRECATED __declspec(deprecated)
+#else
+#define KRB5_DEPRECATED
+#endif
 #endif
 
 /* simple constants */
index 31d267320f112aed770de496f08f419acec4f191..ee5c1159b138baa91e430cd0c0ef02dea84191a8 100644 (file)
@@ -32,6 +32,7 @@
  */
 
 #include "krb5_locl.h"
+#include <vis.h>
 
 struct facility {
     int min;
@@ -218,11 +219,21 @@ log_file(const char *timestr,
         void *data)
 {
     struct file_data *f = data;
+    char *msgclean;
+    size_t len = strlen(msg) + 1;
     if(f->keep_open == 0)
        f->fd = fopen(f->filename, f->mode);
     if(f->fd == NULL)
        return;
-    fprintf(f->fd, "%s %s\n", timestr, msg);
+    /* make sure the log doesn't contain special chars */
+    len *= 4;
+    msgclean = malloc(len);
+    if (msgclean == NULL)
+       goto out;
+    strvisx(rk_UNCONST(msg), msgclean, len, VIS_OCTAL);
+    fprintf(f->fd, "%s %s\n", timestr, msgclean);
+    free(msgclean);
+ out:
     if(f->keep_open == 0) {
        fclose(f->fd);
        f->fd = NULL;