rundump.c (amanda-tag-community-3.5.2) | : | rundump.c (amanda-tag-community-3.5.3) | ||
---|---|---|---|---|
skipping to change at line 68 | skipping to change at line 68 | |||
# endif | # endif | |||
#endif | #endif | |||
int | int | |||
main( | main( | |||
int argc, | int argc, | |||
char ** argv) | char ** argv) | |||
{ | { | |||
#ifndef ERRMSG | #ifndef ERRMSG | |||
char *dump_program; | char *dump_program; | |||
int i; | int i, j; | |||
char *e; | char *e; | |||
char *cmdline; | char *cmdline; | |||
GPtrArray *array = g_ptr_array_new(); | GPtrArray *array = g_ptr_array_new(); | |||
gchar **strings; | gchar **strings; | |||
char **env; | char **env; | |||
#endif /* ERRMSG */ | #endif /* ERRMSG */ | |||
glib_init(); | glib_init(); | |||
if (argc > 1 && argv[1] && g_str_equal(argv[1], "--version")) { | if (argc > 1 && argv[1] && g_str_equal(argv[1], "--version")) { | |||
skipping to change at line 141 | skipping to change at line 141 | |||
argv++; | argv++; | |||
dbprintf(_("config: %s\n"), argv[0]); | dbprintf(_("config: %s\n"), argv[0]); | |||
if (!g_str_equal(argv[0], "NOCONFIG")) | if (!g_str_equal(argv[0], "NOCONFIG")) | |||
dbrename(argv[0], DBG_SUBDIR_CLIENT); | dbrename(argv[0], DBG_SUBDIR_CLIENT); | |||
argc--; | argc--; | |||
argv++; | argv++; | |||
#ifdef XFSDUMP | #ifdef XFSDUMP | |||
if (g_str_equal(argv[0], "xfsdump")) | if (g_str_equal(argv[0], "xfsdump")) { | |||
dump_program = XFSDUMP; | dump_program = XFSDUMP; | |||
else /* strcmp(argv[0], "xfsdump") != 0 */ | validate_xfsdump_options(argc, argv); | |||
} else /* strcmp(argv[0], "xfsdump") != 0 */ | ||||
#endif | #endif | |||
#ifdef VXDUMP | #ifdef VXDUMP | |||
if (g_str_equal(argv[0], "vxdump")) | if (g_str_equal(argv[0], "vxdump")) | |||
dump_program = VXDUMP; | dump_program = VXDUMP; | |||
else /* strcmp(argv[0], "vxdump") != 0 */ | else /* strcmp(argv[0], "vxdump") != 0 */ | |||
#endif | #endif | |||
#ifdef VDUMP | #ifdef VDUMP | |||
if (g_str_equal(argv[0], "vdump")) | if (g_str_equal(argv[0], "vdump")) | |||
dump_program = VDUMP; | dump_program = VDUMP; | |||
else /* strcmp(argv[0], "vdump") != 0 */ | else /* strcmp(argv[0], "vdump") != 0 */ | |||
#endif | #endif | |||
{ | ||||
#if defined(DUMP) | #if defined(DUMP) | |||
dump_program = DUMP; | dump_program = DUMP; | |||
validate_dump_option(argc, argv); | validate_dump_option(argc, argv); | |||
#else | #else | |||
# if defined(XFSDUMP) | # if defined(XFSDUMP) | |||
dump_program = XFSDUMP; | dump_program = XFSDUMP; | |||
validate_xfsdump_options(argc, argv); | validate_xfsdump_options(argc, argv); | |||
# else | # else | |||
# if defined(VXDUMP) | # if defined(VXDUMP) | |||
dump_program = VXDUMP; | dump_program = VXDUMP; | |||
# else | # else | |||
dump_program = "dump"; | dump_program = "dump"; | |||
validate_dump_option(argc, argv); | validate_dump_option(argc, argv); | |||
# endif | # endif | |||
# endif | # endif | |||
#endif | #endif | |||
} | ||||
/* | /* | |||
* Build the array | * Build the array | |||
*/ | */ | |||
g_ptr_array_add(array, g_strdup(dump_program)); | g_ptr_array_add(array, g_strdup(dump_program)); | |||
for (i = 1; argv[i]; i++) { | for (i = 1; argv[i]; i++) { | |||
g_ptr_array_add(array, quote_string(argv[i])); | g_ptr_array_add(array, quote_string(argv[i])); | |||
} | } | |||
g_ptr_array_add(array, NULL); | g_ptr_array_add(array, NULL); | |||
strings = (gchar **)g_ptr_array_free(array, FALSE); | strings = (gchar **)g_ptr_array_free(array, FALSE); | |||
cmdline = g_strjoinv(" ", strings); | cmdline = g_strjoinv(" ", strings); | |||
g_strfreev(strings); | g_strfreev(strings); | |||
dbprintf(_("running: %s\n"), cmdline); | dbprintf(_("running: %s\n"), cmdline); | |||
amfree(cmdline); | amfree(cmdline); | |||
env = safe_env(); | env = safe_env(); | |||
//Filter or Discard RSH Environmental variable | ||||
int env_count = 0; | ||||
for (i = 0; env[i] != NULL; i++){ | ||||
env_count++; | ||||
} | ||||
for (i = 0; i < env_count; i++){ | ||||
if (strncmp(env[i], "RSH=", 4) == 0){ | ||||
// Remove RSH | ||||
g_free(env[i]); | ||||
// move array elements one step left - which are after "RSH" | ||||
for (j = i; j < env_count; j++){ | ||||
env[j] = env[j + 1]; | ||||
} | ||||
//decrease the variable count | ||||
env[env_count-1] = NULL; | ||||
break; | ||||
} | ||||
} | ||||
execve(dump_program, argv, env); | execve(dump_program, argv, env); | |||
free_env(env); | free_env(env); | |||
e = strerror(errno); | e = strerror(errno); | |||
dbprintf(_("failed (%s)\n"), e); | dbprintf(_("failed (%s)\n"), e); | |||
dbclose(); | dbclose(); | |||
g_fprintf(stderr, _("rundump: could not exec %s: %s\n"), dump_program, e); | g_fprintf(stderr, _("rundump: could not exec %s: %s\n"), dump_program, e); | |||
return 1; | return 1; | |||
#endif /* } */ | #endif /* } */ | |||
skipping to change at line 282 | skipping to change at line 303 | |||
{ | { | |||
break; | break; | |||
} | } | |||
default: | default: | |||
error ("error [%s invalid option: %c]\n", get_pna me(), c); | error ("error [%s invalid option: %c]\n", get_pna me(), c); | |||
break; | break; | |||
} | } | |||
numargs--; | numargs--; | |||
} | } | |||
} | } | |||
void validate_xfsdump_options(int argc, char ** argv) | void validate_xfsdump_options(int argc, char ** argv) | |||
{ | { | |||
int c; | int c; | |||
int numargs = argc; | int numargs = argc; | |||
while (numargs > 0) | while (numargs > 0) | |||
{ | { | |||
c = getopt(argc, argv, "ab:d:ef:l:mop:qs:t:v:z:AB:DFI:JL:M:RT"); | c = getopt(argc, argv, "ab:d:ef:l:mop:qs:t:v:z:AB:DFI:JL:M:RT"); | |||
switch (c) { | switch (c) { | |||
case -1: | case -1: | |||
optind++; | optind++; | |||
End of changes. 7 change blocks. | ||||
3 lines changed or deleted | 25 lines changed or added |