1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-22 13:34:15 +03:00

s3-printing: avoid mixing cups backend code with nt_printing code in cups_pull_comment_location.

Guenther
This commit is contained in:
Günther Deschner 2010-03-26 13:17:49 +01:00
parent 772839640e
commit 3da91b786e
3 changed files with 40 additions and 26 deletions

View File

@ -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 */

View File

@ -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

View File

@ -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;