Marc,

It's a bug that can only be seen with the bsd auth.
Attached patch fix it, can you try it?

Jean-Louis

Jean-Louis Martineau wrote:
Marc Muehlfeld wrote:
/bin/tar: This does not look like a tar archive
/bin/tar: Skipping to next header
/bin/tar: Archive contains obsolescent base-64 headers
/bin/tar: Read 7944 bytes from -
It has nothing to do with umlauts.

I suspect a bug in the handling of the bsd auth in amrecover.
Can you try the bsdtcp auth?
You need to setup an inetd/xinetd entry on the server and run amrecover with '-oauth=bsdtcp'

Jean-Louis


diff --git a/recover-src/extract_list.c b/recover-src/extract_list.c
index baac507..3f8cbae 100644
--- a/recover-src/extract_list.c
+++ b/recover-src/extract_list.c
@@ -96,6 +96,9 @@ static char *dump_device_name = NULL;
 static char *errstr;
 static char *amidxtaped_line = NULL;
 extern char *localhost;
+static char header_buf[32768];
+static int  header_size = 0;
+
 
 /* global pid storage for interrupt handler */
 pid_t extract_restore_child_pid = -1;
@@ -2106,6 +2109,7 @@ writer_intermediary(
     ctl_data.bsu           = NULL;
     ctl_data.bytes_read    = 0;
 
+    header_size = 0;
     security_stream_read(amidxtaped_streams[DATAFD].fd,
 			 read_amidxtaped_data, &ctl_data);
 
@@ -2687,7 +2691,18 @@ read_amidxtaped_data(
 	GPtrArray  *errarray;
 	g_option_t  g_options;
 	data_path_t data_path_set = DATA_PATH_AMANDA;
+	int to_move;
+
+	to_move = MIN(32768-header_size, size);
+	memcpy(header_buf+header_size, buf, to_move);
+	header_size += to_move;
 
+	if (header_size < 32768) {
+            security_stream_read(amidxtaped_streams[DATAFD].fd,
+				 read_amidxtaped_data, cookie);
+	    return;
+	}
+	assert (to_move == size);
 	/* parse the file header */
 	fh_init(&ctl_data->file);
 	parse_file_header(buf, &ctl_data->file, (size_t)size);

Reply via email to