X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=client-src%2Fselfcheck.c;h=dfffe2e3c8c214fe3b9b337d97c7ae88dd089f29;hb=691567b16c13087b31ee4c2b6d038e57872fae82;hp=a68f39e4f47a455a4575f03bbd906a2c2c111ddb;hpb=cb38d19aa8dc2c5d380ab2d7ad9724a5d99eee5d;p=debian%2Famanda diff --git a/client-src/selfcheck.c b/client-src/selfcheck.c index a68f39e..dfffe2e 100644 --- a/client-src/selfcheck.c +++ b/client-src/selfcheck.c @@ -1,6 +1,7 @@ /* * Amanda, The Advanced Maryland Automatic Network Disk Archiver * Copyright (c) 1991-1998 University of Maryland at College Park + * Copyright (c) 2007-2012 Zmanda, Inc. All Rights Reserved. * All Rights Reserved. * * Permission to use, copy, modify, distribute, and sell this software and its @@ -78,6 +79,7 @@ static void check_disk(dle_t *dle); static void check_overall(void); static int check_file_exist(char *filename); static void check_space(char *dir, off_t kbytes); +static void print_platform(void); int main( @@ -94,7 +96,12 @@ main( dle_t *dle; int level; GSList *errlist; - level_t *alevel; + am_level_t *alevel; + + if (argc > 1 && argv && argv[1] && g_str_equal(argv[1], "--version")) { + printf("selfcheck-%s\n", VERSION); + return (0); + } /* initialize */ @@ -121,6 +128,8 @@ main( dbopen(DBG_SUBDIR_CLIENT); startclock(); dbprintf(_("version %s\n"), VERSION); + g_printf("OK version %s\n", VERSION); + print_platform(); if(argc > 2 && strcmp(argv[1], "amandad") == 0) { amandad_auth = stralloc(argv[2]); @@ -252,7 +261,7 @@ main( if (ch == '\0' || sscanf(s - 1, "%d", &level) != 1) { goto err; /* bad level */ } - alevel = g_new0(level_t, 1); + alevel = g_new0(am_level_t, 1); alevel->level = level; dle->levellist = g_slist_append(dle->levellist, alevel); skip_integer(s, ch); @@ -313,6 +322,9 @@ main( err_extra = errmsg; goto err; } + if (merge_dles_properties(dles, 1) == 0) { + goto checkoverall; + } for (dle = dles; dle != NULL; dle = dle->next) { run_client_scripts(EXECUTE_ON_PRE_HOST_AMCHECK, g_options, dle, stdout); @@ -335,6 +347,7 @@ main( } } +checkoverall: check_overall(); amfree(line); @@ -607,6 +620,7 @@ check_disk( #endif "-c", "quit", NULL); + checkpid = checkpid; amfree(domain); aclose(nullfd); /*@ignore@*/ @@ -917,8 +931,8 @@ check_disk( access_type = "access"; #endif if(access_result == -1) { - err = vstrallocf(_("Could not access %s (%s): %s"), - qdevice, qdisk, strerror(errno)); + err = vstrallocf(_("Could not %s %s (%s): %s"), + access_type, qdevice, qdisk, strerror(errno)); } #ifdef CHECK_FOR_ACCESS_WITH_OPEN aclose(access_result); @@ -1206,3 +1220,84 @@ check_file_exist( return 1; } +static void +print_platform(void) +{ + struct stat stat_buf; + char *uname; + char *distro = NULL; + char *platform = NULL; + char line[1025]; + GPtrArray *argv_ptr; + + if (stat("/etc/lsb-release", &stat_buf) == 0) { + FILE *release = fopen("/etc/lsb-release", "r"); + distro = "Ubuntu"; + if (release) { + while (fgets(line, 1024, release)) { + if (strstr(line, "DESCRIPTION")) { + platform = strchr(line, '='); + if (platform) platform++; + } + } + fclose(release); + } + } else if (stat("/etc/redhat-release", &stat_buf) == 0) { + FILE *release = fopen("/etc/redhat-release", "r"); + distro = "RPM"; + if (release) { + char *result; + result = fgets(line, 1024, release); + if (result) { + platform = line; + } + fclose(release); + } + } else if (stat("/etc/debian_version", &stat_buf) == 0) { + FILE *release = fopen("/etc/debian_version", "r"); + distro = "Debian"; + if (release) { + char *result; + result = fgets(line, 1024, release); + if (result) { + platform = line; + } + fclose(release); + } + } else { + argv_ptr = g_ptr_array_new(); + + g_ptr_array_add(argv_ptr, UNAME_PATH); + g_ptr_array_add(argv_ptr, "-s"); + g_ptr_array_add(argv_ptr, NULL); + uname = get_first_line(argv_ptr); + if (uname) { + if (strncmp(uname, "SunOS", 5) == 0) { + FILE *release = fopen("/etc/release", "r"); + distro = "Solaris"; + if (release) { + char *result; + result = fgets(line, 1024, release); + if (result) { + platform = line; + } + fclose(release); + } + } + amfree(uname); + } + g_ptr_array_free(argv_ptr, TRUE); + } + + if (!distro) { + distro = "Unknown"; + } + if (!platform) { + platform = "Unknown"; + } + if (platform[strlen(platform) -1] == '\n') { + platform[strlen(platform) -1] = '\0'; + } + g_fprintf(stdout, "OK distro %s\n", distro); + g_fprintf(stdout, "OK platform %s\n", platform); +}