The Samba-Bugzilla – Attachment 905 Details for
Bug 2270
Potential mem leak in Samba print_cups code
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Proposed patch.
look (text/plain), 23.14 KB, created by
Jeremy Allison
on 2005-01-20 14:26:35 UTC
(
hide
)
Description:
Proposed patch.
Filename:
MIME Type:
Creator:
Jeremy Allison
Created:
2005-01-20 14:26:35 UTC
Size:
23.14 KB
patch
obsolete
>Index: printing/print_cups.c >=================================================================== >--- printing/print_cups.c (revision 4876) >+++ printing/print_cups.c (working copy) >@@ -33,11 +33,11 @@ > static const char * /* O - Password or NULL */ > cups_passwd_cb(const char *prompt) /* I - Prompt */ > { >- /* >- * Always return NULL to indicate that no password is available... >- */ >+ /* >+ * Always return NULL to indicate that no password is available... >+ */ > >- return (NULL); >+ return (NULL); > } > > static const char *cups_server(void) >@@ -54,11 +54,11 @@ > > BOOL cups_cache_reload(void) > { >- http_t *http; /* HTTP connection to server */ >- ipp_t *request, /* IPP Request */ >- *response; /* IPP Response */ >+ http_t *http = NULL; /* HTTP connection to server */ >+ ipp_t *request = NULL, /* IPP Request */ >+ *response = NULL; /* IPP Response */ > ipp_attribute_t *attr; /* Current attribute */ >- cups_lang_t *language; /* Default language */ >+ cups_lang_t *language = NULL; /* Default language */ > char *name, /* printer-name attribute */ > *info; /* printer-info attribute */ > static const char *requested[] =/* Requested attributes */ >@@ -66,8 +66,8 @@ > "printer-name", > "printer-info" > }; >+ BOOL ret = False; > >- > DEBUG(5, ("reloading cups printcap cache\n")); > > /* >@@ -80,11 +80,10 @@ > * Try to connect to the server... > */ > >- if ((http = httpConnect(cups_server(), ippPort())) == NULL) >- { >+ if ((http = httpConnect(cups_server(), ippPort())) == NULL) { > DEBUG(0,("Unable to connect to CUPS server %s - %s\n", > cups_server(), strerror(errno))); >- return False; >+ goto out; > } > > /* >@@ -118,16 +117,13 @@ > * Do the request and get back a response... > */ > >- if ((response = cupsDoRequest(http, request, "/")) == NULL) >- { >+ if ((response = cupsDoRequest(http, request, "/")) == NULL) { > DEBUG(0,("Unable to get printer list - %s\n", > ippErrorString(cupsLastError()))); >- httpClose(http); >- return False; >+ goto out; > } > >- for (attr = response->attrs; attr != NULL;) >- { >+ for (attr = response->attrs; attr != NULL;) { > /* > * Skip leading attributes until we hit a printer... > */ >@@ -145,8 +141,7 @@ > name = NULL; > info = NULL; > >- while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) >- { >+ while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) { > if (strcmp(attr->name, "printer-name") == 0 && > attr->value_tag == IPP_TAG_NAME) > name = attr->values[0].string.text; >@@ -166,15 +161,13 @@ > break; > > if (!pcap_cache_add(name, info)) { >- ippDelete(response); >- httpClose(http); >- return False; >+ goto out; > } > } > > ippDelete(response); >+ response = NULL; > >- > /* > * Build a CUPS_GET_CLASSES request, which requires the following > * attributes: >@@ -184,13 +177,9 @@ > * requested-attributes > */ > >- request = ippNew(); >- > request->request.op.operation_id = CUPS_GET_CLASSES; > request->request.op.request_id = 1; > >- language = cupsLangDefault(); >- > ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, > "attributes-charset", NULL, cupsLangEncoding(language)); > >@@ -206,16 +195,13 @@ > * Do the request and get back a response... > */ > >- if ((response = cupsDoRequest(http, request, "/")) == NULL) >- { >+ if ((response = cupsDoRequest(http, request, "/")) == NULL) { > DEBUG(0,("Unable to get printer list - %s\n", > ippErrorString(cupsLastError()))); >- httpClose(http); >- return False; >+ goto out; > } > >- for (attr = response->attrs; attr != NULL;) >- { >+ for (attr = response->attrs; attr != NULL;) { > /* > * Skip leading attributes until we hit a printer... > */ >@@ -233,8 +219,7 @@ > name = NULL; > info = NULL; > >- while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) >- { >+ while (attr != NULL && attr->group_tag == IPP_TAG_PRINTER) { > if (strcmp(attr->name, "printer-name") == 0 && > attr->value_tag == IPP_TAG_NAME) > name = attr->values[0].string.text; >@@ -254,20 +239,27 @@ > break; > > if (!pcap_cache_add(name, info)) { >- ippDelete(response); >- httpClose(http); >- return False; >+ goto out; > } > } > >- ippDelete(response); >+ ret = True; > >- /* >- * Close the connection to the server... >- */ >+ out: > >- httpClose(http); >- return True; >+ if (request) >+ ippDelete(request); >+ >+ if (response) >+ ippDelete(response); >+ >+ if (language) >+ cupsLangFree(language); >+ >+ if (http) >+ httpClose(http); >+ >+ return ret; > } > > >@@ -275,14 +267,13 @@ > * 'cups_job_delete()' - Delete a job. > */ > >-static int >-cups_job_delete(int snum, struct printjob *pjob) >+static int cups_job_delete(int snum, struct printjob *pjob) > { >- int ret; /* Return value */ >- http_t *http; /* HTTP connection to server */ >- ipp_t *request, /* IPP Request */ >- *response; /* IPP Response */ >- cups_lang_t *language; /* Default language */ >+ int ret = 1; /* Return value */ >+ http_t *http = NULL; /* HTTP connection to server */ >+ ipp_t *request = NULL, /* IPP Request */ >+ *response = NULL; /* IPP Response */ >+ cups_lang_t *language = NULL; /* Default language */ > char uri[HTTP_MAX_URI]; /* printer-uri attribute */ > > >@@ -298,11 +289,10 @@ > * Try to connect to the server... > */ > >- if ((http = httpConnect(cups_server(), ippPort())) == NULL) >- { >+ if ((http = httpConnect(cups_server(), ippPort())) == NULL) { > DEBUG(0,("Unable to connect to CUPS server %s - %s\n", > cups_server(), strerror(errno))); >- return (1); >+ goto out; > } > > /* >@@ -339,25 +329,33 @@ > * Do the request and get back a response... > */ > >- ret = 1; >- >- if ((response = cupsDoRequest(http, request, "/jobs")) != NULL) >- { >- if (response->request.status.status_code >= IPP_OK_CONFLICT) >+ if ((response = cupsDoRequest(http, request, "/jobs")) != NULL) { >+ if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ DEBUG(0,("Unable to cancel job %d - %s\n", pjob->sysjob, >+ ippErrorString(cupsLastError()))); >+ } else { >+ ret = 0; >+ } >+ } else { > DEBUG(0,("Unable to cancel job %d - %s\n", pjob->sysjob, >- ippErrorString(cupsLastError()))); >- else >- ret = 0; >- >- ippDelete(response); >+ ippErrorString(cupsLastError()))); > } >- else >- DEBUG(0,("Unable to cancel job %d - %s\n", pjob->sysjob, >- ippErrorString(cupsLastError()))); > >- httpClose(http); >+ out: > >- return (ret); >+ if (request) >+ ippDelete(request); >+ >+ if (response) >+ ippDelete(response); >+ >+ if (language) >+ cupsLangFree(language); >+ >+ if (http) >+ httpClose(http); >+ >+ return ret; > } > > >@@ -365,14 +363,13 @@ > * 'cups_job_pause()' - Pause a job. > */ > >-static int >-cups_job_pause(int snum, struct printjob *pjob) >+static int cups_job_pause(int snum, struct printjob *pjob) > { >- int ret; /* Return value */ >- http_t *http; /* HTTP connection to server */ >- ipp_t *request, /* IPP Request */ >- *response; /* IPP Response */ >- cups_lang_t *language; /* Default language */ >+ int ret = 1; /* Return value */ >+ http_t *http = NULL; /* HTTP connection to server */ >+ ipp_t *request = NULL, /* IPP Request */ >+ *response = NULL; /* IPP Response */ >+ cups_lang_t *language = NULL; /* Default language */ > char uri[HTTP_MAX_URI]; /* printer-uri attribute */ > > >@@ -388,11 +385,10 @@ > * Try to connect to the server... > */ > >- if ((http = httpConnect(cups_server(), ippPort())) == NULL) >- { >+ if ((http = httpConnect(cups_server(), ippPort())) == NULL) { > DEBUG(0,("Unable to connect to CUPS server %s - %s\n", > cups_server(), strerror(errno))); >- return (1); >+ goto out; > } > > /* >@@ -429,25 +425,33 @@ > * Do the request and get back a response... > */ > >- ret = 1; >- >- if ((response = cupsDoRequest(http, request, "/jobs")) != NULL) >- { >- if (response->request.status.status_code >= IPP_OK_CONFLICT) >+ if ((response = cupsDoRequest(http, request, "/jobs")) != NULL) { >+ if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ DEBUG(0,("Unable to hold job %d - %s\n", pjob->sysjob, >+ ippErrorString(cupsLastError()))); >+ } else { >+ ret = 0; >+ } >+ } else { > DEBUG(0,("Unable to hold job %d - %s\n", pjob->sysjob, >- ippErrorString(cupsLastError()))); >- else >- ret = 0; >- >- ippDelete(response); >+ ippErrorString(cupsLastError()))); > } >- else >- DEBUG(0,("Unable to hold job %d - %s\n", pjob->sysjob, >- ippErrorString(cupsLastError()))); > >- httpClose(http); >+ out: > >- return (ret); >+ if (request) >+ ippDelete(request); >+ >+ if (response) >+ ippDelete(response); >+ >+ if (language) >+ cupsLangFree(language); >+ >+ if (http) >+ httpClose(http); >+ >+ return ret; > } > > >@@ -455,14 +459,13 @@ > * 'cups_job_resume()' - Resume a paused job. > */ > >-static int >-cups_job_resume(int snum, struct printjob *pjob) >+static int cups_job_resume(int snum, struct printjob *pjob) > { >- int ret; /* Return value */ >- http_t *http; /* HTTP connection to server */ >- ipp_t *request, /* IPP Request */ >- *response; /* IPP Response */ >- cups_lang_t *language; /* Default language */ >+ int ret = 1; /* Return value */ >+ http_t *http = NULL; /* HTTP connection to server */ >+ ipp_t *request = NULL, /* IPP Request */ >+ *response = NULL; /* IPP Response */ >+ cups_lang_t *language = NULL; /* Default language */ > char uri[HTTP_MAX_URI]; /* printer-uri attribute */ > > >@@ -478,11 +481,10 @@ > * Try to connect to the server... > */ > >- if ((http = httpConnect(cups_server(), ippPort())) == NULL) >- { >+ if ((http = httpConnect(cups_server(), ippPort())) == NULL) { > DEBUG(0,("Unable to connect to CUPS server %s - %s\n", > cups_server(), strerror(errno))); >- return (1); >+ goto out; > } > > /* >@@ -519,25 +521,33 @@ > * Do the request and get back a response... > */ > >- ret = 1; >- >- if ((response = cupsDoRequest(http, request, "/jobs")) != NULL) >- { >- if (response->request.status.status_code >= IPP_OK_CONFLICT) >+ if ((response = cupsDoRequest(http, request, "/jobs")) != NULL) { >+ if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ DEBUG(0,("Unable to release job %d - %s\n", pjob->sysjob, >+ ippErrorString(cupsLastError()))); >+ } else { >+ ret = 0; >+ } >+ } else { > DEBUG(0,("Unable to release job %d - %s\n", pjob->sysjob, >- ippErrorString(cupsLastError()))); >- else >- ret = 0; >- >- ippDelete(response); >+ ippErrorString(cupsLastError()))); > } >- else >- DEBUG(0,("Unable to release job %d - %s\n", pjob->sysjob, >- ippErrorString(cupsLastError()))); > >- httpClose(http); >+ out: > >- return (ret); >+ if (request) >+ ippDelete(request); >+ >+ if (response) >+ ippDelete(response); >+ >+ if (language) >+ cupsLangFree(language); >+ >+ if (http) >+ httpClose(http); >+ >+ return ret; > } > > >@@ -545,19 +555,18 @@ > * 'cups_job_submit()' - Submit a job for printing. > */ > >-static int >-cups_job_submit(int snum, struct printjob *pjob) >+static int cups_job_submit(int snum, struct printjob *pjob) > { >- int ret; /* Return value */ >- http_t *http; /* HTTP connection to server */ >- ipp_t *request, /* IPP Request */ >- *response; /* IPP Response */ >- cups_lang_t *language; /* Default language */ >+ int ret = 1; /* Return value */ >+ http_t *http = NULL; /* HTTP connection to server */ >+ ipp_t *request = NULL, /* IPP Request */ >+ *response = NULL; /* IPP Response */ >+ cups_lang_t *language = NULL; /* Default language */ > char uri[HTTP_MAX_URI]; /* printer-uri attribute */ >- char *clientname; /* hostname of client for job-originating-host attribute */ >+ char *clientname = NULL; /* hostname of client for job-originating-host attribute */ > pstring new_jobname; > int num_options = 0; >- cups_option_t *options; >+ cups_option_t *options = NULL; > > DEBUG(5,("cups_job_submit(%d, %p (%d))\n", snum, pjob, pjob->sysjob)); > >@@ -571,11 +580,10 @@ > * Try to connect to the server... > */ > >- if ((http = httpConnect(cups_server(), ippPort())) == NULL) >- { >+ if ((http = httpConnect(cups_server(), ippPort())) == NULL) { > DEBUG(0,("Unable to connect to CUPS server %s - %s\n", > cups_server(), strerror(errno))); >- return (1); >+ goto out; > } > > /* >@@ -643,28 +651,37 @@ > > slprintf(uri, sizeof(uri) - 1, "/printers/%s", PRINTERNAME(snum)); > >- ret = 1; >- if ((response = cupsDoFileRequest(http, request, uri, >- pjob->filename)) != NULL) >- { >- if (response->request.status.status_code >= IPP_OK_CONFLICT) >+ if ((response = cupsDoFileRequest(http, request, uri, pjob->filename)) != NULL) { >+ if (response->request.status.status_code >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to print file to %s - %s\n", PRINTERNAME(snum), > ippErrorString(cupsLastError()))); >- else >+ } else { > ret = 0; >- >- ippDelete(response); >- } >- else >+ } >+ } else { > DEBUG(0,("Unable to print file to `%s' - %s\n", PRINTERNAME(snum), > ippErrorString(cupsLastError()))); >+ } > >- httpClose(http); >- > if ( ret == 0 ) > unlink(pjob->filename); > /* else print_job_end will do it for us */ > >+ out: >+ >+ if (request) >+ ippDelete(request); >+ >+ if (response) >+ ippDelete(response); >+ >+ if (language) >+ cupsLangFree(language); >+ >+ if (http) >+ httpClose(http); >+ >+ return ret; > return (ret); > } > >@@ -672,22 +689,21 @@ > * 'cups_queue_get()' - Get all the jobs in the print queue. > */ > >-static int >-cups_queue_get(const char *printer_name, >+static int cups_queue_get(const char *printer_name, > enum printing_types printing_type, > char *lpq_command, > print_queue_struct **q, > print_status_struct *status) > { >- http_t *http; /* HTTP connection to server */ >- ipp_t *request, /* IPP Request */ >- *response; /* IPP Response */ >- ipp_attribute_t *attr; /* Current attribute */ >- cups_lang_t *language; /* Default language */ >+ http_t *http = NULL; /* HTTP connection to server */ >+ ipp_t *request = NULL, /* IPP Request */ >+ *response = NULL; /* IPP Response */ >+ ipp_attribute_t *attr = NULL; /* Current attribute */ >+ cups_lang_t *language = NULL; /* Default language */ > char uri[HTTP_MAX_URI]; /* printer-uri attribute */ >- int qcount, /* Number of active queue entries */ >- qalloc; /* Number of queue entries allocated */ >- print_queue_struct *queue, /* Queue entries */ >+ int qcount = 0, /* Number of active queue entries */ >+ qalloc = 0; /* Number of queue entries allocated */ >+ print_queue_struct *queue = NULL, /* Queue entries */ > *temp; /* Temporary pointer for queue */ > const char *user_name, /* job-originating-user-name attribute */ > *job_name; /* job-name attribute */ >@@ -712,6 +728,7 @@ > "printer-state-message" > }; > >+ *q = NULL; > > DEBUG(5,("cups_queue_get(%s, %p, %p)\n", printer_name, q, status)); > >@@ -725,11 +742,10 @@ > * Try to connect to the server... > */ > >- if ((http = httpConnect(cups_server(), ippPort())) == NULL) >- { >+ if ((http = httpConnect(cups_server(), ippPort())) == NULL) { > DEBUG(0,("Unable to connect to CUPS server %s - %s\n", > cups_server(), strerror(errno))); >- return (0); >+ goto out; > } > > /* >@@ -773,22 +789,16 @@ > * Do the request and get back a response... > */ > >- if ((response = cupsDoRequest(http, request, "/")) == NULL) >- { >+ if ((response = cupsDoRequest(http, request, "/")) == NULL) { > DEBUG(0,("Unable to get jobs for %s - %s\n", uri, > ippErrorString(cupsLastError()))); >- httpClose(http); >- return (0); >+ goto out; > } > >- if (response->request.status.status_code >= IPP_OK_CONFLICT) >- { >+ if (response->request.status.status_code >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to get jobs for %s - %s\n", uri, > ippErrorString(response->request.status.status_code))); >- ippDelete(response); >- httpClose(http); >- >- return (0); >+ goto out; > } > > /* >@@ -799,8 +809,7 @@ > qalloc = 0; > queue = NULL; > >- for (attr = response->attrs; attr != NULL; attr = attr->next) >- { >+ for (attr = response->attrs; attr != NULL; attr = attr->next) { > /* > * Skip leading attributes until we hit a job... > */ >@@ -814,20 +823,16 @@ > /* > * Allocate memory as needed... > */ >- if (qcount >= qalloc) >- { >+ if (qcount >= qalloc) { > qalloc += 16; > > temp = SMB_REALLOC_ARRAY(queue, print_queue_struct, qalloc); > >- if (temp == NULL) >- { >+ if (temp == NULL) { > DEBUG(0,("cups_queue_get: Not enough memory!")); >- ippDelete(response); >- httpClose(http); >- >+ qcount = 0; > SAFE_FREE(queue); >- return (0); >+ goto out; > } > > queue = temp; >@@ -848,10 +853,8 @@ > user_name = NULL; > job_name = NULL; > >- while (attr != NULL && attr->group_tag == IPP_TAG_JOB) >- { >- if (attr->name == NULL) >- { >+ while (attr != NULL && attr->group_tag == IPP_TAG_JOB) { >+ if (attr->name == NULL) { > attr = attr->next; > break; > } >@@ -891,12 +894,11 @@ > * See if we have everything needed... > */ > >- if (user_name == NULL || job_name == NULL || job_id == 0) >- { >- if (attr == NULL) >- break; >- else >- continue; >+ if (user_name == NULL || job_name == NULL || job_id == 0) { >+ if (attr == NULL) >+ break; >+ else >+ continue; > } > > temp->job = job_id; >@@ -913,10 +915,11 @@ > qcount ++; > > if (attr == NULL) >- break; >+ break; > } > > ippDelete(response); >+ response = NULL; > > /* > * Build an IPP_GET_PRINTER_ATTRIBUTES request, which requires the >@@ -928,13 +931,9 @@ > * printer-uri > */ > >- request = ippNew(); >- > request->request.op.operation_id = IPP_GET_PRINTER_ATTRIBUTES; > request->request.op.request_id = 1; > >- language = cupsLangDefault(); >- > ippAddString(request, IPP_TAG_OPERATION, IPP_TAG_CHARSET, > "attributes-charset", NULL, cupsLangEncoding(language)); > >@@ -953,31 +952,25 @@ > * Do the request and get back a response... > */ > >- if ((response = cupsDoRequest(http, request, "/")) == NULL) >- { >+ if ((response = cupsDoRequest(http, request, "/")) == NULL) { > DEBUG(0,("Unable to get printer status for %s - %s\n", printer_name, > ippErrorString(cupsLastError()))); >- httpClose(http); > *q = queue; >- return (qcount); >+ goto out; > } > >- if (response->request.status.status_code >= IPP_OK_CONFLICT) >- { >+ if (response->request.status.status_code >= IPP_OK_CONFLICT) { > DEBUG(0,("Unable to get printer status for %s - %s\n", printer_name, > ippErrorString(response->request.status.status_code))); >- ippDelete(response); >- httpClose(http); > *q = queue; >- return (qcount); >+ goto out; > } > > /* > * Get the current printer status and convert it to the SAMBA values. > */ > >- if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL) >- { >+ if ((attr = ippFindAttribute(response, "printer-state", IPP_TAG_ENUM)) != NULL) { > if (attr->values[0].integer == IPP_PRINTER_STOPPED) > status->status = LPSTAT_STOPPED; > else >@@ -988,16 +981,27 @@ > IPP_TAG_TEXT)) != NULL) > fstrcpy(status->message, attr->values[0].string.text); > >- ippDelete(response); >- > /* > * Return the job queue... > */ > >- httpClose(http); >+ *q = queue; > >- *q = queue; >- return (qcount); >+ out: >+ >+ if (request) >+ ippDelete(request); >+ >+ if (response) >+ ippDelete(response); >+ >+ if (language) >+ cupsLangFree(language); >+ >+ if (http) >+ httpClose(http); >+ >+ return qcount; > } > > >@@ -1005,15 +1009,14 @@ > * 'cups_queue_pause()' - Pause a print queue. > */ > >-static int >-cups_queue_pause(int snum) >+static int cups_queue_pause(int snum) > { > extern userdom_struct current_user_info; >- int ret; /* Return value */ >- http_t *http; /* HTTP connection to server */ >- ipp_t *request, /* IPP Request */ >- *response; /* IPP Response */ >- cups_lang_t *language; /* Default language */ >+ int ret = 1; /* Return value */ >+ http_t *http = NULL; /* HTTP connection to server */ >+ ipp_t *request = NULL, /* IPP Request */ >+ *response = NULL; /* IPP Response */ >+ cups_lang_t *language = NULL; /* Default language */ > char uri[HTTP_MAX_URI]; /* printer-uri attribute */ > > >@@ -1029,11 +1032,10 @@ > * Try to connect to the server... > */ > >- if ((http = httpConnect(cups_server(), ippPort())) == NULL) >- { >+ if ((http = httpConnect(cups_server(), ippPort())) == NULL) { > DEBUG(0,("Unable to connect to CUPS server %s - %s\n", > cups_server(), strerror(errno))); >- return (1); >+ goto out; > } > > /* >@@ -1071,25 +1073,33 @@ > * Do the request and get back a response... > */ > >- ret = 1; >- >- if ((response = cupsDoRequest(http, request, "/admin/")) != NULL) >- { >- if (response->request.status.status_code >= IPP_OK_CONFLICT) >+ if ((response = cupsDoRequest(http, request, "/admin/")) != NULL) { >+ if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ DEBUG(0,("Unable to pause printer %s - %s\n", PRINTERNAME(snum), >+ ippErrorString(cupsLastError()))); >+ } else { >+ ret = 0; >+ } >+ } else { > DEBUG(0,("Unable to pause printer %s - %s\n", PRINTERNAME(snum), >- ippErrorString(cupsLastError()))); >- else >- ret = 0; >- >- ippDelete(response); >+ ippErrorString(cupsLastError()))); > } >- else >- DEBUG(0,("Unable to pause printer %s - %s\n", PRINTERNAME(snum), >- ippErrorString(cupsLastError()))); > >- httpClose(http); >+ out: > >- return (ret); >+ if (request) >+ ippDelete(request); >+ >+ if (response) >+ ippDelete(response); >+ >+ if (language) >+ cupsLangFree(language); >+ >+ if (http) >+ httpClose(http); >+ >+ return ret; > } > > >@@ -1097,15 +1107,14 @@ > * 'cups_queue_resume()' - Restart a print queue. > */ > >-static int >-cups_queue_resume(int snum) >+static int cups_queue_resume(int snum) > { > extern userdom_struct current_user_info; >- int ret; /* Return value */ >- http_t *http; /* HTTP connection to server */ >- ipp_t *request, /* IPP Request */ >- *response; /* IPP Response */ >- cups_lang_t *language; /* Default language */ >+ int ret = 1; /* Return value */ >+ http_t *http = NULL; /* HTTP connection to server */ >+ ipp_t *request = NULL, /* IPP Request */ >+ *response = NULL; /* IPP Response */ >+ cups_lang_t *language = NULL; /* Default language */ > char uri[HTTP_MAX_URI]; /* printer-uri attribute */ > > >@@ -1121,11 +1130,10 @@ > * Try to connect to the server... > */ > >- if ((http = httpConnect(cups_server(), ippPort())) == NULL) >- { >+ if ((http = httpConnect(cups_server(), ippPort())) == NULL) { > DEBUG(0,("Unable to connect to CUPS server %s - %s\n", > cups_server(), strerror(errno))); >- return (1); >+ goto out; > } > > /* >@@ -1163,25 +1171,33 @@ > * Do the request and get back a response... > */ > >- ret = 1; >- >- if ((response = cupsDoRequest(http, request, "/admin/")) != NULL) >- { >- if (response->request.status.status_code >= IPP_OK_CONFLICT) >+ if ((response = cupsDoRequest(http, request, "/admin/")) != NULL) { >+ if (response->request.status.status_code >= IPP_OK_CONFLICT) { >+ DEBUG(0,("Unable to resume printer %s - %s\n", PRINTERNAME(snum), >+ ippErrorString(cupsLastError()))); >+ } else { >+ ret = 0; >+ } >+ } else { > DEBUG(0,("Unable to resume printer %s - %s\n", PRINTERNAME(snum), >- ippErrorString(cupsLastError()))); >- else >- ret = 0; >- >- ippDelete(response); >+ ippErrorString(cupsLastError()))); > } >- else >- DEBUG(0,("Unable to resume printer %s - %s\n", PRINTERNAME(snum), >- ippErrorString(cupsLastError()))); > >- httpClose(http); >+ out: > >- return (ret); >+ if (request) >+ ippDelete(request); >+ >+ if (response) >+ ippDelete(response); >+ >+ if (language) >+ cupsLangFree(language); >+ >+ if (http) >+ httpClose(http); >+ >+ return ret; > } > > /*******************************************************************
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 2270
:
904
| 905