Skip to content

Commit 14894aa

Browse files
authored
Merge pull request #301 from trusteddomainproject/fix/lib-version-235
Fix OPENDMARC_LIB_VERSION always being 0x00000000 in GitHub releases (issue #235)
2 parents d2d57b4 + 3f004d6 commit 14894aa

4 files changed

Lines changed: 186 additions & 3 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,4 @@ opendmarc*.gz.asc
2222
HOURS
2323
tags
2424
.vscode
25+
libopendmarc/dmarc.h

Makefile.am

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@ DISTCLEANFILES = opendmarc-@VERSION@.tar.gz
2727

2828
DISTCHECK_CONFIGURE_FLAGS=--enable-filter-tests
2929

30-
dist-hook:
31-
[ -f $(distdir)/libopendmarc/dmarc.h ] && rm -f $(distdir)/libopendmarc/dmarc.h
32-
sed -e '/OPENDMARC_LIB_VERSION/s/0x[0-9]*/0x@HEX_VERSION@/' < $(srcdir)/libopendmarc/dmarc.h > $(distdir)/libopendmarc/dmarc.h
30+
dist-hook:
3331
echo "looking to see if @VERSION@ is in the RELEASE_NOTES"
3432
fgrep @VERSION@ $(srcdir)/RELEASE_NOTES
3533
sed -e 's|\(@VERSION@[ \t]*\)[0-9?]\{4\}\(/[0-9?]\{2\}\)\{2\}|\1'`date +%Y/%m/%d`'|' < $(srcdir)/RELEASE_NOTES > $(distdir)/RELEASE_NOTES

configure.ac

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,7 @@ AC_CONFIG_FILES([ Makefile
526526
contrib/spec/opendmarc.spec
527527
db/Makefile
528528
libopendmarc/Makefile
529+
libopendmarc/dmarc.h
529530
libopendmarc/tests/Makefile
530531
libopendmarc/tests/testfiles/Makefile
531532
libopendmarc/docs/Makefile

libopendmarc/dmarc.h.in

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
/*
2+
** Copyright (c) 2012-2016, 2018, 2021, The Trusted Domain Project.
3+
** All rights reserved.
4+
*/
5+
6+
#ifndef DMARC_H
7+
#define DMARC_H
8+
9+
#ifdef __cplusplus
10+
extern "C" {
11+
#endif /* __cplusplus */
12+
13+
#include <sys/param.h>
14+
#include <sys/types.h>
15+
#include <sys/socket.h>
16+
#include <netinet/in.h>
17+
#include <resolv.h>
18+
19+
#define OPENDMARC_LIB_VERSION 0x@HEX_VERSION@
20+
21+
#define DMARC_MAXHOSTNAMELEN (256)
22+
23+
# define DMARC_POLICY_IP_TYPE_IPV4 (4)
24+
# define DMARC_POLICY_IP_TYPE_IPV6 (6)
25+
26+
# define DMARC_POLICY_SPF_ORIGIN_MAILFROM (1)
27+
# define DMARC_POLICY_SPF_ORIGIN_HELO (2)
28+
29+
# define DMARC_POLICY_SPF_OUTCOME_NONE (0)
30+
# define DMARC_POLICY_SPF_OUTCOME_PASS (1)
31+
# define DMARC_POLICY_SPF_OUTCOME_FAIL (2)
32+
# define DMARC_POLICY_SPF_OUTCOME_TMPFAIL (3)
33+
# define DMARC_POLICY_SPF_ALIGNMENT_PASS (4)
34+
# define DMARC_POLICY_SPF_ALIGNMENT_FAIL (5)
35+
36+
# define DMARC_POLICY_DKIM_OUTCOME_NONE (0)
37+
# define DMARC_POLICY_DKIM_OUTCOME_PASS (1)
38+
# define DMARC_POLICY_DKIM_OUTCOME_FAIL (2)
39+
# define DMARC_POLICY_DKIM_OUTCOME_TMPFAIL (3)
40+
# define DMARC_POLICY_DKIM_ALIGNMENT_PASS (4)
41+
# define DMARC_POLICY_DKIM_ALIGNMENT_FAIL (5)
42+
43+
#define DMARC_RECORD_A_UNSPECIFIED ('\0') /* adkim and aspf */
44+
#define DMARC_RECORD_A_STRICT ('s') /* adkim and aspf */
45+
#define DMARC_RECORD_A_RELAXED ('r') /* adkim and aspf */
46+
#define DMARC_RECORD_P_UNSPECIFIED ('\0') /* p and sp */
47+
#define DMARC_RECORD_P_NONE ('n') /* p and sp */
48+
#define DMARC_RECORD_P_QUARANTINE ('q') /* p and sp */
49+
#define DMARC_RECORD_P_REJECT ('r') /* p and sp */
50+
#define DMARC_RECORD_RF_UNSPECIFIED (0x0) /* rf, a bitmap */
51+
#define DMARC_RECORD_RF_AFRF (0x1) /* rf, a bitmap */
52+
#define DMARC_RECORD_RF_IODEF (0x2) /* rf, a bitmap */
53+
#define DMARC_RECORD_FO_UNSPECIFIED (0x0) /* fo, a bitmap */
54+
#define DMARC_RECORD_FO_0 (0x1) /* fo, a bitmap */
55+
#define DMARC_RECORD_FO_1 (0x2) /* fo, a bitmap */
56+
#define DMARC_RECORD_FO_D (0x4) /* fo, a bitmap */
57+
#define DMARC_RECORD_FO_S (0x8) /* fo, a bitmap */
58+
59+
#define DMARC_PARSE_OKAY (0) /* Okay to continue */
60+
#define DMARC_PARSE_ERROR_EMPTY (1) /* Nothing to parse */
61+
#define DMARC_PARSE_ERROR_NULL_CTX (2) /* Got a NULL context */
62+
#define DMARC_PARSE_ERROR_BAD_VERSION (3) /* Such as v=DBOB1 */
63+
#define DMARC_PARSE_ERROR_BAD_VALUE (4) /* Bad token value like p=bob */
64+
#define DMARC_PARSE_ERROR_NO_REQUIRED_P (5) /* Required p= missing */
65+
#define DMARC_PARSE_ERROR_NO_DOMAIN (6) /* No domain, e.g. <> */
66+
#define DMARC_PARSE_ERROR_NO_ALLOC (7) /* Memory Allocation Faliure */
67+
#define DMARC_PARSE_ERROR_BAD_SPF_MACRO (8) /* Was not a macro from above */
68+
#define DMARC_PARSE_ERROR_BAD_DKIM_MACRO DMARC_PARSE_ERROR_BAD_SPF_MACRO
69+
#define DMARC_DNS_ERROR_NO_RECORD (9) /* No DMARC record was found */
70+
#define DMARC_DNS_ERROR_NXDOMAIN (10) /* No such domain exists */
71+
#define DMARC_DNS_ERROR_TMPERR (11) /* Recoverable DNS error */
72+
#define DMARC_TLD_ERROR_UNKNOWN (12) /* Undefined TLD type */
73+
#define DMARC_FROM_DOMAIN_ABSENT (13) /* No From: domain was supplied */
74+
75+
#define DMARC_POLICY_ABSENT (14) /* Policy up to you. No DMARC record found */
76+
#define DMARC_POLICY_PASS (15) /* Policy OK so accept message */
77+
#define DMARC_POLICY_REJECT (16) /* Policy says to reject message */
78+
#define DMARC_POLICY_QUARANTINE (17) /* Policy says to quarantine message */
79+
#define DMARC_POLICY_NONE (18) /* Policy says to monitor and report */
80+
81+
#define DMARC_USED_POLICY_IS_P (19) /* Domain policy taken (aka 'p')*/
82+
#define DMARC_USED_POLICY_IS_SP (20) /* Sub-domain policy taken (aka 'sp')*/
83+
84+
#ifndef OPENDMARC_POLICY_C
85+
typedef struct dmarc_policy_t DMARC_POLICY_T;
86+
#endif
87+
88+
#define OPENDMARC_STATUS_T int
89+
90+
#ifndef MAXPATHLEN
91+
# define MAXPATHLEN (2048)
92+
#endif
93+
#ifndef MAXNS
94+
# define MAXNS (3)
95+
#endif
96+
#define OPENDMARC_MAX_NSADDRLIST (8)
97+
typedef struct {
98+
int tld_type;
99+
u_char tld_source_file[MAXPATHLEN];
100+
int nscount;
101+
struct sockaddr_in nsaddr_list[MAXNS];
102+
} OPENDMARC_LIB_T;
103+
104+
#define OPENDMARC_TLD_TYPE_NONE (0) /* Will not use a tld file */
105+
#define OPENDMARC_TLD_TYPE_MOZILLA (1) /* mozilla.org effective_tld_names.dat */
106+
107+
/*
108+
* Library one time initialization.
109+
*/
110+
OPENDMARC_STATUS_T opendmarc_policy_library_init(OPENDMARC_LIB_T *lib_init);
111+
OPENDMARC_STATUS_T opendmarc_policy_library_shutdown(OPENDMARC_LIB_T *lib_init);
112+
113+
/*
114+
* Context management.
115+
*/
116+
DMARC_POLICY_T * opendmarc_policy_connect_init(u_char *ip_addr, int ip_type);
117+
DMARC_POLICY_T * opendmarc_policy_connect_clear(DMARC_POLICY_T *pctx);
118+
DMARC_POLICY_T * opendmarc_policy_connect_rset(DMARC_POLICY_T *pctx);
119+
DMARC_POLICY_T * opendmarc_policy_connect_shutdown(DMARC_POLICY_T *pctx);
120+
121+
/*
122+
* Store information routines.
123+
*/
124+
OPENDMARC_STATUS_T opendmarc_policy_store_from_domain(DMARC_POLICY_T *pctx, u_char *domain);
125+
OPENDMARC_STATUS_T opendmarc_policy_store_dkim(DMARC_POLICY_T *pctx, u_char *domain, u_char *selector, int result, u_char *human_result);
126+
OPENDMARC_STATUS_T opendmarc_policy_store_spf(DMARC_POLICY_T *pctx, u_char *domain, int result, int origin, u_char *human_result);
127+
128+
/*
129+
* The DMARC record itself.
130+
*/
131+
OPENDMARC_STATUS_T opendmarc_policy_query_dmarc(DMARC_POLICY_T *pctx, u_char *domain);
132+
OPENDMARC_STATUS_T opendmarc_policy_parse_dmarc(DMARC_POLICY_T *pctx, u_char *domain, u_char *record);
133+
OPENDMARC_STATUS_T opendmarc_policy_store_dmarc(DMARC_POLICY_T *pctx, u_char *dmarc_record, u_char *domain, u_char *organizationaldomain);
134+
135+
/*
136+
* Access to parts of the DMARC record.
137+
*/
138+
OPENDMARC_STATUS_T opendmarc_get_policy_to_enforce(DMARC_POLICY_T *pctx);
139+
OPENDMARC_STATUS_T opendmarc_policy_fetch_alignment(DMARC_POLICY_T *pctx, int *dkim_alignment, int *spf_alignment);
140+
OPENDMARC_STATUS_T opendmarc_policy_fetch_pct(DMARC_POLICY_T *pctx, int *pctp);
141+
OPENDMARC_STATUS_T opendmarc_policy_fetch_adkim(DMARC_POLICY_T *pctx, int *adkim);
142+
OPENDMARC_STATUS_T opendmarc_policy_fetch_aspf(DMARC_POLICY_T *pctx, int *aspf);
143+
OPENDMARC_STATUS_T opendmarc_policy_fetch_p(DMARC_POLICY_T *pctx, int *p);
144+
OPENDMARC_STATUS_T opendmarc_policy_fetch_sp(DMARC_POLICY_T *pctx, int *sp);
145+
u_char ** opendmarc_policy_fetch_rua(DMARC_POLICY_T *pctx, u_char *list_buf, size_t size_of_buf, int constant);
146+
u_char ** opendmarc_policy_fetch_ruf(DMARC_POLICY_T *pctx, u_char *list_buf, size_t size_of_buf, int constant);
147+
OPENDMARC_STATUS_T opendmarc_policy_fetch_utilized_domain(DMARC_POLICY_T *pctx, u_char *buf, size_t buflen);
148+
OPENDMARC_STATUS_T opendmarc_policy_fetch_from_domain(DMARC_POLICY_T *pctx, u_char *buf, size_t buflen);
149+
OPENDMARC_STATUS_T opendmarc_policy_query_dmarc_xdomain(DMARC_POLICY_T *pctx, u_char *uri);
150+
OPENDMARC_STATUS_T opendmarc_get_policy_token_used(DMARC_POLICY_T *pctx);
151+
152+
/*
153+
* TLD processing
154+
*/
155+
int opendmarc_tld_read_file(char *path_fname, char *commentstring, char *drop, char *except);
156+
void opendmarc_tld_shutdown(void);
157+
158+
/*
159+
* XML Parsing
160+
*/
161+
u_char ** opendmarc_xml(char *b, size_t blen, char *e, size_t elen);
162+
u_char ** opendmarc_xml_parse(char *fname, char *err_buf, size_t err_len);
163+
164+
/*
165+
* Utility routines
166+
*/
167+
void opendmarc_dns_fake_record(const char *name, const char *answer);
168+
u_char ** opendmarc_util_clearargv(u_char **ary);
169+
const char * opendmarc_policy_status_to_str(OPENDMARC_STATUS_T status);
170+
int opendmarc_policy_check_alignment(u_char *subdomain, u_char *tld, int mode);
171+
int opendmarc_policy_to_buf(DMARC_POLICY_T *pctx, char *buf, size_t buflen);
172+
173+
/*
174+
* SPF Processing
175+
*/
176+
int opendmarc_spf_test(char *ip_address, char *mail_from_domain, char *helo_domain, char *spf_record, int soft_fail_as_pass, char *human_readable, size_t human_readable_len, int *use_mailfrom);
177+
int opendmarc_spf2_test(char *ip_address, char *mail_from_domain, char *helo_domain, char *spf_record, int softfail_okay_flag, char *human_readable, size_t human_readable_len, int *used_mfrom);
178+
179+
#ifdef __cplusplus
180+
}
181+
#endif /* __cplusplus */
182+
183+
#endif /* DMARC_H */

0 commit comments

Comments
 (0)