static void amstar_selfcheck( application_argument_t *argument) { fprintf(stdout, "OK amstar\n"); if (argument->dle.disk) { char *qdisk = quote_string(argument->dle.disk); fprintf(stdout, "OK %s\n", qdisk); amfree(qdisk); } if (argument->dle.device) { char *qdevice = quote_string(argument->dle.device); fprintf(stdout, "OK %s\n", qdevice); amfree(qdevice); } if (star_directory) { char *qdirectory = quote_string(star_directory); fprintf(stdout, "OK %s\n", qdirectory); amfree(qdirectory); } if (argument->dle.include_list && argument->dle.include_list->nb_element >= 0) { fprintf(stdout, "ERROR include-list not supported for backup\n"); } if (!star_path) { fprintf(stdout, "ERROR STAR-PATH not defined\n"); } else { check_file(star_path, X_OK); } if (argument->calcsize) { char *calcsize = vstralloc(amlibexecdir, "/", "calcsize", NULL); check_file(calcsize, X_OK); check_suid(calcsize); amfree(calcsize); } { char *amandates_file; amandates_file = getconf_str(CNF_AMANDATES); check_file(amandates_file, R_OK|W_OK); } set_root_privs(1); if (argument->dle.device) { check_dir(argument->dle.device, R_OK); } set_root_privs(0); }
static void amgtar_selfcheck( application_argument_t *argument) { amgtar_build_exinclude(&argument->dle, 1, NULL, NULL, NULL, NULL); printf("OK amgtar\n"); if (gnutar_path) { check_file(gnutar_path, X_OK); } else { printf(_("ERROR [GNUTAR program not available]\n")); } set_root_privs(1); if (gnutar_listdir && strlen(gnutar_listdir) == 0) gnutar_listdir = NULL; if (gnutar_listdir) { check_dir(gnutar_listdir, R_OK|W_OK); } else { printf(_("ERROR [No GNUTAR-LISTDIR]\n")); } if (argument->dle.disk) { char *qdisk = quote_string(argument->dle.disk); fprintf(stdout, "OK %s\n", qdisk); amfree(qdisk); } if (gnutar_directory) { check_dir(gnutar_directory, R_OK); } else if (argument->dle.device) { check_dir(argument->dle.device, R_OK); } if (argument->calcsize) { char *calcsize = vstralloc(amlibexecdir, "/", "calcsize", versionsuffix(), NULL); check_file(calcsize, X_OK); check_suid(calcsize); amfree(calcsize); } set_root_privs(0); }
static void amstar_selfcheck( application_argument_t *argument) { fprintf(stdout, "OK amstar\n"); if (argument->dle.disk) { char *qdisk = quote_string(argument->dle.disk); fprintf(stdout, "OK %s\n", qdisk); amfree(qdisk); } if (argument->dle.device) { char *qdevice = quote_string(argument->dle.device); fprintf(stdout, "OK %s\n", qdevice); amfree(qdevice); } if (!star_path) { fprintf(stdout, "ERROR STAR-PATH not defined\n"); } else { check_file(star_path, X_OK); } if (argument->calcsize) { char *calcsize = vstralloc(amlibexecdir, "/", "calcsize", NULL); check_file(calcsize, X_OK); check_suid(calcsize); amfree(calcsize); } { char *amandates_file; amandates_file = getconf_str(CNF_AMANDATES); check_file(amandates_file, R_OK|W_OK); } }
static void amgtar_selfcheck( application_argument_t *argument) { if (argument->dle.disk) { char *qdisk = quote_string(argument->dle.disk); fprintf(stdout, "OK disk %s\n", qdisk); amfree(qdisk); } printf("OK amgtar version %s\n", VERSION); amgtar_build_exinclude(&argument->dle, 1, NULL, NULL, NULL, NULL); printf("OK amgtar\n"); if (gnutar_path) { if (check_file(gnutar_path, X_OK)) { char *gtar_version; GPtrArray *argv_ptr = g_ptr_array_new(); g_ptr_array_add(argv_ptr, gnutar_path); g_ptr_array_add(argv_ptr, "--version"); g_ptr_array_add(argv_ptr, NULL); gtar_version = get_first_line(argv_ptr); if (gtar_version) { char *gv; for (gv = gtar_version; *gv && !g_ascii_isdigit(*gv); gv++); printf("OK amgtar gtar-version %s\n", gv); } else { printf(_("ERROR [Can't get %s version]\n"), gnutar_path); } g_ptr_array_free(argv_ptr, TRUE); amfree(gtar_version); } } else { printf(_("ERROR [GNUTAR program not available]\n")); } if (gnutar_listdir && strlen(gnutar_listdir) == 0) gnutar_listdir = NULL; if (gnutar_listdir) { check_dir(gnutar_listdir, R_OK|W_OK); } else { printf(_("ERROR [No GNUTAR-LISTDIR]\n")); } set_root_privs(1); if (gnutar_directory) { check_dir(gnutar_directory, R_OK); } else if (argument->dle.device) { check_dir(argument->dle.device, R_OK); } if (argument->calcsize) { char *calcsize = g_strjoin(NULL, amlibexecdir, "/", "calcsize", NULL); check_file(calcsize, X_OK); check_suid(calcsize); amfree(calcsize); } set_root_privs(0); }
static void check_overall(void) { char *cmd; struct stat buf; int testfd; char *gnutar_list_dir; int need_amandates = 0; if( need_runtar ) { cmd = g_strjoin(NULL, amlibexecdir, "/", "runtar", NULL); check_file(cmd,X_OK); check_suid(cmd); amfree(cmd); } if( need_rundump ) { cmd = g_strjoin(NULL, amlibexecdir, "/", "rundump", NULL); check_file(cmd,X_OK); check_suid(cmd); amfree(cmd); } if( need_dump ) { #ifdef DUMP check_file(DUMP, X_OK); #else g_printf(_("ERROR [DUMP program not available]\n")); #endif } if( need_restore ) { #ifdef RESTORE check_file(RESTORE, X_OK); #else g_printf(_("ERROR [RESTORE program not available]\n")); #endif } if ( need_vdump ) { #ifdef VDUMP check_file(VDUMP, X_OK); #else g_printf(_("ERROR [VDUMP program not available]\n")); #endif } if ( need_vrestore ) { #ifdef VRESTORE check_file(VRESTORE, X_OK); #else g_printf(_("ERROR [VRESTORE program not available]\n")); #endif } if( need_xfsdump ) { #ifdef XFSDUMP check_file(XFSDUMP, F_OK); #else g_printf(_("ERROR [XFSDUMP program not available]\n")); #endif } if( need_xfsrestore ) { #ifdef XFSRESTORE check_file(XFSRESTORE, X_OK); #else g_printf(_("ERROR [XFSRESTORE program not available]\n")); #endif } if( need_vxdump ) { #ifdef VXDUMP check_file(VXDUMP, X_OK); #else g_printf(_("ERROR [VXDUMP program not available]\n")); #endif } if( need_vxrestore ) { #ifdef VXRESTORE check_file(VXRESTORE, X_OK); #else g_printf(_("ERROR [VXRESTORE program not available]\n")); #endif } if( need_gnutar ) { #ifdef GNUTAR check_file(GNUTAR, X_OK); #else g_printf(_("ERROR [GNUTAR program not available]\n")); #endif gnutar_list_dir = getconf_str(CNF_GNUTAR_LIST_DIR); if (strlen(gnutar_list_dir) == 0) gnutar_list_dir = NULL; if (gnutar_list_dir) { /* make sure our listed-incremental dir is ready */ check_dir(gnutar_list_dir, R_OK|W_OK); } else { /* no listed-incremental dir, so check that amandates is ready */ need_amandates = 1; } } if( need_calcsize ) { char *cmd; cmd = g_strjoin(NULL, amlibexecdir, "/", "calcsize", NULL); check_file(cmd, X_OK); amfree(cmd); /* calcsize uses amandates */ need_amandates = 1; } if (need_amandates) { char *amandates_file; amandates_file = getconf_str(CNF_AMANDATES); check_file(amandates_file, R_OK|W_OK); } if( need_samba ) { #ifdef SAMBA_CLIENT check_file(SAMBA_CLIENT, X_OK); #else g_printf(_("ERROR [SMBCLIENT program not available]\n")); #endif testfd = open("/etc/amandapass", R_OK); if (testfd >= 0) { if(fstat(testfd, &buf) == 0) { if ((buf.st_mode & 0x7) != 0) { g_printf(_("ERROR [/etc/amandapass is world readable!]\n")); } else { g_printf(_("OK [/etc/amandapass is readable, but not by all]\n")); } } else { g_printf(_("OK [unable to stat /etc/amandapass: %s]\n"), strerror(errno)); } aclose(testfd); } else { g_printf(_("ERROR [unable to open /etc/amandapass: %s]\n"), strerror(errno)); } } if (need_compress_path ) check_file(COMPRESS_PATH, X_OK); if (need_dump || need_xfsdump ) { if (check_file_exist("/etc/dumpdates")) { check_file("/etc/dumpdates", #ifdef USE_RUNDUMP F_OK #else R_OK|W_OK #endif ); } else { #ifndef USE_RUNDUMP if (access("/etc", R_OK|W_OK) == -1) { g_printf(_("ERROR [dump will not be able to create the /etc/dumpdates file: %s]\n"), strerror(errno)); } #endif } } if (need_vdump) { if (check_file_exist("/etc/vdumpdates")) { check_file("/etc/vdumpdates", F_OK); } } if (need_global_check) { check_access("/dev/null", R_OK|W_OK); check_space(AMANDA_TMPDIR, (off_t)64); /* for amandad i/o */ #ifdef AMANDA_DBGDIR check_space(AMANDA_DBGDIR, (off_t)64); /* for amandad i/o */ #endif check_space("/etc", (off_t)64); /* for /etc/dumpdates writing */ } }