1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
#!/bin/sh
# To view the formatted manual page of this file, type:
# POSTFIXSOURCE/mantools/srctoman - extract_cfg.sh | nroff -man
#++
# NAME
# extract_cfg 1
# SUMMARY
# extract database parameter names from cfg_get_xxx() calls
# SYNOPSIS
# \fBextract_cfg [-d|-s] [\fIfile...\fB]\fR
# DESCRIPTION
# The \fBextract_cfg\fR command extracts the parameter names
# from cfg_get_{str,int,bool}() calls in dict_xxx.c files. The
# output is one parameter name per line, formatted as a C string
# followed by comma.
#
# Options:
# .IP \fB-d\fR
# Add the "domain" parameter to the output. This is used by
# the LDAP, memcache, and *SQL* tables.
# .IP \fB-s\fR
# Add the legacy SQL query parameters: "select_field", "table",
# "where_field", and "additional_conditions".
# LICENSE
# .ad
# .fi
# The Secure Mailer license must be distributed with this software.
# HISTORY
# .ad
# .fi
# This command was introduced with Postfix 3.3.
# AUTHOR(S)
# Wietse Venema
# Google, Inc.
# 111 8th Avenue
# New York, NY 10011, USA
#--
# In case not installed.
m4 </dev/null || exit 1
# Flags to add db_common parameter names.
add_legacy_sql_query_params=
add_domain_param=
# Parse JCL.
while :
do
case "$1" in
-d) add_domain_param=1;;
-s) add_legacy_sql_query_params=1;;
-*) echo Bad option: $1 1>&2; exit 1;;
*) break;;
esac
shift
done
# We use m4 macros to extract arguments from cfg_get_xxx() calls that
# may span multiple lines. We sandwich information of interest between
# control-A characters. Multiple cfg_get_xxx() calls on the same line
# should be OK, as long as the calls don't nest.
(
cat <<'EOF'
define(`cfg_get_str',`$2
')dnl
define(`cfg_get_int',`$2
')dnl
define(`cfg_get_bool',`$2
')dnl
EOF
# Convert selected C macro definitions into m4 macro definitions.
sed 's/^#define[ ]*\([DICT_MC_NAME_A-Za-z0-9_]*\)[ ]*\("[^"]*"\)/define(`\1'"'"',`\2'"'"')/' "$@"
) | m4 | awk -F '// { print $2 }' | (
test -n "$add_domain_param" && {
cat <<EOF
"domain"
EOF
}
test -n "$add_legacy_sql_query_params" && {
cat <<EOF
"table"
"select_field"
"where_field"
"additional_conditions"
EOF
}
cat -
) | sort -u | sed 's/$/,/'
|