From 8846887a55b0c97a1639fc6ecb228941cf16b8f2 Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Thu, 31 Oct 2019 12:46:38 +0100 Subject: s3:printing: Fix %J substition print_run_command() uses lp_print_command() which internally performs basic substition by calling talloc_sub_basic(). As a result. any of the variables in the "basic set", including "%J" are already substituted. To prevent the unwanted subtitution, we declare all affected configuration options as const, which disabled the basic substition. As a result print_run_command() can run manual substitution on all characters, including %J, in the variadic argument list *before* calling lp_string() to run basic substition which we had disabled before with the const. BUG: https://bugzilla.samba.org/show_bug.cgi?id=13745 Signed-off-by: Ralph Boehme Reviewed-by: Andreas Schneider Autobuild-User(master): Andreas Schneider Autobuild-Date(master): Thu Nov 7 16:01:21 UTC 2019 on sn-devel-184 --- source3/printing/printing.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'source3/printing/printing.c') diff --git a/source3/printing/printing.c b/source3/printing/printing.c index c6bf6ec69dd..0f4db52e011 100644 --- a/source3/printing/printing.c +++ b/source3/printing/printing.c @@ -1717,7 +1717,7 @@ static void print_queue_update(struct messaging_context *msg_ctx, /* don't strip out characters like '$' from the printername */ lpqcommand = talloc_string_sub2(ctx, - lp_lpq_command(talloc_tos(), snum), + lp_lpq_command(snum), "%p", lp_printername(talloc_tos(), snum), false, false, false); @@ -1737,7 +1737,7 @@ static void print_queue_update(struct messaging_context *msg_ctx, } lprmcommand = talloc_string_sub2(ctx, - lp_lprm_command(talloc_tos(), snum), + lp_lprm_command(snum), "%p", lp_printername(talloc_tos(), snum), false, false, false); @@ -2199,7 +2199,7 @@ static bool print_job_delete1(struct tevent_context *ev, { result = (*(current_printif->job_delete))( lp_printername(talloc_tos(), snum), - lp_lprm_command(talloc_tos(), snum), + lp_lprm_command(snum), pjob); /* Delete the tdb entry if the delete succeeded or the job hasn't @@ -3027,7 +3027,7 @@ NTSTATUS print_job_end(struct messaging_context *msg_ctx, int snum, /* don't strip out characters like '$' from the printername */ lpq_cmd = talloc_string_sub2(tmp_ctx, - lp_lpq_command(talloc_tos(), snum), + lp_lpq_command(snum), "%p", lp_printername(talloc_tos(), snum), false, false, false); -- cgit v1.2.1