From 3da91b786ef87bd13ae1210a1bf671e2209d9c1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnther=20Deschner?= Date: Fri, 26 Mar 2010 13:17:49 +0100 Subject: [PATCH] s3-printing: avoid mixing cups backend code with nt_printing code in cups_pull_comment_location. Guenther --- source3/include/proto.h | 5 ++++- source3/printing/nt_printing.c | 26 +++++++++++++++++++++---- source3/printing/print_cups.c | 35 ++++++++++++++-------------------- 3 files changed, 40 insertions(+), 26 deletions(-) diff --git a/source3/include/proto.h b/source3/include/proto.h index c211501ac54..ecb29618aee 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -4897,7 +4897,10 @@ bool aix_cache_reload(void); /* The following definitions come from printing/print_cups.c */ bool cups_cache_reload(void); -bool cups_pull_comment_location(NT_PRINTER_INFO_LEVEL_2 *printer); +bool cups_pull_comment_location(TALLOC_CTX *mem_ctx, + const char *printername, + char **comment, + char **location); /* The following definitions come from printing/print_generic.c */ diff --git a/source3/printing/nt_printing.c b/source3/printing/nt_printing.c index b29000a2d81..5096ca0599b 100644 --- a/source3/printing/nt_printing.c +++ b/source3/printing/nt_printing.c @@ -3831,8 +3831,17 @@ static WERROR get_a_printer_2_default(NT_PRINTER_INFO_LEVEL_2 *info, if (get_loc_com && (enum printing_types)lp_printing(snum) == PRINT_CUPS ) { /* Pull the location and comment strings from cups if we don't already have one */ - if ( !strlen(info->location) || !strlen(info->comment) ) - cups_pull_comment_location( info ); + if ( !strlen(info->location) || !strlen(info->comment) ) { + char *comment = NULL; + char *location = NULL; + if (cups_pull_comment_location(info, info->sharename, + &comment, &location)) { + strlcpy(info->comment, comment, sizeof(info->comment)); + fstrcpy(info->location, location); + TALLOC_FREE(comment); + TALLOC_FREE(location); + } + } } #endif @@ -3953,8 +3962,17 @@ static WERROR get_a_printer_2(NT_PRINTER_INFO_LEVEL_2 *info, if (get_loc_com && (enum printing_types)lp_printing(snum) == PRINT_CUPS ) { /* Pull the location and comment strings from cups if we don't already have one */ - if ( !strlen(info->location) || !strlen(info->comment) ) - cups_pull_comment_location( info ); + if ( !strlen(info->location) || !strlen(info->comment) ) { + char *location = NULL; + comment = NULL; + if (cups_pull_comment_location(info, info->sharename, + &comment, &location)) { + strlcpy(info->comment, comment, sizeof(info->comment)); + fstrcpy(info->location, location); + TALLOC_FREE(comment); + TALLOC_FREE(location); + } + } } #endif diff --git a/source3/printing/print_cups.c b/source3/printing/print_cups.c index 5c023edf492..6735f14f703 100644 --- a/source3/printing/print_cups.c +++ b/source3/printing/print_cups.c @@ -1631,7 +1631,10 @@ struct printif cups_printif = cups_job_submit, }; -bool cups_pull_comment_location(NT_PRINTER_INFO_LEVEL_2 *printer) +bool cups_pull_comment_location(TALLOC_CTX *mem_ctx, + const char *printername, + char **comment, + char **location) { TALLOC_CTX *frame = talloc_stackframe(); http_t *http = NULL; /* HTTP connection to server */ @@ -1652,7 +1655,7 @@ bool cups_pull_comment_location(NT_PRINTER_INFO_LEVEL_2 *printer) bool ret = False; size_t size; - DEBUG(5, ("pulling %s location\n", printer->sharename)); + DEBUG(5, ("pulling %s location\n", printername)); /* * Make sure we don't ask for passwords... @@ -1691,7 +1694,7 @@ bool cups_pull_comment_location(NT_PRINTER_INFO_LEVEL_2 *printer) if (server) { goto out; } - if (!push_utf8_talloc(frame, &sharename, printer->sharename, &size)) { + if (!push_utf8_talloc(frame, &sharename, printername, &size)) { goto out; } slprintf(uri, sizeof(uri) - 1, "ipp://%s/printers/%s", @@ -1743,40 +1746,30 @@ bool cups_pull_comment_location(NT_PRINTER_INFO_LEVEL_2 *printer) /* Grab the comment if we don't have one */ if ( (strcmp(attr->name, "printer-info") == 0) - && (attr->value_tag == IPP_TAG_TEXT) - && !strlen(printer->comment) ) + && (attr->value_tag == IPP_TAG_TEXT)) { - char *comment = NULL; - if (!pull_utf8_talloc(frame, - &comment, + if (!pull_utf8_talloc(mem_ctx, + comment, attr->values[0].string.text, &size)) { goto out; } DEBUG(5,("cups_pull_comment_location: Using cups comment: %s\n", - comment)); - strlcpy(printer->comment, - comment, - sizeof(printer->comment)); + *comment)); } /* Grab the location if we don't have one */ if ( (strcmp(attr->name, "printer-location") == 0) - && (attr->value_tag == IPP_TAG_TEXT) - && !strlen(printer->location) ) + && (attr->value_tag == IPP_TAG_TEXT)) { - char *location = NULL; - if (!pull_utf8_talloc(frame, - &location, + if (!pull_utf8_talloc(mem_ctx, + location, attr->values[0].string.text, &size)) { goto out; } DEBUG(5,("cups_pull_comment_location: Using cups location: %s\n", - location)); - strlcpy(printer->location, - location, - sizeof(printer->location)); + *location)); } attr = attr->next;