Add new header gssapi_alloc.h
authorSam Hartman <hartmans@mit.edu>
Fri, 14 Oct 2011 14:39:01 +0000 (14:39 +0000)
committerSam Hartman <hartmans@mit.edu>
Fri, 14 Oct 2011 14:39:01 +0000 (14:39 +0000)
Contains allocator methods for use with mechanisms and mechglues for
allocations that must be made in one module but freed in another.  On
windows, an allocation made in one module cannot safely be freed in
another using the usual c runtime malloc/free; runtime dll mismatch
will cause heap corruption in that case.  But it is safe to instead
directly use HeapAlloc()/HeapFree() specifying the default process
heap.  For now, this header is not public. If it becomes public
strncpy will need to be used instead of strlcpy.

Signed-off-by: Kevin Wasserman <kevin.wasserman@painless-security.com>
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@25330 dc483132-0cff-0310-8789-dd5450dbe970

src/Makefile.in
src/include/Makefile.in
src/lib/gssapi/Makefile.in
src/lib/gssapi/generic/Makefile.in
src/lib/gssapi/generic/gssapi_alloc.h [new file with mode: 0644]
src/util/gss-kernel-lib/Makefile.in
src/util/gss-kernel-lib/deps

index 81e5992c7d19b323b54fafc8deba4332ab8d9757..72d71e32e3d2c3ba9b642691794473b8f5ed67b8 100644 (file)
@@ -547,6 +547,7 @@ install-windows::
        copy include\profile.h "$(KRB_INSTALL_DIR)\include\."
        copy include\com_err.h "$(KRB_INSTALL_DIR)\include\."
        copy include\gssapi\gssapi.h "$(KRB_INSTALL_DIR)\include\gssapi\."
+       copy include\gssapi\gssapi_alloc.h "$(KRB_INSTALL_DIR)\include\gssapi\."
        copy include\gssapi\gssapi_krb5.h "$(KRB_INSTALL_DIR)\include\gssapi\."
        copy include\gssapi\gssapi_ext.h "$(KRB_INSTALL_DIR)\include\gssapi\."
        copy lib\$(OUTPRE)*.lib "$(KRB_INSTALL_DIR)\lib\."
index d6a9b3c3890c979def615481f3cbfc8ff061a3ee..18870317205d20a74e68bb678b5e10cd3fba2a87 100644 (file)
@@ -123,7 +123,7 @@ clean-unix::
 clean-windows::
        $(RM) com_err.h profile.h
        $(RM) gssapi\gssapi.h gssapi\gssapi_generic.h gssapi\gssapi_krb5.h
-       $(RM) gssapi\gssapi_ext.h gssapi\timestamp
+       $(RM) gssapi\gssapi_alloc.h gssapi\gssapi_ext.h gssapi\timestamp
        if exist gssapi\nul rmdir /s /q gssapi
        $(RM) osconf.h autoconf.h autoconf.stamp
        @echo Making clean in include
index 58658fd0e22de193b828a32b61cb6c2cec5c72cc..403834371e3840b1003ebe8c44530cf70481ef2c 100644 (file)
@@ -50,6 +50,7 @@ EXPORTED_HEADERS= \
        $(EHDRDIR)$(S)gssapi_krb5.h \
        $(EHDRDIR)$(S)gssapi_generic.h \
        $(EHDRDIR)$(S)gssapi.h \
+       $(EHDRDIR)$(S)gssapi_alloc.h \
        $(EHDRDIR)$(S)gssapi_ext.h
 merged-gssapi-header.h: $(EXPORTED_HEADERS)
        cat $(EXPORTED_HEADERS) > merged.tmp
index a9f6bfd3c30b7362200ee2bc942daea8c60fa8ee..669ca018154b8ff0c3753df7ed6f7c37db6d21c5 100644 (file)
@@ -17,6 +17,7 @@ EHDRDIR= $(BUILDTOP)$(S)include$(S)gssapi
 
 HDRS=  $(EHDRDIR)$(S)gssapi.h \
        $(EHDRDIR)$(S)gssapi_generic.h \
+       $(EHDRDIR)$(S)gssapi_alloc.h \
        $(EHDRDIR)$(S)gssapi_ext.h
 
 MK_EHDRDIR=if test -d $(EHDRDIR); then :; else (set -x; mkdir $(EHDRDIR)); fi
@@ -28,6 +29,8 @@ $(EHDRDIR)$(S)gssapi.h: $(EHDRDIR)$(S)timestamp gssapi.h
        $(CP) gssapi.h $@
 $(EHDRDIR)$(S)gssapi_generic.h: $(EHDRDIR)$(S)timestamp $(srcdir)$(S)gssapi_generic.h
        $(CP) $(srcdir)$(S)gssapi_generic.h $@
+$(EHDRDIR)$(S)gssapi_alloc.h: $(EHDRDIR)$(S)timestamp $(srcdir)$(S)gssapi_alloc.h
+       $(CP) $(srcdir)$(S)gssapi_alloc.h $@
 $(EHDRDIR)$(S)gssapi_ext.h: $(EHDRDIR)$(S)timestamp $(srcdir)$(S)gssapi_ext.h
        $(CP) $(srcdir)$(S)gssapi_ext.h $@
 
@@ -105,7 +108,7 @@ STLIBOBJS = \
        util_token.o \
        gssapi_err_generic.o
 
-EXPORTED_HEADERS= gssapi_generic.h gssapi_ext.h
+EXPORTED_HEADERS= gssapi_generic.h  gssapi_ext.h
 EXPORTED_BUILT_HEADERS= gssapi.h
 
 $(OBJS): $(EXPORTED_HEADERS) $(ETHDRS)
diff --git a/src/lib/gssapi/generic/gssapi_alloc.h b/src/lib/gssapi/generic/gssapi_alloc.h
new file mode 100644 (file)
index 0000000..cccbdbb
--- /dev/null
@@ -0,0 +1,62 @@
+/* To the extent possible under law, Painless Security, LLC has waived
+ * all copyright and related or neighboring rights to GSS-API Memory
+ * Management Header. This work is published from: United States.
+ */
+
+#ifndef GSSAPI_ALLOC_H
+#define GSSAPI_ALLOC_H
+
+#ifdef _WIN32
+#include "winbase.h"
+#endif
+#include <string.h>
+/*
+ * Note that we'll need to do something else if we decide to install
+ * this header for mechanisms.
+ */
+#include <k5-platform.h>
+
+static inline void
+gssalloc_free(void * value)
+{
+    if (value) {
+#if _WIN32
+        HeapFree(GetProcessHeap(), 0, value);
+#else
+        free(value);
+#endif
+    }
+}
+
+static inline void *
+gssalloc_malloc(size_t size)
+{
+#if _WIN32
+    return HeapAlloc(GetProcessHeap(), 0, size);
+#else
+    return malloc(size);
+#endif
+}
+
+static inline void *
+gssalloc_calloc(size_t count, size_t size)
+{
+#if _WIN32
+    return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, count * size);
+#else
+    return calloc(count, size);
+#endif
+}
+
+static inline char *
+gssalloc_strdup(const char *str)
+{
+    int size = strlen(str)+1;
+    char *copy = gssalloc_malloc(size);
+    if (copy) {
+        strlcpy(copy, str, size);
+    }
+    return copy;
+}
+
+#endif
index 6b9cff5e6ff3d6d2228c7fbab127f34b1d98ea61..f0f2f5360d5e3737f2824fd198e894b6849a613b 100644 (file)
@@ -50,6 +50,7 @@ OBJS= \
 HEADERS= \
        gssapi/gssapi.h \
        gssapi/gssapi_krb5.h \
+       gssapi/gssapi_alloc.h \
        gssapi/gssapi_ext.h \
        gssapi.h \
        gssapiP_krb5.h \
@@ -150,6 +151,8 @@ gssapi/gssapi.h: gssapi $(GSS_GENERIC_BUILD)/gssapi.h
        $(CP) $(GSS_GENERIC_BUILD)/gssapi.h $@
 gssapi/gssapi_krb5.h: gssapi $(GSS_KRB5_BUILD)/gssapi_krb5.h
        $(CP) $(GSS_KRB5_BUILD)/gssapi_krb5.h $@
+gssapi/gssapi_alloc.h: gssapi $(GSS_GENERIC)/gssapi_alloc.h
+       $(CP) $(GSS_GENERIC)/gssapi_alloc.h $@
 gssapi/gssapi_ext.h: gssapi $(GSS_GENERIC)/gssapi_ext.h
        $(CP) $(GSS_GENERIC)/gssapi_ext.h $@
 gssapiP_krb5.h: $(GSS_KRB5)/gssapiP_krb5.h
index 75ba053ee49e545e496823a2cabf1e0a4d56f78c..d41671ebce47b6da1767477fabfc46ff5550ae19 100644 (file)
@@ -3,7 +3,7 @@
 #
 $(OUTPRE)k5seal.$(OBJEXT): autoconf.h com_err.h gssapi/gssapi.h \
   gssapi/gssapi_ext.h gssapi/gssapi_krb5.h gssapiP_generic.h \
-  gssapiP_krb5.h gssapi_err_generic.h gssapi_err_krb5.h \
+  gssapiP_krb5.h gssapi_err_generic.h gssapi_err_krb5.h  gssapi/gssapi_alloc.h\
   gssapi_generic.h k5-buf.h k5-err.h k5-gmt_mktime.h \
   k5-int-pkinit.h k5-int.h k5-platform.h k5-plugin.h \
   k5-thread.h k5-trace.h k5seal.c krb5.h krb5/authdata_plugin.h \
@@ -94,7 +94,7 @@ $(OUTPRE)util_ordering.$(OBJEXT): autoconf.h com_err.h \
   gssapi_err_generic.h gssapi_generic.h k5-buf.h k5-platform.h \
   k5-thread.h util_ordering.c
 $(OUTPRE)kernel_gss.$(OBJEXT): autoconf.h com_err.h \
-  gssapi/gssapi.h gssapi/gssapi_ext.h gssapi/gssapi_krb5.h \
+  gssapi/gssapi.h gssapi/gssapi_ext.h gssapi/gssapi_krb5.h  gssapi/gssapi_alloc.h\
   gssapiP_generic.h gssapiP_krb5.h gssapi_err_generic.h \
   gssapi_err_krb5.h gssapi_generic.h k5-buf.h k5-err.h \
   k5-gmt_mktime.h k5-int-pkinit.h k5-int.h k5-platform.h \