Imported Upstream version 1.8.7
[debian/sudo] / doc / fixmdoc.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2012-2013 Todd C. Miller <Todd.Miller@courtesan.com>
4 #
5 # Permission to use, copy, modify, and distribute this software for any
6 # purpose with or without fee is hereby granted, provided that the above
7 # copyright notice and this permission notice appear in all copies.
8 #
9 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 #
17
18 OUTFILE="$1"
19 rm -f "$OUTFILE"
20 > "$OUTFILE"
21
22 # Page specific hacks
23 case "$OUTFILE" in
24     sudo.mdoc.sed)
25         # Replace "0 minutes" with "unlimited"
26         cat >>"$OUTFILE" <<-'EOF'
27                 /^\.Li 0$/ {
28                         N
29                         s/^\.Li 0\nminutes\.$/unlimited./
30                 }
31         EOF
32
33         # BSD auth
34         BA_FLAG=
35         if [ X"$BAMAN" != X"1" ]; then
36                 BA_FLAG='/^.*\n\.Op Fl a Ar auth_type/{;N;/^.*\n\.Ek$/d;};'
37                 cat >>"$OUTFILE" <<-'EOF'
38                         /^\.It Fl a Ar type/,/BSD authentication\.$/ {
39                                 d
40                         }
41                 EOF
42         fi
43
44         # BSD login class
45         LC_FLAG=
46         if [ X"$LCMAN" != X"1" ]; then
47                 LC_FLAG='/^.*\n\.Op Fl c Ar class/{;N;/^.*\n\.Ek$/d;};'
48                 cat >>"$OUTFILE" <<-'EOF'
49                         /^\.It Fl c Ar class/,/BSD login classes\.$/ {
50                                 d
51                         }
52                         /^\.Xr login_cap 3 ,$/d
53                         /^BSD login class$/ {
54                                 N
55                                 /^BSD login class\n\.It$/d
56                         }
57                 EOF
58         fi
59
60         # SELinux
61         SE_FLAG=
62         if [ X"$SEMAN" != X"1" ]; then
63                 SE_FLAG='/^.*\n\.Op Fl r Ar role/{;N;/^.*\n\.Ek$/d;};/^.*\n\.Op Fl t Ar type/{;N;/^.*\n\.Ek$/d;};'
64                 cat >>"$OUTFILE" <<-'EOF'
65                         /^\.It Fl r Ar role/,/^\.Ar role \.$/ {
66                                 d
67                         }
68                         /^\.It Fl t Ar type/,/specified role\.$/ {
69                                 d
70                         }
71                         /^SELinux role and type$/ {
72                                 N
73                                 /^SELinux role and type\n\.It$/d
74                         }
75                 EOF
76         fi
77
78         # Solaris privileges
79         if [ X"$PSMAN" != X"1" ]; then
80                 cat >>"$OUTFILE" <<-'EOF'
81                         /^Solaris project$/ {
82                                 N
83                                 N
84                                 N
85                                 /^Solaris project\n\.It\nSolaris privileges\n\.It$/d
86                         }
87                 EOF
88         fi
89
90         # Unsupported flags must be removed together
91         if [ -n "$BA_FLAG$LC_FLAG$SE_FLAG" ]; then
92                 cat >>"$OUTFILE" <<-EOF
93                         /^\.Bk -words\$/ {
94                             N
95                             $BA_FLAG$LC_FLAG$SE_FLAG
96                         }
97                 EOF
98         fi
99         ;;
100     sudoers.mdoc.sed)
101         # Subsections to remove (SELinux and Solaris are adjacent)
102         RM_SS=
103         if [ X"$PSMAN" != X"1" ]; then
104             if [ X"$SEMAN" != X"1" ]; then
105                 RM_SS='/^\.Ss SELinux_Spec/,/^\.Ss [^S]/{;/^\.Ss [^S][^o][^l]/!d;};'
106             else
107                 RM_SS='/^\.Ss Solaris_Priv_Spec/,/^\.Ss/{;/^\.Ss [^S][^o][^l]/!d;};'
108             fi
109         elif [ X"$SEMAN" != X"1" ]; then
110                 RM_SS='/^\.Ss SELinux_Spec/,/^\.Ss/{;/^\.Ss [^S][^E][^L]/!d;};'
111         fi
112         if [ -n "$RM_SS" ]; then
113                 cat >>"$OUTFILE" <<-EOF
114                         $RM_SS
115                 EOF
116         fi
117
118         # BSD login class
119         if [ X"$LCMAN" != X"1" ]; then
120                 cat >>"$OUTFILE" <<-'EOF'
121                         /^On BSD systems/,/\.$/ {
122                                 d
123                         }
124                         /^\.It use_loginclass$/,/^\.It/ {
125                                 /^\.It [^u][^s][^e][^_][^l]/!d
126                         }
127                 EOF
128         fi
129
130         # Solaris PrivSpec
131         if [ X"$PSMAN" != X"1" ]; then
132                 cat >>"$OUTFILE" <<-'EOF'
133                         s/Solaris_Priv_Spec? //
134                         /^Solaris_Priv_Spec ::=/ {
135                                 N
136                                 d
137                         }
138                         /^\.It limitprivs$/,/^\.It/ {
139                                 /^\.It [^l][^i][^m][^i][^t]/!d
140                         }
141                         /^\.It privs$/,/^\.It/ {
142                                 /^\.It [^p][^r][^i][^v][^s]$/!d
143                         }
144                         /^On Solaris 10/,/^\.Pp/ {
145                                 d
146                         }
147                 EOF
148         fi
149
150         # SELinux
151         if [ X"$SEMAN" != X"1" ]; then
152                 cat >>"$OUTFILE" <<-'EOF'
153                         s/SELinux_Spec? //
154                         /^SELinux_Spec ::=/ {
155                                 N
156                                 d
157                         }
158                         /^\.It [rt][oy][lp]e$/,/^\.It/ {
159                                 /^\.It [^rt][^oy][^lp][^e]$/!d
160                         }
161                 EOF
162         fi
163         ;;
164 esac