*/
#include "amanda.h"
+#include "match.h"
#include "conffile.h"
#include "diskfile.h"
#include "tapefile.h"
#include "logfile.h"
#include "clock.h"
-#include "version.h"
#include "holding.h"
#include "driverio.h"
#include "server_util.h"
pid_t driver_pid, reporter_pid;
amwait_t exitcode;
int opt;
- dumpfile_t file;
GSList *holding_list=NULL, *holding_file;
int driver_pipe[2];
char date_string[100];
char *tpchanger;
char *qdisk, *qhname;
GSList *datestamp_list = NULL;
- config_overwrites_t *cfg_ovr;
+ config_overrides_t *cfg_ovr;
char **config_options;
/*
dbopen(DBG_SUBDIR_SERVER);
- erroutput_type = ERR_INTERACTIVE;
+ add_amanda_log_handler(amanda_log_stderr);
foreground = 0;
batch = 0;
redirect = 1;
/* process arguments */
- cfg_ovr = new_config_overwrites(argc/2);
+ cfg_ovr = new_config_overrides(argc/2);
while((opt = getopt(argc, argv, "bfso:D:")) != EOF) {
switch(opt) {
case 'b': batch = 1;
break;
case 's': redirect = 0;
break;
- case 'o': add_config_overwrite_opt(cfg_ovr, optarg);
+ case 'o': add_config_override_opt(cfg_ovr, optarg);
break;
case 'D': if (datearg == NULL)
datearg = alloc(21*SIZEOF(char *));
}
if(argc < 1) {
- error(_("Usage: amflush%s [-b] [-f] [-s] [-D date]* <confdir> [host [disk]* ]* [-o configoption]*"), versionsuffix());
+ error(_("Usage: amflush [-b] [-f] [-s] [-D date]* [-o configoption]* <confdir> [host [disk]* ]*"));
/*NOTREACHED*/
}
- config_init(CONFIG_INIT_EXPLICIT_NAME | CONFIG_INIT_FATAL,
+ set_config_overrides(cfg_ovr);
+ config_init(CONFIG_INIT_EXPLICIT_NAME,
argv[0]);
- apply_config_overwrites(cfg_ovr);
- check_running_as(RUNNING_AS_DUMPUSER);
-
- dbrename(config_name, DBG_SUBDIR_SERVER);
conf_diskfile = config_dir_relative(getconf_str(CNF_DISKFILE));
- if (read_diskfile(conf_diskfile, &diskq) < 0) {
- error(_("could not read disklist file \"%s\""), conf_diskfile);
- /*NOTREACHED*/
+ read_diskfile(conf_diskfile, &diskq);
+ amfree(conf_diskfile);
+
+ if (config_errors(NULL) >= CFGERR_WARNINGS) {
+ config_print_errors();
+ if (config_errors(NULL) >= CFGERR_ERRORS) {
+ g_critical(_("errors processing config file"));
+ }
}
+
+ check_running_as(RUNNING_AS_DUMPUSER);
+
+ dbrename(get_config_name(), DBG_SUBDIR_SERVER);
+
errstr = match_disklist(&diskq, argc-1, argv+1);
if (errstr) {
g_printf(_("%s"),errstr);
amfree(errstr);
}
- amfree(conf_diskfile);
conf_tapelist = config_dir_relative(getconf_str(CNF_TAPELIST));
if(read_tapelist(conf_tapelist)) {
conf_logdir = config_dir_relative(getconf_str(CNF_LOGDIR));
conf_logfile = vstralloc(conf_logdir, "/log", NULL);
if (access(conf_logfile, F_OK) == 0) {
- error(_("%s exists: amdump or amflush is already running, or you must run amcleanup"), conf_logfile);
+ run_amcleanup(get_config_name());
+ }
+ if (access(conf_logfile, F_OK) == 0) {
+ char *process_name = get_master_process(conf_logfile);
+ error(_("%s exists: %s is already running, or you must run amcleanup"), conf_logfile, process_name);
/*NOTREACHED*/
}
- amfree(conf_logfile);
- driver_program = vstralloc(amlibexecdir, "/", "driver", versionsuffix(),
- NULL);
- reporter_program = vstralloc(sbindir, "/", "amreport", versionsuffix(),
- NULL);
- logroll_program = vstralloc(amlibexecdir, "/", "amlogroll", versionsuffix(),
- NULL);
+ driver_program = vstralloc(amlibexecdir, "/", "driver", NULL);
+ reporter_program = vstralloc(sbindir, "/", "amreport", NULL);
+ logroll_program = vstralloc(amlibexecdir, "/", "amlogroll", NULL);
tapedev = getconf_str(CNF_TAPEDEV);
tpchanger = getconf_str(CNF_TPCHANGER);
exit(1);
}
+ if (access(conf_logfile, F_OK) == 0) {
+ char *process_name = get_master_process(conf_logfile);
+ error(_("%s exists: someone started %s"), conf_logfile, process_name);
+ /*NOTREACHED*/
+ }
+ log_add(L_INFO, "%s pid %ld", get_pname(), (long)getpid());
+
if(!batch) confirm(datestamp_list);
for(dp = diskq.head; dp != NULL; dp = dp->next) {
if(!foreground) detach();
- erroutput_type = (ERR_AMANDALOG|ERR_INTERACTIVE);
- set_logerror(logerror);
+ add_amanda_log_handler(amanda_log_stderr);
+ add_amanda_log_handler(amanda_log_trace_log);
today = time(NULL);
tm = localtime(&today);
if (tm) {
close(driver_pipe[1]);
config_options = get_config_options(3);
config_options[0] = "driver";
- config_options[1] = config_name;
+ config_options[1] = get_config_name();
config_options[2] = "nodump";
safe_fd(-1, 0);
execve(driver_program, config_options, safe_env());
g_fprintf(driver_stream, "DATE %s\n", amflush_timestamp);
for(holding_file=holding_list; holding_file != NULL;
holding_file = holding_file->next) {
+ dumpfile_t file;
holding_file_get_dumpfile((char *)holding_file->data, &file);
if (holding_file_size((char *)holding_file->data, 1) <= 0) {
log_add(L_INFO, "%s: removing file with no data.",
(char *)holding_file->data);
holding_file_unlink((char *)holding_file->data);
+ dumpfile_free_data(&file);
continue;
}
qhname);
amfree(qdisk);
amfree(qhname);
+ dumpfile_free_data(&file);
}
g_fprintf(stderr, "ENDFLUSH\n"); fflush(stderr);
g_fprintf(driver_stream, "ENDFLUSH\n"); fflush(driver_stream);
/*
* This is the child process.
*/
- config_options = get_config_options(2);
+ config_options = get_config_options(3);
config_options[0] = "amreport";
- config_options[1] = config_name;
+ config_options[1] = get_config_name();
+ config_options[2] = "--from-amdump";
safe_fd(-1, 0);
execve(reporter_program, config_options, safe_env());
error(_("cannot exec %s: %s"), reporter_program, strerror(errno));
}
}
+ log_add(L_INFO, "pid-done %ld", (long)getpid());
+
/*
* Call amlogroll to rename the log file to its datestamped version.
* Since we exec at this point, our exit code will be that of amlogroll.
*/
config_options = get_config_options(2);
config_options[0] = "amlogroll";
- config_options[1] = config_name;
+ config_options[1] = get_config_name();
safe_fd(-1, 0);
execve(logroll_program, config_options, safe_env());
error(_("cannot exec %s: %s"), logroll_program, strerror(errno));
int r, ch;
fflush(stdout); fflush(stderr);
- while((ch = getchar()) != EOF && ch != '\n' && isspace(ch)) {
+ while((ch = getchar()) != EOF && ch != '\n' && g_ascii_isspace(ch)) {
(void)ch; /* Quite lint */
}
if(ch == '\n') {
a = answer;
while ((ch = *a++) != '\0') {
- if (!isspace(ch))
+ if (!g_ascii_isspace(ch))
break;
}
/* rewrite the selected list into r_datestamp_list, then copy it over
* to datestamp_list */
do {
- if (isspace(ch) || ch == ',') {
+ if (g_ascii_isspace(ch) || ch == ',') {
continue;
}
chupper = (char)toupper(ch);