X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=client-src%2Fclient_util.h;h=7d56768e31c3a6622cdf3dbb6a74e8abb5115434;hb=42ff24f2a525d5965e1841b2ebe3ee0f4b918ac6;hp=0745a3109574d6ae36fc72c44776b0995dc4e7d4;hpb=cdbbeef9cde260e429854dd313bc0bf7560e1e24;p=debian%2Famanda diff --git a/client-src/client_util.h b/client-src/client_util.h index 0745a31..7d56768 100644 --- a/client-src/client_util.h +++ b/client-src/client_util.h @@ -32,52 +32,141 @@ #define CLIENT_UTIL_H #include "amanda.h" +#include "conffile.h" #include "amfeatures.h" #include "sl.h" #include "util.h" /* for bstrncmp() */ +#include "amandad.h" /* for g_option_t */ +#include "amxml.h" /* for dle_t */ -typedef struct option_s { - char *str; - int compress; - int encrypt; - char *srvcompprog; - char *clntcompprog; - char *srv_encrypt; - char *clnt_encrypt; - char *srv_decrypt_opt; - char *clnt_decrypt_opt; - int no_record; - int createindex; - char *auth; - sl_t *exclude_file; - sl_t *exclude_list; - sl_t *include_file; - sl_t *include_list; - int exclude_optional; +typedef enum { + RECOVER_PATH_CWD = 0, + RECOVER_PATH_REMOTE = 1, +} recover_path_t; + +typedef struct backup_support_option_s { + int config; + int host; + int disk; + int max_level; + int index_line; + int index_xml; + int message_line; + int message_xml; + int record; + int include_file; + int include_list; + int include_list_glob; int include_optional; -} option_t; - -#define NO_COMPR 0 -#define COMPR_FAST 1 -#define COMPR_BEST 2 -#define COMPR_SERVER_FAST 3 -#define COMPR_SERVER_BEST 4 -#define COMPR_SERVER_CUST 5 /* server-side custom compression */ -#define COMPR_CUST 6 /* client-side custom compression */ - -#define ENCRYPT_NONE 0 /* no encryption */ -#define ENCRYPT_CUST 1 /* client-side custom encryption */ -#define ENCRYPT_SERV_CUST 2 /* server-side custom encryption */ - -char *build_exclude(char *disk, char *device, option_t *options, int verbose); -char *build_include(char *disk, char *device, option_t *options, int verbose); -void init_options(option_t *options); -option_t *parse_options(char *str, - char *disk, - char *device, - am_feature_t *features, - int verbose); + int exclude_file; + int exclude_list; + int exclude_list_glob; + int exclude_optional; + int collection; + int calcsize; + int client_estimate; + int multi_estimate; + int smb_recover_mode; + int features; + data_path_t data_path_set; /* bitfield of all allowed data-path */ + recover_path_t recover_path; +} backup_support_option_t; + +typedef struct client_script_result_s { + int exit_code; + proplist_t proplist; + GPtrArray *output; + GPtrArray *err; +} client_script_result_t; + +typedef enum { + DMP_NORMAL, DMP_IGNORE, DMP_STRANGE, DMP_SIZE, DMP_ERROR +} dmpline_t; + +typedef struct regex_s { + char *regex; + int srcline; + int scale; /* only used for size lines */ + int field; + dmpline_t typ; +} amregex_t; + +#define AM_NORMAL_RE(re) {(re), __LINE__, 0, 0, DMP_NORMAL} +#define AM_IGNORE_RE(re) {(re), __LINE__, 0, 0, DMP_IGNORE} +#define AM_STRANGE_RE(re) {(re), __LINE__, 0, 0, DMP_STRANGE} +#define AM_SIZE_RE(re,s,f) {(re), __LINE__, (s), (f), DMP_SIZE} +#define AM_ERROR_RE(re) {(re), __LINE__, 0, 0, DMP_ERROR} + +char *build_exclude(dle_t *dle, int verbose); +char *build_include(dle_t *dle, int verbose); +void parse_options(char *str, + dle_t *dle, + am_feature_t *features, + int verbose); + +/* Add all properties of an application for a dle to an ARGV. + * include/exclude options are converted to properties. + * + * @param argv_ptr: the ARGV where to store properties. + * @param dle: the dle. + * @returns: Number of argument added to ARGV. + */ +void application_property_add_to_argv(GPtrArray *argv_ptr, + dle_t *dle, + backup_support_option_t *bsu, + am_feature_t *amfeatures); char *fixup_relative(char *name, char *device); +backup_support_option_t *backup_support_option(char *program, + g_option_t *g_options, + char *disk, + char *amdevice, + GPtrArray **errarray); + +void run_client_script(script_t *script, + execute_on_t execute_on, + g_option_t *g_options, + dle_t *dle); + +void run_client_scripts(execute_on_t execute_on, + g_option_t *g_options, + dle_t *dle, + FILE *streamout); + +void run_calcsize(char *config, char *program, char *disk, + char *dirname, GSList *levels, + char *file_exclude, char *file_include); + +void check_access(char *filename, int mode); +void check_file(char *filename, int mode); +void check_dir(char *dirname, int mode); +void check_suid(char *filename); +double the_num(char * str, int pos); + +/* Convert a GSList returned from config_errors into an "ERROR " + * line suitable for inclusion in a NAK or REP packet. Because we only + * get one ERROR line per packet, this includes only the first + * error, with an indication that there are more to follow. + * + * @param errlist: the list of errors from config_errors + * @returns: newly allocated string containing the error messages + */ +char *config_errors_to_error_string(GSList *errlist); + +amregex_t *build_re_table(amregex_t *orig_re_table, + GSList *normal_message, + GSList *ignore_message, + GSList *strange_message); +void add_type_table(dmpline_t typ, + amregex_t **re_table, amregex_t *orig_re_table, + GSList *normal_message, GSList *ignore_message, + GSList *strange_message); +void add_list_table(dmpline_t typ, amregex_t **re_table, + GSList *message); + +/* Merge properties from proplist2 to proplist1) + */ +void merge_properties(proplist_t proplist1, proplist_t proplist2); #endif +