From 9c7bbafe795f079c7f31efec9334233efd6f9713 Mon Sep 17 00:00:00 2001
From: Piotr Pawliczek <pawliczek@google.com>
Date: Tue, 16 Oct 2018 20:26:03 -0700
Subject: [PATCH] Patch forcing CUPS to dump file with printing pipeline being
 executed to /tmp folder

Change-Id: I5f189e9a95f97a9da3dd5193195b0d879fae3eb8
---
 my_log.h        | 142 ++++++++++++++++++++++++++++++++++++++++++++++++
 scheduler/job.c |   7 +++
 2 files changed, 149 insertions(+)
 create mode 100644 my_log.h

diff --git a/my_log.h b/my_log.h
new file mode 100644
index 000000000..c33a2488b
--- /dev/null
+++ b/my_log.h
@@ -0,0 +1,142 @@
+#ifndef CUPS_MY_LOG_H_
+#define CUPS_MY_LOG_H_
+
+#include <stdio.h>
+#include <string.h>
+
+
+extern int cupsdLogMessage(int, const char *, ...);
+
+
+struct my_log_buffer_type
+{
+	size_t entries_count;
+	size_t buffer_size;
+	char * buffer;
+} my_log_buffer = { 0, 0, NULL };
+
+
+static void my_log_write_str(char const * const p)
+{
+	size_t len_str = strlen(p);
+	size_t len_buf;
+	char * new_buf;
+	if (my_log_buffer.buffer == NULL) {
+		return;
+	}
+	len_buf = strlen(my_log_buffer.buffer);
+	while (len_str + len_buf >= my_log_buffer.buffer_size) {
+		new_buf = malloc(2*my_log_buffer.buffer_size);
+		if (new_buf == NULL) {
+			return;
+		}
+		strcpy(new_buf, my_log_buffer.buffer);
+		free(my_log_buffer.buffer);
+		my_log_buffer.buffer = new_buf;
+		my_log_buffer.buffer_size *= 2;
+	}
+	strcpy(my_log_buffer.buffer + len_buf, p);
+}
+
+
+static void my_log_init()
+{
+	size_t const s = 1024;
+	my_log_buffer.entries_count = 0;
+	if (my_log_buffer.buffer != NULL) {
+		my_log_buffer.buffer[0] = '\0';
+		return;
+	}
+	my_log_buffer.buffer = malloc(s);
+	if (my_log_buffer.buffer != NULL) {
+		my_log_buffer.buffer_size = s;
+		my_log_buffer.buffer[0] = '\0';
+		my_log_write_str("#!/bin/bash\n");
+	}
+}
+
+
+static void my_log_add_entry(const char* cmd, char* const* argv, char* const* envp)
+{
+	int i;
+	if (cmd == NULL) return;
+	size_t const entry = ++(my_log_buffer.entries_count);
+	char filename_out[] = "X.doc";
+	char filename_err[] = "X.err";
+	if (envp != NULL) {
+		for (i = 0; envp[i] != NULL; ++i) {
+			my_log_write_str("export ");
+			if (strncmp(envp[i],"PPD=",4) == 0) {
+				my_log_write_str("PPD=${TEST_PPD}");
+			} else {
+				my_log_write_str(envp[i]);
+			}
+			my_log_write_str("\n");
+		}
+	}
+	if (argv != NULL && argv[0] != NULL) {
+		my_log_write_str("(exec -a '");
+		my_log_write_str(argv[0]);
+		my_log_write_str("' ");
+		my_log_write_str(cmd);
+		my_log_write_str(" ");
+		for (i = 1; argv[i] != NULL; ++i) {
+			if (i == 6 && entry == 1) {
+				my_log_write_str(" ${TEST_DOCUMENT}");
+			} else {
+				my_log_write_str(" '");
+				my_log_write_str(argv[i]);
+				my_log_write_str("'");
+			}
+		}
+		my_log_write_str(")");
+	} else {
+		my_log_write_str(cmd);
+	}
+	if (entry > 1) {
+		filename_out[0] = '0' + ((entry-1)%10);
+		my_log_write_str(" <");
+		my_log_write_str(filename_out);
+	}
+	filename_out[0] = filename_err[0] = '0' + (entry%10);
+	my_log_write_str(" 1>");
+	my_log_write_str(filename_out);
+	my_log_write_str(" 2>");
+	my_log_write_str(filename_err);
+	my_log_write_str("\n");
+}
+
+
+static void my_log_dump_to_file(const char* job_name)
+{
+	size_t len;
+	char path[] = "/tmp/cups_12345678901234567890123456789012";
+	FILE * file;
+	if (my_log_buffer.buffer == NULL) {
+		cupsdLogMessage(CUPSD_LOG_WARN,"my_log: my_log_buffer.buffer == NULL");
+		return;
+	}
+	if (job_name == NULL) {
+		cupsdLogMessage(CUPSD_LOG_WARN,"my_log: job_name == NULL");
+		return;
+	}
+	if (strlen(job_name) > 32) {
+		cupsdLogMessage(CUPSD_LOG_WARN,"my_log: strlen(job_name) > 32");
+		return;
+	}
+	strcpy(path+10, job_name);
+	file = fopen(path, "wb");
+	if (file == NULL) {
+		cupsdLogMessage(CUPSD_LOG_WARN,"my_log: fopen failed");
+		return;
+	}
+	len = fwrite(my_log_buffer.buffer, strlen(my_log_buffer.buffer), 1, file);
+	if (len != 1) {
+		cupsdLogMessage(CUPSD_LOG_WARN,"my_log: fwrite failed");
+	}
+	if (fclose(file) != 0) {
+		cupsdLogMessage(CUPSD_LOG_WARN,"my_log: fclose failed");
+	}
+}
+
+#endif /* CUPS_MY_LOG_H_ */
diff --git a/scheduler/job.c b/scheduler/job.c
index ceac27eba..0ed5eb79c 100644
--- a/scheduler/job.c
+++ b/scheduler/job.c
@@ -29,6 +29,8 @@
 #endif /* __APPLE__ */
 
 
+#include "../my_log.h"
+
 /*
  * Design Notes for Job Management
  * -------------------------------
@@ -555,6 +557,8 @@ cupsdContinueJob(cupsd_job_t *job)	/* I - Job */
   cupsdLogMessage(CUPSD_LOG_DEBUG2,
                   "cupsdContinueJob(job=%p(%d)): current_file=%d, num_files=%d",
 	          job, job->id, job->current_file, job->num_files);
+  my_log_init();
+  cupsdLogMessage(CUPSD_LOG_WARN, "job->current_file=%s", job->current_file);
 
  /*
   * Figure out what filters are required to convert from
@@ -1205,6 +1209,7 @@ cupsdContinueJob(cupsd_job_t *job)	/* I - Job */
       filterfds[slot][1] = job->print_pipes[1];
     }
 
+    my_log_add_entry(command, argv, envp);
     pid = cupsdStartProcess(command, argv, envp, filterfds[!slot][0],
                             filterfds[slot][1], job->status_pipes[1],
 		            job->back_pipes[0], job->side_pipes[0], 0,
@@ -1331,6 +1336,7 @@ cupsdContinueJob(cupsd_job_t *job)	/* I - Job */
   cupsdAddEvent(CUPSD_EVENT_JOB_STATE, job->printer, job, "Job #%d started.",
                 job->id);
 
+  my_log_dump_to_file(title);
   return;
 
 
@@ -1341,6 +1347,7 @@ cupsdContinueJob(cupsd_job_t *job)	/* I - Job */
 
   abort_job:
 
+  my_log_dump_to_file(title);
   FilterLevel -= job->cost;
   job->cost = 0;
 
-- 
2.19.1.331.ge82ca0e54c-goog

