X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=server-src%2Famflush.c;h=d8e11786b29842896e08c0fae4e6d7809fd7294c;hb=1005f23c4fa108f82c8c57bef4b86fa0a5022a16;hp=4515e67298480a93325060f7dfb1795e7145f86d;hpb=94a044f90357edefa6f4ae9f0b1d5885b0e34aee;p=debian%2Famanda diff --git a/server-src/amflush.c b/server-src/amflush.c index 4515e67..d8e1178 100644 --- a/server-src/amflush.c +++ b/server-src/amflush.c @@ -30,12 +30,12 @@ */ #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" @@ -79,7 +79,6 @@ main( 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]; @@ -91,7 +90,7 @@ main( char *tpchanger; char *qdisk, *qhname; GSList *datestamp_list = NULL; - config_overwrites_t *cfg_ovr; + config_overrides_t *cfg_ovr; char **config_options; /* @@ -113,14 +112,14 @@ main( 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; @@ -129,7 +128,7 @@ main( 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 *)); @@ -150,28 +149,34 @@ main( } if(argc < 1) { - error(_("Usage: amflush%s [-b] [-f] [-s] [-D date]* [host [disk]* ]* [-o configoption]*"), versionsuffix()); + error(_("Usage: amflush [-b] [-f] [-s] [-D date]* [-o configoption]* [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)) { @@ -193,17 +198,17 @@ main( 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); @@ -255,6 +260,13 @@ main( 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) { @@ -275,8 +287,8 @@ main( 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) { @@ -305,7 +317,7 @@ main( 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()); @@ -324,12 +336,14 @@ main( 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; } @@ -358,6 +372,7 @@ main( 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); @@ -441,9 +456,10 @@ main( /* * 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)); @@ -465,13 +481,15 @@ main( } } + 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)); @@ -486,7 +504,7 @@ get_letter_from_user(void) 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') { @@ -556,14 +574,14 @@ pick_datestamp(void) 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);