Blame SOURCES/amanda-3.5.2-CVE-2022-37704-fixup.patch

427804
diff --git a/client-src/rundump.c b/client-src/rundump.c
427804
index bba569984..85962d11c 100644
427804
--- a/client-src/rundump.c
427804
+++ b/client-src/rundump.c
427804
@@ -43,6 +43,16 @@ int main(int argc, char **argv);
427804
 static void validate_dump_option(int argc, char ** argv);
427804
 static void validate_xfsdump_options(int argc, char ** argv);
427804
 
427804
+/*
427804
+ * Has USE_RUNDUMP been explicitly requsted?
427804
+ * If not, we will not use rundump for DUMP,
427804
+ * although we sill may need to use it for
427804
+ * VDUMP or XFSDUMP
427804
+ */
427804
+#if defined(USE_RUNDUMP)
427804
+#  define USE_RUNDUMP_FOR_DUMP
427804
+#endif
427804
+
427804
 #if defined(VDUMP) || defined(XFSDUMP)
427804
 #  undef USE_RUNDUMP
427804
 #  define USE_RUNDUMP
427804
@@ -138,9 +148,10 @@ main(
427804
 
427804
 #ifdef XFSDUMP
427804
 
427804
-    if (g_str_equal(argv[0], "xfsdump"))
427804
+    if (g_str_equal(argv[0], "xfsdump")) {
427804
         dump_program = XFSDUMP;
427804
-    else /* strcmp(argv[0], "xfsdump") != 0 */
427804
+        validate_xfsdump_options(argc, argv);
427804
+    } else /* strcmp(argv[0], "xfsdump") != 0 */
427804
 
427804
 #endif
427804
 
427804
@@ -160,9 +171,14 @@ main(
427804
 
427804
 #endif
427804
 
427804
+      {
427804
 #if defined(DUMP)
427804
+# if defined(USE_RUNDUMP_FOR_DUMP)
427804
         dump_program = DUMP;
427804
         validate_dump_option(argc, argv);
427804
+# else
427804
+        error("error [%s not running %s : run it directly]\n", get_pname(), DUMP);
427804
+# endif
427804
 #else
427804
 # if defined(XFSDUMP)
427804
         dump_program = XFSDUMP;
427804
@@ -176,6 +192,7 @@ main(
427804
 #  endif
427804
 # endif
427804
 #endif
427804
+      }
427804
 
427804
 
427804
     /*
427804
@@ -197,6 +214,24 @@ main(
427804
     amfree(cmdline);
427804
 
427804
     env = safe_env();
427804
+    //Filter or Discard RSH Environmental variable
427804
+    int env_count = 0;
427804
+    for (int i = 0; env[i] != NULL; i++){
427804
+        env_count++;
427804
+    }
427804
+    for (int i = 0; i < env_count; i++){
427804
+        if (strncmp(env[i], "RSH=", 4) == 0){
427804
+            // Remove RSH
427804
+            g_free(env[i]);
427804
+            // move array elements one step left - which are after "RSH"
427804
+            for (int j = i; j < env_count; j++){
427804
+                env[j] = env[j + 1];
427804
+            }
427804
+            //decrease the variable count
427804
+            env[env_count-1] = NULL;
427804
+            break;
427804
+        }
427804
+    }
427804
     execve(dump_program, argv, env);
427804
     free_env(env);
427804
 
427804
diff --git a/client-src/runtar.c b/client-src/runtar.c
427804
index 499c7dfec..880068bc4 100644
427804
--- a/client-src/runtar.c
427804
+++ b/client-src/runtar.c
427804
@@ -191,9 +191,13 @@ main(
427804
 		g_str_has_prefix(argv[i],"--newer") ||
427804
 		g_str_has_prefix(argv[i],"--exclude-from") ||
427804
 		g_str_has_prefix(argv[i],"--files-from")) {
427804
-		good_option++;
427804
+		if (strchr(argv[i], '=')) {
427804
+		    good_option++;
427804
+		} else {
427804
+		    /* Accept theses options with the following argument */
427804
+		    good_option += 2;
427804
+		}
427804
 	    } else if (argv[i][0] != '-') {
427804
-		/* argument values are accounted for here */
427804
 		good_option++;
427804
 	    }
427804
 	}