1#ifndef _MAIL_VERSION_H_INCLUDED_
2#define _MAIL_VERSION_H_INCLUDED_
3
4/*++
5/* NAME
6/*	mail_version 3h
7/* SUMMARY
8/*	globally configurable parameters
9/* SYNOPSIS
10/*	#include <mail_version.h>
11/* DESCRIPTION
12/* .nf
13
14 /*
15  * Version of this program. Official versions are called a.b.c, and
16  * snapshots are called a.b-yyyymmdd, where a=major release number, b=minor
17  * release number, c=patchlevel, and yyyymmdd is the release date:
18  * yyyy=year, mm=month, dd=day.
19  *
20  * Patches change both the patchlevel and the release date. Snapshots have no
21  * patchlevel; they change the release date only.
22  */
23#define MAIL_RELEASE_DATE	"20140115"
24#define MAIL_VERSION_NUMBER	"2.11.0"
25
26#ifdef SNAPSHOT
27#define MAIL_VERSION_DATE	"-" MAIL_RELEASE_DATE
28#else
29#define MAIL_VERSION_DATE	""
30#endif
31
32#ifdef NONPROD
33#define MAIL_VERSION_PROD	"-nonprod"
34#else
35#define MAIL_VERSION_PROD	""
36#endif
37
38#define VAR_MAIL_VERSION	"mail_version"
39#define DEF_MAIL_VERSION	MAIL_VERSION_NUMBER MAIL_VERSION_DATE MAIL_VERSION_PROD
40
41extern char *var_mail_version;
42
43 /*
44  * Release date.
45  */
46#define VAR_MAIL_RELEASE	"mail_release_date"
47#define DEF_MAIL_RELEASE	MAIL_RELEASE_DATE
48extern char *var_mail_release;
49
50 /*
51  * The following macros stamp executable files as well as core dumps. This
52  * information helps to answer the following questions:
53  *
54  * - What Postfix versions(s) are installed on this machine?
55  *
56  * - Is this installation mixing multiple Postfix versions?
57  *
58  * - What Postfix version generated this core dump?
59  *
60  * To find out: strings -f file... | grep mail_version=
61  */
62#include <string.h>
63
64#define MAIL_VERSION_STAMP_DECLARE \
65    char *mail_version_stamp
66
67#define MAIL_VERSION_STAMP_ALLOCATE \
68    mail_version_stamp = strdup(VAR_MAIL_VERSION "=" DEF_MAIL_VERSION)
69
70 /*
71  * Mail version string parser, plus support to compare the compile-time
72  * version string of a Postfix program with the run-time version string of a
73  * Postfix shared library. When programs are not updated, they may fail in
74  * erratic ways when linked against a newer run-time library. Of course the
75  * right solution is so-number versioning of the Postfix run-time library.
76  */
77typedef struct {
78    char   *program;			/* postfix */
79    int     major;			/* 2 */
80    int     minor;			/* 9 */
81    int     patch;			/* null */
82    char   *snapshot;			/* 20111209-nonprod */
83} MAIL_VERSION;
84
85extern MAIL_VERSION *mail_version_parse(const char *, const char **);
86extern void mail_version_free(MAIL_VERSION *);
87extern const char *get_mail_version(void);
88extern void check_mail_version(const char *);
89
90#define MAIL_VERSION_CHECK \
91    check_mail_version(DEF_MAIL_VERSION)
92
93/* LICENSE
94/* .ad
95/* .fi
96/*	The Secure Mailer license must be distributed with this software.
97/* AUTHOR(S)
98/*	Wietse Venema
99/*	IBM T.J. Watson Research
100/*	P.O. Box 704
101/*	Yorktown Heights, NY 10598, USA
102/*--*/
103
104#endif
105