s3:winbind:grent: convert wb_next_grent to use wb_query_group_list.
[bbaumbach/samba-autobuild/.git] / source3 / libsmb / libsmb_printjob.c
index a03c15e024988836d4a35c9653f3d072510c4cdc..62e54f47b1bd845b84de10cf99daa45d4d6cb5ad 100644 (file)
@@ -1,28 +1,29 @@
-/* 
+/*
    Unix SMB/Netbios implementation.
    SMB client library implementation
    Copyright (C) Andrew Tridgell 1998
    Copyright (C) Richard Sharpe 2000, 2002
    Copyright (C) John Terpstra 2000
-   Copyright (C) Tom Jansen (Ninja ISD) 2002 
+   Copyright (C) Tom Jansen (Ninja ISD) 2002
    Copyright (C) Derrell Lipman 2003-2008
    Copyright (C) Jeremy Allison 2007, 2008
-   
+
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
+#include "libsmb/libsmb.h"
 #include "libsmbclient.h"
 #include "libsmb_internal.h"
 
@@ -40,10 +41,10 @@ SMBC_open_print_job_ctx(SMBCCTX *context,
        char *user = NULL;
        char *password = NULL;
        char *path = NULL;
+       uint16_t port = 0;
        TALLOC_CTX *frame = talloc_stackframe();
 
        if (!context || !context->internal->initialized) {
-
                 errno = EINVAL;
                TALLOC_FREE(frame);
                 return NULL;
@@ -58,15 +59,16 @@ SMBC_open_print_job_ctx(SMBCCTX *context,
         DEBUG(4, ("SMBC_open_print_job_ctx(%s)\n", fname));
 
         if (SMBC_parse_path(frame,
-                               context,
-                               fname,
-                               NULL,
-                               &server,
-                               &share,
-                               &path,
-                               &user,
-                               &password,
-                               NULL)) {
+                            context,
+                            fname,
+                            NULL,
+                            &server,
+                            &port,
+                            &share,
+                            &path,
+                            &user,
+                            &password,
+                            NULL)) {
                 errno = EINVAL;
                TALLOC_FREE(frame);
                 return NULL;
@@ -75,7 +77,7 @@ SMBC_open_print_job_ctx(SMBCCTX *context,
         /* What if the path is empty, or the file exists? */
 
        TALLOC_FREE(frame);
-        return (context->posix_emu.open_fn)(context, fname, O_WRONLY, 666);
+        return smbc_getFunctionOpen(context)(context, fname, O_WRONLY, 666);
 }
 
 /*
@@ -93,6 +95,8 @@ SMBC_print_file_ctx(SMBCCTX *c_file,
 {
         SMBCFILE *fid1;
         SMBCFILE *fid2;
+        smbc_open_fn f_open1;
+        smbc_open_print_job_fn f_open_pj2;
         int bytes;
         int saverr;
         int tot_bytes = 0;
@@ -101,74 +105,75 @@ SMBC_print_file_ctx(SMBCCTX *c_file,
 
         if (!c_file || !c_file->internal->initialized ||
             !c_print || !c_print->internal->initialized) {
-
                 errno = EINVAL;
                TALLOC_FREE(frame);
                 return -1;
-
         }
 
         if (!fname && !printq) {
-
                 errno = EINVAL;
                TALLOC_FREE(frame);
                 return -1;
-
         }
 
         /* Try to open the file for reading ... */
+       f_open1 = smbc_getFunctionOpen(c_file);
+       if (f_open1 == NULL) {
+               errno = EINVAL;
+               TALLOC_FREE(frame);
+               return -1;
+       }
 
-        if ((long)(fid1 = smbc_getFunctionOpen(c_file)(c_file, fname, O_RDONLY, 0666)) < 0) {
-                DEBUG(3, ("Error, fname=%s, errno=%i\n", fname, errno));
+       fid1 = f_open1(c_file, fname, O_RDONLY, 0666);
+       if (fid1 < 0) {
+               DEBUG(3, ("Error, fname=%s, errno=%i\n", fname, errno));
                TALLOC_FREE(frame);
-                return -1;  /* smbc_open sets errno */
-        }
+               return -1;  /* smbc_open sets errno */
+       }
 
         /* Now, try to open the printer file for writing */
+       f_open_pj2 = smbc_getFunctionOpenPrintJob(c_print);
+       if (f_open_pj2 == NULL) {
+               errno = EINVAL;
+               TALLOC_FREE(frame);
+               return -1;
+       }
 
-        if ((long)(fid2 = smbc_getFunctionOpenPrintJob(c_print)(c_print, printq)) < 0) {
-
+       fid2 = f_open_pj2(c_print, printq);
+       if (fid2 < 0) {
                 saverr = errno;  /* Save errno */
                 smbc_getFunctionClose(c_file)(c_file, fid1);
                 errno = saverr;
                TALLOC_FREE(frame);
                 return -1;
-
         }
 
         while ((bytes = smbc_getFunctionRead(c_file)(c_file, fid1,
                                                      buf, sizeof(buf))) > 0) {
-
                 tot_bytes += bytes;
 
                 if ((smbc_getFunctionWrite(c_print)(c_print, fid2,
                                                     buf, bytes)) < 0) {
-
                         saverr = errno;
                         smbc_getFunctionClose(c_file)(c_file, fid1);
                         smbc_getFunctionClose(c_print)(c_print, fid2);
                         errno = saverr;
-
                 }
-
         }
 
         saverr = errno;
 
-        smbc_getFunctionClose(c_file)(c_file, fid1);  /* We have to close these anyway */
+        smbc_getFunctionClose(c_file)(c_file, fid1);
         smbc_getFunctionClose(c_print)(c_print, fid2);
 
         if (bytes < 0) {
-
                 errno = saverr;
                TALLOC_FREE(frame);
                 return -1;
-
         }
 
        TALLOC_FREE(frame);
         return tot_bytes;
-
 }
 
 /*
@@ -187,10 +192,10 @@ SMBC_list_print_jobs_ctx(SMBCCTX *context,
        char *password = NULL;
        char *workgroup = NULL;
        char *path = NULL;
+       uint16_t port = 0;
        TALLOC_CTX *frame = talloc_stackframe();
 
        if (!context || !context->internal->initialized) {
-
                 errno = EINVAL;
                TALLOC_FREE(frame);
                 return -1;
@@ -205,22 +210,23 @@ SMBC_list_print_jobs_ctx(SMBCCTX *context,
         DEBUG(4, ("smbc_list_print_jobs(%s)\n", fname));
 
         if (SMBC_parse_path(frame,
-                               context,
-                               fname,
-                               &workgroup,
-                               &server,
-                               &share,
-                               &path,
-                               &user,
-                               &password,
-                               NULL)) {
+                            context,
+                            fname,
+                            &workgroup,
+                            &server,
+                            &port,
+                            &share,
+                            &path,
+                            &user,
+                            &password,
+                            NULL)) {
                errno = EINVAL;
                TALLOC_FREE(frame);
                return -1;
         }
 
         if (!user || user[0] == (char)0) {
-               user = talloc_strdup(frame, context->config.user);
+               user = talloc_strdup(frame, smbc_getUser(context));
                if (!user) {
                        errno = ENOMEM;
                        TALLOC_FREE(frame);
@@ -229,7 +235,7 @@ SMBC_list_print_jobs_ctx(SMBCCTX *context,
        }
 
         srv = SMBC_server(frame, context, True,
-                          server, share, &workgroup, &user, &password);
+                          server, port, share, &workgroup, &user, &password);
 
         if (!srv) {
                TALLOC_FREE(frame);
@@ -245,7 +251,6 @@ SMBC_list_print_jobs_ctx(SMBCCTX *context,
 
        TALLOC_FREE(frame);
         return 0;
-
 }
 
 /*
@@ -265,10 +270,10 @@ SMBC_unlink_print_job_ctx(SMBCCTX *context,
        char *workgroup = NULL;
        char *path = NULL;
         int err;
+       uint16_t port = 0;
        TALLOC_CTX *frame = talloc_stackframe();
 
        if (!context || !context->internal->initialized) {
-
                 errno = EINVAL;
                TALLOC_FREE(frame);
                 return -1;
@@ -283,22 +288,23 @@ SMBC_unlink_print_job_ctx(SMBCCTX *context,
         DEBUG(4, ("smbc_unlink_print_job(%s)\n", fname));
 
         if (SMBC_parse_path(frame,
-                               context,
-                               fname,
-                               &workgroup,
-                               &server,
-                               &share,
-                               &path,
-                               &user,
-                               &password,
-                               NULL)) {
+                            context,
+                            fname,
+                            &workgroup,
+                            &server,
+                            &port,
+                            &share,
+                            &path,
+                            &user,
+                            &password,
+                            NULL)) {
                errno = EINVAL;
                TALLOC_FREE(frame);
                return -1;
         }
 
         if (!user || user[0] == (char)0) {
-               user = talloc_strdup(frame, context->config.user);
+               user = talloc_strdup(frame, smbc_getUser(context));
                if (!user) {
                        errno = ENOMEM;
                        TALLOC_FREE(frame);
@@ -307,28 +313,23 @@ SMBC_unlink_print_job_ctx(SMBCCTX *context,
        }
 
         srv = SMBC_server(frame, context, True,
-                          server, share, &workgroup, &user, &password);
+                          server, port, share, &workgroup, &user, &password);
 
         if (!srv) {
-
                TALLOC_FREE(frame);
                 return -1;  /* errno set by SMBC_server */
-
         }
 
         if ((err = cli_printjob_del(srv->cli, id)) != 0) {
-
                 if (err < 0)
                         errno = SMBC_errno(context, srv->cli);
                 else if (err == ERRnosuchprintjob)
                         errno = EINVAL;
                TALLOC_FREE(frame);
                 return -1;
-
         }
 
        TALLOC_FREE(frame);
         return 0;
-
 }