]> git.draconx.ca Git - gentoo-draconx.git/blobdiff - net-libs/libmapi/files/libmapi-2.3-update-ndr-api.patch
gnome-extra/evolution-mapi: Bump.
[gentoo-draconx.git] / net-libs / libmapi / files / libmapi-2.3-update-ndr-api.patch
diff --git a/net-libs/libmapi/files/libmapi-2.3-update-ndr-api.patch b/net-libs/libmapi/files/libmapi-2.3-update-ndr-api.patch
new file mode 100644 (file)
index 0000000..03bb4d6
--- /dev/null
@@ -0,0 +1,144 @@
+From d9fee28b67dcee387654151a24ebe2547d18156a Mon Sep 17 00:00:00 2001
+From: Nick Bowler <nbowler@draconx.ca>
+Date: Thu, 8 Sep 2022 17:29:28 -0400
+Subject: [PATCH 2/3] Adapt for NDR API changes in Samba.
+
+---
+ configure.ac               | 38 ++++++++++++++++++++++++++
+ libmapi/socket/interface.c |  4 +++
+ ndr_mapi.c                 | 55 ++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 97 insertions(+)
+
+diff --git a/configure.ac b/configure.ac
+index 65793e9..20fa171 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -512,6 +512,44 @@ AS_CASE([$oc_cv_samba_cli_credentials_flavour],
+   [*new*], [AC_DEFINE([SAMBA_CRED_NEW_STYLE_SET_STATE], [1],
+     [Define to 1 if Samba cli_credentials_set_kerberos_state take 3 arguments])])
++# Probe for samba ndr.h incompatible change
++
++AC_CACHE_CHECK([whether Sabma ndr_token_peek returns error code],
++[oc_cv_samba_ndr_token_peek_errors],
++[oc_save_CFLAGS=$CFLAGS
++CFLAGS="$CFLAGS $SAMBA_CFLAGS"
++AC_COMPILE_IFELSE(
++  [AC_LANG_PROGRAM([#include <ndr.h>
++enum ndr_err_code ndr_token_peek();],
++    [return ndr_token_peek(0, 0, 0)])],
++  [oc_cv_samba_ndr_token_peek_errors=yes],
++  [oc_cv_samba_ndr_token_peek_errors=no])
++CFLAGS=$oc_save_CFLAGS])
++
++AS_CASE([$oc_cv_samba_ndr_token_peek_errors],
++  [yes], [AC_DEFINE([SAMBA_NDR_TOKEN_PEEK_ERRORS], [1],
++    [Define to 1 if Samba ndr_token_peek returns an error code])])
++
++AC_CACHE_CHECK([for Samba NDR_ZERO_STRUCT],
++[oc_cv_samba_have_ndr_zero_struct],
++[oc_save_CFLAGS=$CFLAGS
++CFLAGS="$CFLAGS $SAMBA_CFLAGS"
++AC_COMPILE_IFELSE(
++  [AC_LANG_PROGRAM([#include <ndr.h>],
++    [struct foo { int x; } bar; NDR_ZERO_STRUCT(bar);])],
++  [oc_cv_samba_have_ndr_zero_struct=yes],
++  [oc_cv_samba_have_ndr_zero_struct=no])
++CFLAGS=$oc_save_CFLAGS])
++
++AS_CASE([$oc_cv_samba_have_ndr_zero_struct],
++  [yes], [AC_DEFINE([SAMBA_HAVE_NDR_ZERO_STRUCT], [1],
++    [Define to 1 if Samba provides NDR_ZERO_STRUCT(P) macros])])
++
++oc_save_CFLAGS=$CFLAGS
++CFLAGS="$CFLAGS $SAMBA_CFLAGS"
++AC_CHECK_FUNCS([ndr_push_get_switch_value ndr_pull_get_switch_value ndr_print_get_switch_value])
++CFLAGS=$oc_save_CFLAGS
++
+ dnl ---------------------------------------------------------------------------
+ dnl Finally add libmapi to the library list
+ dnl ---------------------------------------------------------------------------
+diff --git a/libmapi/socket/interface.c b/libmapi/socket/interface.c
+index f1b3258..bc0d69a 100644
+--- a/libmapi/socket/interface.c
++++ b/libmapi/socket/interface.c
+@@ -23,6 +23,10 @@
+ #include "libmapi/libmapi_private.h"
+ #include <param.h>
++#if SAMBA_HAVE_NDR_ZERO_STRUCT
++#     define ZERO_STRUCTPN(x) NDR_ZERO_STRUCT(*x)
++#endif
++
+ #define ALLONES  ((uint32_t)0xFFFFFFFF)
+ /*
+   address construction based on a patch from fred@datalync.com
+diff --git a/ndr_mapi.c b/ndr_mapi.c
+index c177556..1b78c4b 100644
+--- a/ndr_mapi.c
++++ b/ndr_mapi.c
+@@ -27,6 +27,61 @@
+ #define MIN(a,b) ((a)<(b)?(a):(b))
++#if SAMBA_NDR_TOKEN_PEEK_ERRORS
++static uint32_t wrap_ndr_token_peek(struct ndr_token_list *list, const void *key)
++{
++      uint32_t ret;
++
++      ndr_token_peek(list, key, &ret);
++      return ret;
++}
++#define ndr_token_peek(a, b) wrap_ndr_token_peek(a, b)
++
++static uint32_t wrap_ndr_get_array_size(struct ndr_pull *ndr, const void *p)
++{
++      uint32_t ret;
++
++      ndr_get_array_size(ndr, p, &ret);
++      return ret;
++}
++#define ndr_get_array_size(a, b) wrap_ndr_get_array_size(a, b)
++
++static uint32_t wrap_ndr_get_array_length(struct ndr_pull *ndr, const void *p)
++{
++      uint32_t ret;
++
++      ndr_get_array_length(ndr, p, &ret);
++      return ret;
++}
++#define ndr_get_array_length(a, b) wrap_ndr_get_array_length(a, b)
++#endif
++
++#if SAMBA_HAVE_NDR_ZERO_STRUCT
++#     define ZERO_STRUCT(x) NDR_ZERO_STRUCT(x)
++#     define ZERO_STRUCTP(x) NDR_ZERO_STRUCTP(x)
++#endif
++
++#if !HAVE_NDR_PRINT_GET_SWITCH_VALUE
++static uint32_t ndr_print_get_switch_value(struct ndr_print *ndr, const void *p)
++{
++      return ndr_token_peek(&ndr->switch_list, p);
++}
++#endif
++
++#if !HAVE_NDR_PUSH_GET_SWITCH_VALUE
++static uint32_t ndr_push_get_switch_value(struct ndr_push *ndr, const void *p)
++{
++      return ndr_token_peek(&ndr->switch_list, p);
++}
++#endif
++
++#if !HAVE_NDR_PULL_GET_SWITCH_VALUE
++static uint32_t ndr_pull_get_switch_value(struct ndr_pull *ndr, const void *p)
++{
++      return ndr_token_peek(&ndr->switch_list, p);
++}
++#endif
++
+ _PUBLIC_ void obfuscate_data(uint8_t *data, uint32_t size, uint8_t salt)
+ {
+       uint32_t i;
+-- 
+2.35.1
+