]> git.draconx.ca Git - gentoo-draconx.git/blob - 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
1 From d9fee28b67dcee387654151a24ebe2547d18156a Mon Sep 17 00:00:00 2001
2 From: Nick Bowler <nbowler@draconx.ca>
3 Date: Thu, 8 Sep 2022 17:29:28 -0400
4 Subject: [PATCH 2/3] Adapt for NDR API changes in Samba.
5
6 ---
7  configure.ac               | 38 ++++++++++++++++++++++++++
8  libmapi/socket/interface.c |  4 +++
9  ndr_mapi.c                 | 55 ++++++++++++++++++++++++++++++++++++++
10  3 files changed, 97 insertions(+)
11
12 diff --git a/configure.ac b/configure.ac
13 index 65793e9..20fa171 100644
14 --- a/configure.ac
15 +++ b/configure.ac
16 @@ -512,6 +512,44 @@ AS_CASE([$oc_cv_samba_cli_credentials_flavour],
17    [*new*], [AC_DEFINE([SAMBA_CRED_NEW_STYLE_SET_STATE], [1],
18      [Define to 1 if Samba cli_credentials_set_kerberos_state take 3 arguments])])
19  
20 +# Probe for samba ndr.h incompatible change
21 +
22 +AC_CACHE_CHECK([whether Sabma ndr_token_peek returns error code],
23 +[oc_cv_samba_ndr_token_peek_errors],
24 +[oc_save_CFLAGS=$CFLAGS
25 +CFLAGS="$CFLAGS $SAMBA_CFLAGS"
26 +AC_COMPILE_IFELSE(
27 +  [AC_LANG_PROGRAM([#include <ndr.h>
28 +enum ndr_err_code ndr_token_peek();],
29 +    [return ndr_token_peek(0, 0, 0)])],
30 +  [oc_cv_samba_ndr_token_peek_errors=yes],
31 +  [oc_cv_samba_ndr_token_peek_errors=no])
32 +CFLAGS=$oc_save_CFLAGS])
33 +
34 +AS_CASE([$oc_cv_samba_ndr_token_peek_errors],
35 +  [yes], [AC_DEFINE([SAMBA_NDR_TOKEN_PEEK_ERRORS], [1],
36 +    [Define to 1 if Samba ndr_token_peek returns an error code])])
37 +
38 +AC_CACHE_CHECK([for Samba NDR_ZERO_STRUCT],
39 +[oc_cv_samba_have_ndr_zero_struct],
40 +[oc_save_CFLAGS=$CFLAGS
41 +CFLAGS="$CFLAGS $SAMBA_CFLAGS"
42 +AC_COMPILE_IFELSE(
43 +  [AC_LANG_PROGRAM([#include <ndr.h>],
44 +    [struct foo { int x; } bar; NDR_ZERO_STRUCT(bar);])],
45 +  [oc_cv_samba_have_ndr_zero_struct=yes],
46 +  [oc_cv_samba_have_ndr_zero_struct=no])
47 +CFLAGS=$oc_save_CFLAGS])
48 +
49 +AS_CASE([$oc_cv_samba_have_ndr_zero_struct],
50 +  [yes], [AC_DEFINE([SAMBA_HAVE_NDR_ZERO_STRUCT], [1],
51 +    [Define to 1 if Samba provides NDR_ZERO_STRUCT(P) macros])])
52 +
53 +oc_save_CFLAGS=$CFLAGS
54 +CFLAGS="$CFLAGS $SAMBA_CFLAGS"
55 +AC_CHECK_FUNCS([ndr_push_get_switch_value ndr_pull_get_switch_value ndr_print_get_switch_value])
56 +CFLAGS=$oc_save_CFLAGS
57 +
58  dnl ---------------------------------------------------------------------------
59  dnl Finally add libmapi to the library list
60  dnl ---------------------------------------------------------------------------
61 diff --git a/libmapi/socket/interface.c b/libmapi/socket/interface.c
62 index f1b3258..bc0d69a 100644
63 --- a/libmapi/socket/interface.c
64 +++ b/libmapi/socket/interface.c
65 @@ -23,6 +23,10 @@
66  #include "libmapi/libmapi_private.h"
67  #include <param.h>
68  
69 +#if SAMBA_HAVE_NDR_ZERO_STRUCT
70 +#      define ZERO_STRUCTPN(x) NDR_ZERO_STRUCT(*x)
71 +#endif
72 +
73  #define ALLONES  ((uint32_t)0xFFFFFFFF)
74  /*
75    address construction based on a patch from fred@datalync.com
76 diff --git a/ndr_mapi.c b/ndr_mapi.c
77 index c177556..1b78c4b 100644
78 --- a/ndr_mapi.c
79 +++ b/ndr_mapi.c
80 @@ -27,6 +27,61 @@
81  
82  #define MIN(a,b) ((a)<(b)?(a):(b))
83  
84 +#if SAMBA_NDR_TOKEN_PEEK_ERRORS
85 +static uint32_t wrap_ndr_token_peek(struct ndr_token_list *list, const void *key)
86 +{
87 +       uint32_t ret;
88 +
89 +       ndr_token_peek(list, key, &ret);
90 +       return ret;
91 +}
92 +#define ndr_token_peek(a, b) wrap_ndr_token_peek(a, b)
93 +
94 +static uint32_t wrap_ndr_get_array_size(struct ndr_pull *ndr, const void *p)
95 +{
96 +       uint32_t ret;
97 +
98 +       ndr_get_array_size(ndr, p, &ret);
99 +       return ret;
100 +}
101 +#define ndr_get_array_size(a, b) wrap_ndr_get_array_size(a, b)
102 +
103 +static uint32_t wrap_ndr_get_array_length(struct ndr_pull *ndr, const void *p)
104 +{
105 +       uint32_t ret;
106 +
107 +       ndr_get_array_length(ndr, p, &ret);
108 +       return ret;
109 +}
110 +#define ndr_get_array_length(a, b) wrap_ndr_get_array_length(a, b)
111 +#endif
112 +
113 +#if SAMBA_HAVE_NDR_ZERO_STRUCT
114 +#      define ZERO_STRUCT(x) NDR_ZERO_STRUCT(x)
115 +#      define ZERO_STRUCTP(x) NDR_ZERO_STRUCTP(x)
116 +#endif
117 +
118 +#if !HAVE_NDR_PRINT_GET_SWITCH_VALUE
119 +static uint32_t ndr_print_get_switch_value(struct ndr_print *ndr, const void *p)
120 +{
121 +       return ndr_token_peek(&ndr->switch_list, p);
122 +}
123 +#endif
124 +
125 +#if !HAVE_NDR_PUSH_GET_SWITCH_VALUE
126 +static uint32_t ndr_push_get_switch_value(struct ndr_push *ndr, const void *p)
127 +{
128 +       return ndr_token_peek(&ndr->switch_list, p);
129 +}
130 +#endif
131 +
132 +#if !HAVE_NDR_PULL_GET_SWITCH_VALUE
133 +static uint32_t ndr_pull_get_switch_value(struct ndr_pull *ndr, const void *p)
134 +{
135 +       return ndr_token_peek(&ndr->switch_list, p);
136 +}
137 +#endif
138 +
139  _PUBLIC_ void obfuscate_data(uint8_t *data, uint32_t size, uint8_t salt)
140  {
141         uint32_t i;
142 -- 
143 2.35.1
144