X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=client-src%2Fselfcheck.c;h=e044a6cd50fbc6febd1aad01a2f253d2bab5ea48;hb=refs%2Ftags%2Fupstream%2F3.3.1;hp=ac5ed538c8cd29a7964b1e5680943156564cdf00;hpb=fd48f3e498442f0cbff5f3606c7c403d0566150e;p=debian%2Famanda diff --git a/client-src/selfcheck.c b/client-src/selfcheck.c index ac5ed53..e044a6c 100644 --- a/client-src/selfcheck.c +++ b/client-src/selfcheck.c @@ -78,6 +78,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( @@ -96,6 +97,11 @@ main( GSList *errlist; 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 +127,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]); @@ -306,13 +314,16 @@ main( if (am_has_feature(g_options->features, fe_req_xml)) { char *errmsg = NULL; - dle_t *dles, *dle; + dle_t *dles, *dle, *dle_next; dles = amxml_parse_node_FILE(stdin, &errmsg); if (errmsg) { 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); @@ -329,8 +340,13 @@ main( run_client_scripts(EXECUTE_ON_POST_HOST_AMCHECK, g_options, dle, stdout); } + for (dle = dles; dle != NULL; dle = dle_next) { + dle_next = dle->next; + free_dle(dle); + } } +checkoverall: check_overall(); amfree(line); @@ -603,6 +619,7 @@ check_disk( #endif "-c", "quit", NULL); + checkpid = checkpid; amfree(domain); aclose(nullfd); /*@ignore@*/ @@ -913,8 +930,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); @@ -1201,3 +1218,85 @@ 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) { + char *result; + while ((result = 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); +}