Hi Love,

After some digging I found the reason of the problem that affected mac minis but also openbsd, and netbsd.

On this platform sys/queue.h is included by net/if.h and this include happen quite early in the include tree.

But heimdal/lib/roken/roken-common.h do an #undef of SLIST_ENTRY (it's written that it's needed for WinNT) but this undef apply to all the platforms.

What I did is to change the scope of this undef, so that it apply in the case where _WIN32 is defined, see changeset 533ba5a

Cheers.
Matthieu

On 02/12/2010 23:28, Love Hörnquist Åstrand wrote:
Matthieu,

SLIST_ENTRY should be defined by "mechqueue.h" or<sys/queue.h>, without cpp 
output it hard to determine what went wrong.

Love


2 dec 2010 kl. 03.45 skrev Matthieu Patou:

Hi Andrews,

I highly suspect the new import of heimdal to be the root cause of the breakage 
on mac mini can one of you look on it ?

Thanks.

Matthieu.
On 01/12/2010 09:49, Andrew Tridgell wrote:
The branch, master has been updated
        via  b7172e7 s4-drs: cope with invalid NTDS DNs from DsReplicaInfo()
        via  00ecbdb wintest: cope with w2k3 form of dcdiag output
        via  06fd5b7 wintest Move stopping of BIND into a new step
        via  c5bea98 s4:heimdal: import lorikeet-heimdal-201012010201 (commit 
81fe27bcc0148d410ca4617f8759b9df1a5e935c)
       from  9c84f98 wintest: make command matching case insensitive by default

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit b7172e7a71b152be687fe5045565c8cd99a73a18
Author: Andrew Tridgell<tri...@samba.org>
Date:   Wed Dec 1 16:40:17 2010 +1100

     s4-drs: cope with invalid NTDS DNs from DsReplicaInfo()

     w2k3 sometimes returns a deleted DN

     Autobuild-User: Andrew Tridgell<tri...@samba.org>
     Autobuild-Date: Wed Dec  1 07:48:19 CET 2010 on sn-devel-104

commit 00ecbdbbd13ba191400c6f4185df2dd8e72d1459
Author: Andrew Tridgell<tri...@samba.org>
Date:   Wed Dec 1 16:34:16 2010 +1100

     wintest: cope with w2k3 form of dcdiag output

commit 06fd5b70037728800cfeb2d1989ad8e851f604df
Author: Andrew Bartlett<abart...@samba.org>
Date:   Wed Dec 1 15:34:19 2010 +1100

     wintest Move stopping of BIND into a new step

     We must run this early, to ensure that BIND isn't alive to write to
     the zone file after provision has cleaned it up.

     Andrew Bartlett

commit c5bea98ddb2f7967df572160f639da3cba381a87
Author: Andrew Bartlett<abart...@samba.org>
Date:   Mon Nov 29 11:24:08 2010 +1100

     s4:heimdal: import lorikeet-heimdal-201012010201 (commit 
81fe27bcc0148d410ca4617f8759b9df1a5e935c)

-----------------------------------------------------------------------

Summary of changes:
  source4/heimdal/base/baselocl.h                   |   52 +-
  source4/heimdal/base/heimbase.c                   |   15 +-
  source4/heimdal/cf/make-proto.pl                  |    1 +
  source4/heimdal/kdc/default_config.c              |    3 +-
  source4/heimdal/kdc/kaserver.c                    |  955 --------------------
  source4/heimdal/kdc/misc.c                        |   21 +-
  source4/heimdal/kdc/process.c                     |   77 --
  source4/heimdal/kuser/kinit.c                     |   14 +-
  source4/heimdal/kuser/kuser_locl.h                |    3 +
  source4/heimdal/lib/asn1/asn1parse.c              |  724 +++++++++--------
  source4/heimdal/lib/asn1/asn1parse.y              |    4 +
  source4/heimdal/lib/asn1/gen_template.c           |    4 +-
  source4/heimdal/lib/com_err/com_err.h             |   20 -
  source4/heimdal/lib/com_err/com_right.h           |   35 +-
  source4/heimdal/lib/com_err/error.c               |    8 +-
  source4/heimdal/lib/com_err/lex.c                 |   83 +--
  source4/heimdal/lib/com_err/lex.h                 |    2 +-
  source4/heimdal/lib/com_err/lex.l                 |    5 +-
  source4/heimdal/lib/com_err/parse.c               |  265 ++++---
  source4/heimdal/lib/com_err/parse.y               |    5 +-
  source4/heimdal/lib/gssapi/gssapi/gssapi.h        |   85 ++-
  source4/heimdal/lib/gssapi/gssapi/gssapi_krb5.h   |   73 --
  source4/heimdal/lib/gssapi/gssapi/gssapi_oid.h    |  231 +++++
  source4/heimdal/lib/gssapi/gssapi_mech.h          |   80 ++-
  source4/heimdal/lib/gssapi/krb5/acquire_cred.c    |   14 +-
  source4/heimdal/lib/gssapi/krb5/external.c        |  238 +++---
  source4/heimdal/lib/gssapi/krb5/set_cred_option.c |    9 -
  source4/heimdal/lib/gssapi/mech/gss_mech_switch.c |    2 +-
  source4/heimdal/lib/gssapi/mech/gss_mo.c          |  464 ++++++++++
  source4/heimdal/lib/gssapi/mech/gss_oid.c         |  253 ++++++
  source4/heimdal/lib/gssapi/mech/gss_oid_equal.c   |    2 +-
  source4/heimdal/lib/gssapi/mech/gss_oid_to_str.c  |   31 +
  source4/heimdal/lib/gssapi/mech/gss_wrap.c        |   15 +
  source4/heimdal/lib/gssapi/mech/mech_locl.h       |   15 +-
  source4/heimdal/lib/gssapi/spnego/external.c      |   49 +-
  source4/heimdal/lib/hcrypto/rsa-ltm.c             |    3 +-
  source4/heimdal/lib/hcrypto/validate.c            |    1 -
  source4/heimdal/lib/hdb/db.c                      |    2 +-
  source4/heimdal/lib/hdb/hdb-keytab.c              |   10 +-
  source4/heimdal/lib/hdb/hdb.c                     |    2 +-
  source4/heimdal/lib/hdb/hdb.h                     |   22 +-
  source4/heimdal/lib/hdb/keytab.c                  |   15 +-
  source4/heimdal/lib/hdb/ndbm.c                    |    2 +-
  source4/heimdal/lib/hx509/sel-gram.c              |  248 ++++---
  source4/heimdal/lib/krb5/cache.c                  |   49 +-
  source4/heimdal/lib/krb5/changepw.c               |   46 +-
  source4/heimdal/lib/krb5/config_file.c            |   73 ++-
  source4/heimdal/lib/krb5/constants.c              |   17 +-
  source4/heimdal/lib/krb5/context.c                |   70 ++-
  source4/heimdal/lib/krb5/convert_creds.c          |  134 +---
  source4/heimdal/lib/krb5/creds.c                  |    2 +-
  source4/heimdal/lib/krb5/crypto.c                 |    6 +-
  source4/heimdal/lib/krb5/error_string.c           |    4 +-
  source4/heimdal/lib/krb5/get_cred.c               |    3 +-
  source4/heimdal/lib/krb5/kcm.c                    |    4 +-
  source4/heimdal/lib/krb5/keyblock.c               |    2 +-
  source4/heimdal/lib/krb5/krb5.h                   |    4 +-
  source4/heimdal/lib/krb5/krb5_locl.h              |    6 +-
  source4/heimdal/lib/krb5/misc.c                   |    2 +-
  source4/heimdal/lib/krb5/pac.c                    |   62 +-
  source4/heimdal/lib/krb5/padata.c                 |    2 +-
  source4/heimdal/lib/krb5/pcache.c                 |    2 +-
  source4/heimdal/lib/krb5/pkinit.c                 |   16 +-
  source4/heimdal/lib/krb5/plugin.c                 |   70 ++-
  source4/heimdal/lib/krb5/principal.c              |  437 +----------
  source4/heimdal/lib/krb5/ticket.c                 |    2 +-
  source4/heimdal/lib/krb5/v4_glue.c                |  960 ---------------------
  source4/heimdal/lib/krb5/warn.c                   |    8 +
  source4/heimdal/lib/ntlm/ntlm.c                   |   18 +-
  source4/heimdal/lib/roken/getarg.c                |   14 +-
  source4/heimdal/lib/roken/{xfree.c =>   rand.c}     |   16 +-
  source4/heimdal/lib/roken/resolve.c               |    8 +-
  source4/heimdal/lib/roken/roken-common.h          |   12 +
  source4/heimdal/lib/roken/roken.h.in              |   43 +-
  source4/heimdal/lib/roken/setprogname.c           |   33 +
  source4/heimdal/lib/roken/socket.c                |   39 +-
  source4/heimdal_build/roken.h                     |    3 +
  source4/heimdal_build/wscript_build               |    8 +-
  source4/kdc/hdb-samba4.c                          |   16 -
  source4/kdc/kdc.c                                 |   11 +-
  source4/scripting/python/samba/netcmd/drs.py      |    7 +-
  wintest/test-s4-howto.py                          |   44 +-
  wintest/wintest.py                                |    8 +-
  83 files changed, 2670 insertions(+), 3753 deletions(-)
  delete mode 100644 source4/heimdal/kdc/kaserver.c
  create mode 100644 source4/heimdal/lib/gssapi/gssapi/gssapi_oid.h
  create mode 100644 source4/heimdal/lib/gssapi/mech/gss_mo.c
  create mode 100644 source4/heimdal/lib/gssapi/mech/gss_oid.c
  delete mode 100644 source4/heimdal/lib/krb5/v4_glue.c
  copy source4/heimdal/lib/roken/{xfree.c =>   rand.c} (85%)


Changeset truncated at 500 lines:

diff --git a/source4/heimdal/base/baselocl.h b/source4/heimdal/base/baselocl.h
index 06806d2..5f15726 100644
--- a/source4/heimdal/base/baselocl.h
+++ b/source4/heimdal/base/baselocl.h
@@ -33,13 +33,17 @@
   * SUCH DAMAGE.
   */

+#include "config.h"
+
  #include<stdio.h>
  #include<stdlib.h>
+#include<string.h>
  #include<errno.h>
  #include<limits.h>
-#include<unistd.h>

-#include "config.h"
+#ifdef HAVE_UNISTD_H
+#include<unistd.h>
+#endif

  #include "heimqueue.h"
  #include "heim_threads.h"
@@ -50,14 +54,8 @@
  #include<dispatch/dispatch.h>
  #endif

-#if HEIM_BASE_NON_ATOMIC
-/* non-atomic varients */
-#define heim_base_atomic_inc(x) ++(*(x))
-#define heim_base_atomic_dec(x) --(*(x))
-#define heim_base_atomic_type  unsigned int
-#define heim_base_atomic_max    UINT_MAX
+#if defined(__GNUC__)&&   defined(HAVE___SYNC_ADD_AND_FETCH)

-#elif defined(__GNUC__)
  #define heim_base_atomic_inc(x) __sync_add_and_fetch((x), 1)
  #define heim_base_atomic_dec(x) __sync_sub_and_fetch((x), 1)
  #define heim_base_atomic_type unsigned int
@@ -65,12 +63,44 @@

  #define heim_base_exchange_pointer(t,v) __sync_lock_test_and_set((t), (v))

-#elif 0 /* windows */
+#elif defined(_WIN32)
+
+#define heim_base_atomic_inc(x) InterlockedIncrement(x)
+#define heim_base_atomic_dec(x) InterlockedDecrement(x)
+#define heim_base_atomic_type  LONG
+#define heim_base_atomic_max    MAXLONG

  #define heim_base_exchange_pointer(t,v) InterlockedExchangePointer((t),(v))

  #else
-#error "provide atomic integer operations for your compiler"
+
+#define HEIM_BASE_NEED_ATOMIC_MUTEX 1
+extern HEIMDAL_MUTEX _heim_base_mutex;
+
+#define heim_base_atomic_type  unsigned int
+
+static inline heim_base_atomic_type
+heim_base_atomic_inc(heim_base_atomic_type *x)
+{
+    heim_base_atomic_type t;
+    HEIMDAL_MUTEX_lock(&_heim_base_mutex);
+    t = ++(*x);
+    HEIMDAL_MUTEX_unlock(&_heim_base_mutex);
+    return t;
+}
+
+static inline heim_base_atomic_type
+heim_base_atomic_dec(heim_base_atomic_type *x)
+{
+    heim_base_atomic_type t;
+    HEIMDAL_MUTEX_lock(&_heim_base_mutex);
+    t = --(*x);
+    HEIMDAL_MUTEX_unlock(&_heim_base_mutex);
+    return t;
+}
+
+#define heim_base_atomic_max    UINT_MAX
+
  #endif

  /* tagged strings/object/XXX */
diff --git a/source4/heimdal/base/heimbase.c b/source4/heimdal/base/heimbase.c
index 137129a..b8d5d74 100644
--- a/source4/heimdal/base/heimbase.c
+++ b/source4/heimdal/base/heimbase.c
@@ -60,6 +60,10 @@ struct heim_base_mem {
  #define PTR2BASE(ptr) (((struct heim_base *)ptr) - 1)
  #define BASE2PTR(ptr) ((void *)(((struct heim_base *)ptr) + 1))

+#ifdef HEIM_BASE_NEED_ATOMIC_MUTEX
+HEIMDAL_MUTEX _heim_base_mutex = HEIMDAL_MUTEX_INITIALIZER;
+#endif
+
  /*
   * Auto release structure
   */
@@ -334,6 +338,8 @@ heim_base_once_f(heim_base_once_t *once, void *ctx, void 
(*func)(void *))
      } else {
        HEIMDAL_MUTEX_unlock(&mutex);
        while (1) {
+           struct timeval tv = { 0, 1000 };
+           select(0, NULL, NULL, NULL,&tv);
            HEIMDAL_MUTEX_lock(&mutex);
            if (*once == 2)
                break;
@@ -364,13 +370,10 @@ heim_abort(const char *fmt, ...)
  void
  heim_abortv(const char *fmt, va_list ap)
  {
-    char *str = NULL;
-    int ret;
+    static char str[1024];

-    ret = vasprintf(&str, fmt, ap);
-    if (ret>   0&&   str) {
-       syslog(LOG_ERR, "heim_abort: %s", str);
-    }
+    vsnprintf(str, sizeof(str), fmt, ap);
+    syslog(LOG_ERR, "heim_abort: %s", str);
      abort();
  }

diff --git a/source4/heimdal/cf/make-proto.pl b/source4/heimdal/cf/make-proto.pl
index 566534f..bc323b9 100644
--- a/source4/heimdal/cf/make-proto.pl
+++ b/source4/heimdal/cf/make-proto.pl
@@ -180,6 +180,7 @@ sub foo {
      local ($arg) = @_;
      $_ = $arg;
      s/.*\/([^\/]*)/$1/;
+    s/.*\\([^\\]*)/$1/;
      s/[^a-zA-Z0-9]/_/g;
      "__" . $_ . "__";
  }
diff --git a/source4/heimdal/kdc/default_config.c 
b/source4/heimdal/kdc/default_config.c
index 66108f4..e262453 100644
--- a/source4/heimdal/kdc/default_config.c
+++ b/source4/heimdal/kdc/default_config.c
@@ -296,7 +296,6 @@ krb5_kdc_pkinit_config(krb5_context context, 
krb5_kdc_configuration *config)

      }

-#endif /* PKINIT */
-
      return 0;
+#endif /* PKINIT */
  }
diff --git a/source4/heimdal/kdc/kaserver.c b/source4/heimdal/kdc/kaserver.c
deleted file mode 100644
index 827205a..0000000
--- a/source4/heimdal/kdc/kaserver.c
+++ /dev/null
@@ -1,955 +0,0 @@
-/*
- * Copyright (c) 1997 - 2005 Kungliga Tekniska Högskolan
- * (Royal Institute of Technology, Stockholm, Sweden).
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of the Institute nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include "kdc_locl.h"
-
-#ifdef KRB4
-
-#include<krb5-v4compat.h>
-#include<rx.h>
-
-#define KA_AUTHENTICATION_SERVICE 731
-#define KA_TICKET_GRANTING_SERVICE 732
-#define KA_MAINTENANCE_SERVICE 733
-
-#define AUTHENTICATE_OLD        1
-#define CHANGEPASSWORD          2
-#define GETTICKET_OLD           3
-#define SETPASSWORD             4
-#define SETFIELDS               5
-#define CREATEUSER              6
-#define DELETEUSER              7
-#define GETENTRY                8
-#define LISTENTRY               9
-#define GETSTATS               10
-#define DEBUG                  11
-#define GETPASSWORD            12
-#define GETRANDOMKEY           13
-#define AUTHENTICATE           21
-#define AUTHENTICATE_V2                22
-#define GETTICKET              23
-
-/* XXX - Where do we get these? */
-
-#define RXGEN_OPCODE (-455)
-
-#define KADATABASEINCONSISTENT                   (180480L)
-#define KAEXIST                                  (180481L)
-#define KAIO                                     (180482L)
-#define KACREATEFAIL                             (180483L)
-#define KANOENT                                  (180484L)
-#define KAEMPTY                                  (180485L)
-#define KABADNAME                                (180486L)
-#define KABADINDEX                               (180487L)
-#define KANOAUTH                                 (180488L)
-#define KAANSWERTOOLONG                          (180489L)
-#define KABADREQUEST                             (180490L)
-#define KAOLDINTERFACE                           (180491L)
-#define KABADARGUMENT                            (180492L)
-#define KABADCMD                                 (180493L)
-#define KANOKEYS                                 (180494L)
-#define KAREADPW                                 (180495L)
-#define KABADKEY                                 (180496L)
-#define KAUBIKINIT                               (180497L)
-#define KAUBIKCALL                               (180498L)
-#define KABADPROTOCOL                            (180499L)
-#define KANOCELLS                                (180500L)
-#define KANOCELL                                 (180501L)
-#define KATOOMANYUBIKS                           (180502L)
-#define KATOOMANYKEYS                            (180503L)
-#define KABADTICKET                              (180504L)
-#define KAUNKNOWNKEY                             (180505L)
-#define KAKEYCACHEINVALID                        (180506L)
-#define KABADSERVER                              (180507L)
-#define KABADUSER                                (180508L)
-#define KABADCPW                                 (180509L)
-#define KABADCREATE                              (180510L)
-#define KANOTICKET                               (180511L)
-#define KAASSOCUSER                              (180512L)
-#define KANOTSPECIAL                             (180513L)
-#define KACLOCKSKEW                              (180514L)
-#define KANORECURSE                              (180515L)
-#define KARXFAIL                                 (180516L)
-#define KANULLPASSWORD                           (180517L)
-#define KAINTERNALERROR                          (180518L)
-#define KAPWEXPIRED                              (180519L)
-#define KAREUSED                                 (180520L)
-#define KATOOSOON                                (180521L)
-#define KALOCKED                                 (180522L)
-
-
-static krb5_error_code
-decode_rx_header (krb5_storage *sp,
-                 struct rx_header *h)
-{
-    krb5_error_code ret;
-
-    ret = krb5_ret_uint32(sp,&h->epoch);
-    if (ret) return ret;
-    ret = krb5_ret_uint32(sp,&h->connid);
-    if (ret) return ret;
-    ret = krb5_ret_uint32(sp,&h->callid);
-    if (ret) return ret;
-    ret = krb5_ret_uint32(sp,&h->seqno);
-    if (ret) return ret;
-    ret = krb5_ret_uint32(sp,&h->serialno);
-    if (ret) return ret;
-    ret = krb5_ret_uint8(sp,&h->type);
-    if (ret) return ret;
-    ret = krb5_ret_uint8(sp,&h->flags);
-    if (ret) return ret;
-    ret = krb5_ret_uint8(sp,&h->status);
-    if (ret) return ret;
-    ret = krb5_ret_uint8(sp,&h->secindex);
-    if (ret) return ret;
-    ret = krb5_ret_uint16(sp,&h->reserved);
-    if (ret) return ret;
-    ret = krb5_ret_uint16(sp,&h->serviceid);
-    if (ret) return ret;
-
-    return 0;
-}
-
-static krb5_error_code
-encode_rx_header (struct rx_header *h,
-                 krb5_storage *sp)
-{
-    krb5_error_code ret;
-
-    ret = krb5_store_uint32(sp, h->epoch);
-    if (ret) return ret;
-    ret = krb5_store_uint32(sp, h->connid);
-    if (ret) return ret;
-    ret = krb5_store_uint32(sp, h->callid);
-    if (ret) return ret;
-    ret = krb5_store_uint32(sp, h->seqno);
-    if (ret) return ret;
-    ret = krb5_store_uint32(sp, h->serialno);
-    if (ret) return ret;
-    ret = krb5_store_uint8(sp,  h->type);
-    if (ret) return ret;
-    ret = krb5_store_uint8(sp,  h->flags);
-    if (ret) return ret;
-    ret = krb5_store_uint8(sp,  h->status);
-    if (ret) return ret;
-    ret = krb5_store_uint8(sp,  h->secindex);
-    if (ret) return ret;
-    ret = krb5_store_uint16(sp, h->reserved);
-    if (ret) return ret;
-    ret = krb5_store_uint16(sp, h->serviceid);
-    if (ret) return ret;
-
-    return 0;
-}
-
-static void
-init_reply_header (struct rx_header *hdr,
-                  struct rx_header *reply_hdr,
-                  u_char type,
-                  u_char flags)
-{
-    reply_hdr->epoch     = hdr->epoch;
-    reply_hdr->connid    = hdr->connid;
-    reply_hdr->callid    = hdr->callid;
-    reply_hdr->seqno     = 1;
-    reply_hdr->serialno  = 1;
-    reply_hdr->type      = type;
-    reply_hdr->flags     = flags;
-    reply_hdr->status    = 0;
-    reply_hdr->secindex  = 0;
-    reply_hdr->reserved  = 0;
-    reply_hdr->serviceid = hdr->serviceid;
-}
-
-/*
- * Create an error `reply´ using for the packet `hdr' with the error
- * `error´ code.
- */
-static void
-make_error_reply (struct rx_header *hdr,
-                 uint32_t error,
-                 krb5_data *reply)
-
-{
-    struct rx_header reply_hdr;
-    krb5_error_code ret;
-    krb5_storage *sp;
-
-    init_reply_header (hdr,&reply_hdr, HT_ABORT, HF_LAST);
-    sp = krb5_storage_emem();
-    if (sp == NULL)
-       return;
-    ret = encode_rx_header (&reply_hdr, sp);
-    if (ret)
-       return;
-    krb5_store_int32(sp, error);
-    krb5_storage_to_data (sp, reply);
-    krb5_storage_free (sp);
-}
-
-static krb5_error_code
-krb5_ret_xdr_data(krb5_storage *sp,
-                 krb5_data *data)
-{
-    int ret;
-    int size;
-    ret = krb5_ret_int32(sp,&size);
-    if(ret)
-       return ret;
-    if(size<   0)
-       return ERANGE;
-    data->length = size;
-    if (size) {
-       u_char foo[4];
-       size_t pad = (4 - size % 4) % 4;
-
-       data->data = malloc(size);
-       if (data->data == NULL)
-           return ENOMEM;
-       ret = krb5_storage_read(sp, data->data, size);
-       if(ret != size)
-           return (ret<   0)? errno : KRB5_CC_END;
-       if (pad) {
-           ret = krb5_storage_read(sp, foo, pad);
-           if (ret != pad)
-               return (ret<   0)? errno : KRB5_CC_END;
-       }
-    } else
-       data->data = NULL;
-    return 0;
-}
-
-static krb5_error_code
-krb5_store_xdr_data(krb5_storage *sp,
-                   krb5_data data)
-{
-    u_char zero[4] = {0, 0, 0, 0};
-    int ret;
-    size_t pad;
-
-    ret = krb5_store_int32(sp, data.length);
-    if(ret<   0)
-       return ret;
-    ret = krb5_storage_write(sp, data.data, data.length);
-    if(ret != data.length){
-       if(ret<   0)
-           return errno;
-       return KRB5_CC_END;
-    }
-    pad = (4 - data.length % 4) % 4;
-    if (pad) {
-       ret = krb5_storage_write(sp, zero, pad);
-       if (ret != pad) {
-           if (ret<   0)
-               return errno;
-           return KRB5_CC_END;
-       }
-    }
-    return 0;
-}
-
-
-static krb5_error_code
-create_reply_ticket (krb5_context context,
-                    struct rx_header *hdr,
-                    Key *skey,
-                    char *name, char *instance, char *realm,
-                    struct sockaddr_in *addr,
-                    int life,
-                    int kvno,
-                    int32_t max_seq_len,
-                    const char *sname, const char *sinstance,
-                    uint32_t challenge,
-                    const char *label,
-                    krb5_keyblock *key,
-                    krb5_data *reply)
-{
-    krb5_error_code ret;
-    krb5_data ticket;
-    krb5_keyblock session;
-    krb5_storage *sp;
-    krb5_data enc_data;
-    struct rx_header reply_hdr;
-    char zero[8];
-    size_t pad;
-    unsigned fyrtiosjuelva;
-
-    /* create the ticket */
-
-    krb5_generate_random_keyblock(context, ETYPE_DES_PCBC_NONE,&session);
-
-    _krb5_krb_create_ticket(context,
-                           0,
-                           name,
-                           instance,
-                           realm,
-                           addr->sin_addr.s_addr,
-                       &session,
-                           life,
-                           kdc_time,
-                           sname,
-                           sinstance,
-                       &skey->key,
-                       &ticket);
-
-    /* create the encrypted part of the reply */
-    sp = krb5_storage_emem ();
-    krb5_generate_random_block(&fyrtiosjuelva, sizeof(fyrtiosjuelva));
-    fyrtiosjuelva&= 0xffffffff;
-    krb5_store_int32 (sp, fyrtiosjuelva);
-    krb5_store_int32 (sp, challenge);
-    krb5_storage_write  (sp, session.keyvalue.data, 8);
-    krb5_free_keyblock_contents(context,&session);
-    krb5_store_int32 (sp, kdc_time);
-    krb5_store_int32 (sp, kdc_time + _krb5_krb_life_to_time (0, life));
-    krb5_store_int32 (sp, kvno);
-    krb5_store_int32 (sp, ticket.length);
-    krb5_store_stringz (sp, name);
-    krb5_store_stringz (sp, instance);
-#if 1 /* XXX - Why shouldn't the realm go here? */
-    krb5_store_stringz (sp, "");
-#else



--
Matthieu Patou
Samba Team        http://samba.org
Private repo      http://git.samba.org/?p=mat/samba.git;a=summary




--
Matthieu Patou
Samba Team        http://samba.org
Private repo      http://git.samba.org/?p=mat/samba.git;a=summary


Reply via email to