4d007e87082af7ddcd4415f4ed1b6f6a15b51fad
[debian/amanda] / common-src / amfeatures.h
1 /*
2  * Amanda, The Advanced Maryland Automatic Network Disk Archiver
3  * Copyright (c) 1991-1998 University of Maryland at College Park
4  * All Rights Reserved.
5  *
6  * Permission to use, copy, modify, distribute, and sell this software and its
7  * documentation for any purpose is hereby granted without fee, provided that
8  * the above copyright notice appear in all copies and that both that
9  * copyright notice and this permission notice appear in supporting
10  * documentation, and that the name of U.M. not be used in advertising or
11  * publicity pertaining to distribution of the software without specific,
12  * written prior permission.  U.M. makes no representations about the
13  * suitability of this software for any purpose.  It is provided "as is"
14  * without express or implied warranty.
15  *
16  * U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M.
18  * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
20  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
21  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22  *
23  * Authors: the Amanda Development Team.  Its members are listed in a
24  * file named AUTHORS, in the root directory of this distribution.
25  */
26
27 /*
28  * $Id: amfeatures.h,v 1.21 2006/07/19 17:46:07 martinea Exp $
29  *
30  * Define feature test related items.
31  */
32
33 #ifndef AMFEATURES_H
34 #define AMFEATURES_H
35
36 /*
37  * !!!WARNING!!!    !!!WARNING!!!    !!!WARNING!!!    !!!WARNING!!!
38  *
39  * No matter **WHAT**, you **MUST** enter new features at the **END**
40  * of this list (just before "last_feature").  If you do not, mass
41  * confusion will ensue.
42  *
43  * And features must **NEVER** be removed (that is, their code number
44  * must remain).  The bits are cheap.
45  *
46  * If you add a feature here, you probably also need to add a line to
47  * am_init_feature_set() in features.c unless it is dynamic in some way.
48  *
49  * !!!WARNING!!!    !!!WARNING!!!    !!!WARNING!!!    !!!WARNING!!!
50  */
51 typedef enum {
52     /*
53      * This bit will be set if the feature test code is supported.  It
54      * will only be off for "old" (2.4.2p2 and earlier) systems.
55      */
56     have_feature_support = 0,
57
58     /*
59      * Amanda used to send authorization type information around like
60      * this in the OPTIONS string:
61      *
62      *  bsd-auth
63      *  krb4-auth
64      *
65      * To make it easier to add new authorization methods and parse,
66      * this was changed to a keyword=value syntax:
67      *
68      *  auth=BSD
69      *  auth=RSH
70      *  auth=KRB4
71      *  auth=krb5
72      *
73      * and so on.
74      */
75
76     fe_options_auth, /* amanda_feature_auth_keyword */
77
78     fe_selfcheck_req,
79     fe_selfcheck_req_device,
80     fe_selfcheck_rep,
81
82     fe_sendsize_req_no_options,
83     fe_sendsize_req_options,
84     fe_sendsize_req_device,             /* require fe_sendsize_req_options */
85     fe_sendsize_rep,
86
87     fe_sendbackup_req,
88     fe_sendbackup_req_device,
89     fe_sendbackup_rep,
90
91     fe_noop_req,
92     fe_noop_rep,
93
94     fe_program_dump,
95     fe_program_gnutar,
96     fe_program_application_api,         /* require fe_sendsize_req_options */
97
98     fe_options_compress_fast,
99     fe_options_compress_best,
100     fe_options_srvcomp_fast,
101     fe_options_srvcomp_best,
102     fe_options_no_record,
103     fe_options_index,
104     fe_options_exclude_file,
105     fe_options_exclude_list,
106     fe_options_multiple_exclude,        /* require fe_sendsize_req_options */
107     fe_options_optional_exclude,        /* require fe_sendsize_req_options */
108     fe_options_include_file,            /* require fe_sendsize_req_options */
109     fe_options_include_list,            /* require fe_sendsize_req_options */
110     fe_options_multiple_include,        /* require fe_sendsize_req_options */
111     fe_options_optional_include,        /* require fe_sendsize_req_options */
112     fe_options_bsd_auth,
113     fe_options_krb4_auth,
114     fe_options_kencrypt,
115
116     fe_req_options_maxdumps,
117     fe_req_options_hostname,
118     fe_req_options_features,
119
120     fe_rep_options_maxdumps,
121     fe_rep_options_hostname,
122     fe_rep_options_features,
123     fe_rep_options_sendbackup_options,
124
125     fe_amindexd_fileno_in_OLSD,
126     fe_amindexd_fileno_in_ORLD,
127     fe_amidxtaped_fsf,
128     fe_amidxtaped_label,
129     fe_amidxtaped_device,
130     fe_amidxtaped_host,
131     fe_amidxtaped_disk,
132     fe_amidxtaped_datestamp,
133     fe_amidxtaped_header,
134     fe_amidxtaped_nargs,
135     fe_amidxtaped_config,
136
137     fe_partial_estimate,
138     fe_calcsize_estimate,
139     fe_selfcheck_calcsize,
140
141     fe_recover_splits,
142     fe_amidxtaped_exchange_features,
143
144     fe_options_compress_cust,
145     fe_options_srvcomp_cust,
146     fe_options_encrypt_cust,
147     fe_options_encrypt_serv_cust,
148     fe_options_client_decrypt_option,
149     fe_options_server_decrypt_option,
150
151     fe_amindexd_marshall_in_OLSD,
152     fe_amindexd_marshall_in_ORLD,
153     fe_amindexd_marshall_in_DHST,
154     fe_amrecover_FEEDME,
155     fe_amrecover_timestamp,
156
157     fe_interface_quoted_text,
158
159     fe_program_star,
160
161     fe_amindexd_options_hostname,
162     fe_amindexd_options_features,
163     fe_amindexd_options_auth,
164
165     fe_amidxtaped_options_hostname,
166     fe_amidxtaped_options_features,
167     fe_amidxtaped_options_auth,
168
169     fe_amrecover_message,
170     fe_amrecover_feedme_tape,
171
172     fe_req_options_config,
173
174     fe_rep_sendsize_quoted_error,
175     fe_req_xml,
176     fe_pp_script,       // only in XML
177     fe_amindexd_DLE,
178     fe_amrecover_dle_in_header,
179     fe_xml_estimate,
180     fe_xml_property_priority,
181     fe_sendsize_rep_warning,
182
183     /*
184      * All new features must be inserted immediately *before* this entry.
185      */
186     last_feature
187 } am_feature_e;
188
189 typedef struct am_feature_s {
190     size_t              size;
191     unsigned char       *bytes;
192 } am_feature_t;
193
194 /*
195  * Functions.
196  */
197 extern am_feature_t *am_init_feature_set(void);
198 extern am_feature_t *am_set_default_feature_set(void);
199 extern am_feature_t *am_allocate_feature_set(void);
200 extern void am_release_feature_set(am_feature_t *);
201 extern int am_add_feature(am_feature_t *f, am_feature_e n);
202 extern int am_remove_feature(am_feature_t *f, am_feature_e n);
203 extern int am_has_feature(am_feature_t *f, am_feature_e n);
204 extern char *am_feature_to_string(am_feature_t *f);
205 extern am_feature_t *am_string_to_feature(char *s);
206
207 #endif  /* !AMFEATURES_H */