- case F_DUMPFILE : if( file->type == F_DUMPFILE) {
- ap_snprintf(buffer, buflen,
- "AMANDA: FILE %s %s %s lev %d comp %s program %s\n",
- file->datestamp, file->name, file->disk,
- file->dumplevel, file->comp_suffix,
- file->program);
- }
- else if( file->type == F_CONT_DUMPFILE) {
- ap_snprintf(buffer, buflen,
- "AMANDA: CONT_FILE %s %s %s lev %d comp %s program %s\n",
- file->datestamp, file->name, file->disk,
- file->dumplevel, file->comp_suffix,
- file->program);
- }
- buffer[buflen-1] = '\0';
- if(strlen(file->cont_filename) != 0) {
- line = newvstralloc(line, "CONT_FILENAME=",
- file->cont_filename, "\n", NULL);
- strncat(buffer,line,buflen-strlen(buffer));
- }
- if(file->is_partial != 0) {
- strncat(buffer,"PARTIAL=YES\n",buflen-strlen(buffer));
- }
- strncat(buffer,
- "To restore, position tape at start of file and run:\n",
- buflen-strlen(buffer));
- ap_snprintf(number, sizeof(number),
- "%ld", file->blocksize / 1024);
- line = newvstralloc(line, "\t",
- "dd",
- " if=<tape>",
- " bs=", number, "k",
- " skip=1",
- " |", file->uncompress_cmd,
- " ", file->recover_cmd,
- "\n",
- "\014\n", /* ?? */
- NULL);
- strncat(buffer, line, buflen-strlen(buffer));
- amfree(line);
- buffer[buflen-1] = '\0';
- break;
- case F_TAPEEND : ap_snprintf(buffer, buflen,
- "AMANDA: TAPEEND DATE %s\n\014\n",
- file->datestamp);
- break;
- case F_UNKNOWN : break;
- case F_WEIRD : break;
+ case F_DUMPFILE :
+ validate_name(file->name);
+ validate_datestamp(file->datestamp);
+ qname = quote_string(file->disk);
+ n = snprintf(buffer, buflen,
+ "AMANDA: %s %s %s %s %s lev %d comp %s program %s",
+ filetype2str(file->type),
+ file->datestamp, file->name, qname,
+ split_data,
+ file->dumplevel, file->comp_suffix, file->program);
+ amfree(qname);
+ if ( n ) {
+ buffer += n;
+ buflen -= n;
+ n = 0;
+ }
+
+ if (strcmp(file->encrypt_suffix, "enc") == 0) { /* only output crypt if it's enabled */
+ n = snprintf(buffer, buflen, " crypt %s", file->encrypt_suffix);
+ }
+ if ( n ) {
+ buffer += n;
+ buflen -= n;
+ n = 0;
+ }
+
+ if (*file->srvcompprog) {
+ n = snprintf(buffer, buflen, " server_custom_compress %s", file->srvcompprog);
+ } else if (*file->clntcompprog) {
+ n = snprintf(buffer, buflen, " client_custom_compress %s", file->clntcompprog);
+ }
+
+ if ( n ) {
+ buffer += n;
+ buflen -= n;
+ n = 0;
+ }
+
+ if (*file->srv_encrypt) {
+ n = snprintf(buffer, buflen, " server_encrypt %s", file->srv_encrypt);
+ } else if (*file->clnt_encrypt) {
+ n = snprintf(buffer, buflen, " client_encrypt %s", file->clnt_encrypt);
+ }
+
+ if ( n ) {
+ buffer += n;
+ buflen -= n;
+ n = 0;
+ }
+
+ if (*file->srv_decrypt_opt) {
+ n = snprintf(buffer, buflen, " server_decrypt_option %s", file->srv_decrypt_opt);
+ } else if (*file->clnt_decrypt_opt) {
+ n = snprintf(buffer, buflen, " client_decrypt_option %s", file->clnt_decrypt_opt);
+ }
+
+ if ( n ) {
+ buffer += n;
+ buflen -= n;
+ n = 0;
+ }
+
+ n = snprintf(buffer, buflen, "\n");
+ buffer += n;
+ buflen -= n;
+
+ if (file->cont_filename[0] != '\0') {
+ n = snprintf(buffer, buflen, "CONT_FILENAME=%s\n",
+ file->cont_filename);
+ buffer += n;
+ buflen -= n;
+ }
+ if (file->is_partial != 0) {
+ n = snprintf(buffer, buflen, "PARTIAL=YES\n");
+ buffer += n;
+ buflen -= n;
+ }
+
+ n = snprintf(buffer, buflen,
+ "To restore, position tape at start of file and run:\n");
+ buffer += n;
+ buflen -= n;
+
+ /* \014 == ^L == form feed */
+ n = snprintf(buffer, buflen,
+ "\tdd if=<tape> bs=" SIZE_T_FMT "k skip=1 | %s %s %s\n\014\n",
+ (SIZE_T_FMT_TYPE)file->blocksize / 1024, file->decrypt_cmd,
+ file->uncompress_cmd, file->recover_cmd);
+ break;
+
+ case F_TAPEEND:
+ validate_datestamp(file->datestamp);
+ snprintf(buffer, buflen, "AMANDA: TAPEEND DATE %s\n\014\n",
+ file->datestamp);
+ break;
+
+ case F_UNKNOWN:
+ case F_EMPTY:
+ case F_WEIRD:
+ default:
+ error("Invalid header type: %d (%s)",
+ file->type, filetype2str(file->type));
+ /*NOTREACHED*/