summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorRichard Sharpe <sharpe@samba.org>2001-02-04 19:48:26 +0000
committerRichard Sharpe <sharpe@samba.org>2001-02-04 19:48:26 +0000
commit2fd7e6e6a0d1b22d841d49c4fc0868c0be471475 (patch)
tree61fbee85f9df3da67198f359f4dccc5555c4551a /source3
parentdeb638a7aca9b52ce11ce27c8107f6d189b40f38 (diff)
downloadsamba-2fd7e6e6a0d1b22d841d49c4fc0868c0be471475.tar.gz
samba-2fd7e6e6a0d1b22d841d49c4fc0868c0be471475.tar.bz2
samba-2fd7e6e6a0d1b22d841d49c4fc0868c0be471475.zip
Fix some further small bugs in libsmbclient to make it pass the
Caldera test suite and start to add the printing routines. (This used to be commit 838cfad404ef648ee7909f449264afa4db60fa3b)
Diffstat (limited to 'source3')
-rw-r--r--source3/include/libsmbclient.h24
-rw-r--r--source3/libsmb/libsmbclient.c63
2 files changed, 79 insertions, 8 deletions
diff --git a/source3/include/libsmbclient.h b/source3/include/libsmbclient.h
index 5889502ae2..a02c0e5317 100644
--- a/source3/include/libsmbclient.h
+++ b/source3/include/libsmbclient.h
@@ -192,7 +192,29 @@ off_t smbc_telldir(int fd);
int smbc_lseekdir(int fd, off_t offset, int whence);
/*
- * Must also provide print functions ... soon
+ * Print a file given the name in fname. It would be a URL ...
*/
+int smbc_print_file(const char *fname);
+
+/*
+ * Open a print file that can be written to by other calls. This simply
+ * does an smbc_open call after checking if there is a file name on the
+ * URI. If not, a temporary name is added ...
+ */
+
+int smbc_open_print_job(const char *fname);
+
+/*
+ * List the print jobs on a print share, for the moment, pass a callback
+ */
+
+int smbc_list_print_jobs(const char *fname, void (*fn)(struct print_job_info *));
+
+/*
+ * Delete a print job
+ */
+
+int smbc_unlink_print_job(int id);
+
#endif
diff --git a/source3/libsmb/libsmbclient.c b/source3/libsmb/libsmbclient.c
index f093e2b4be..feb0baaee3 100644
--- a/source3/libsmb/libsmbclient.c
+++ b/source3/libsmb/libsmbclient.c
@@ -364,7 +364,7 @@ struct smbc_server *smbc_server(char *server, char *share,
make_nmb_name(&calling, my_netbios_name, 0x0);
make_nmb_name(&called , server, 0x20);
- DEBUG(4,("server_n=[%s] server=[%s]\n", server_n, server));
+ DEBUG(4,("smbc_server: server_n=[%s] server=[%s]\n", server_n, server));
if ((p=strchr(server_n,'#')) &&
(strcmp(p+1,"1D")==0 || strcmp(p+1,"01")==0)) {
@@ -497,14 +497,13 @@ int smbc_init(smbc_get_auth_data_fn fn, const char *wgroup, int debug)
/*
* Next lot ifdef'd out until test suite fixed ...
*/
-#ifdef 0
+
if (!fn || debug < 0 || debug > 100) {
errno = EINVAL;
return -1;
}
-#endif
smbc_initialized = 1;
smbc_auth_fn = fn;
@@ -1167,7 +1166,7 @@ BOOL smbc_getatr(struct smbc_server *srv, char *path,
}
- DEBUG(4,("sending qpathinfo\n"));
+ DEBUG(4,("smbc_getatr: sending qpathinfo\n"));
if (!srv->no_pathinfo2 &&
cli_qpathinfo2(&srv->cli, path, c_time, a_time, m_time, NULL,
@@ -1212,7 +1211,7 @@ int smbc_stat(const char *fname, struct stat *st)
}
- DEBUG(4, ("stat(%s)\n", fname));
+ DEBUG(4, ("smbc_stat(%s)\n", fname));
smbc_parse_path(fname, server, share, path, user, password); /*FIXME, errors*/
@@ -1954,7 +1953,7 @@ int smbc_mkdir(const char *fname, mode_t mode)
}
- DEBUG(4, ("stat(%s)\n", fname));
+ DEBUG(4, ("smbc_mkdir(%s)\n", fname));
smbc_parse_path(fname, server, share, path, user, password); /*FIXME, errors*/
@@ -2024,7 +2023,7 @@ int smbc_rmdir(const char *fname)
}
- DEBUG(4, ("stat(%s)\n", fname));
+ DEBUG(4, ("smbc_rmdir(%s)\n", fname));
smbc_parse_path(fname, server, share, path, user, password); /*FIXME, errors*/
@@ -2140,3 +2139,53 @@ int smbc_fstatdir(int fd, struct stat *st)
return 0;
}
+
+/*
+ * Routine to list print jobs on a printer share ...
+ */
+
+int smbc_list_print_jobs(const char *fname, void (*fn)(struct print_job_info *))
+{
+ struct smbc_server *srv;
+ fstring server, share, user, password;
+ pstring path;
+
+ if (!smbc_initialized) {
+
+ errno = EUCLEAN;
+ return -1;
+
+ }
+
+ if (!fname) {
+
+ errno = EINVAL;
+ return -1;
+
+ }
+
+ DEBUG(4, ("smbc_list_print_jobs(%s)\n", fname));
+
+ smbc_parse_path(fname, server, share, path, user, password); /*FIXME, errors*/
+
+ if (user[0] == (char)0) pstrcpy(user, smbc_user);
+
+ srv = smbc_server(server, share, lp_workgroup(), user, password);
+
+ if (!srv) {
+
+ return -1; /* errno set by smbc_server */
+
+ }
+
+ if (cli_print_queue(&srv->cli, fn) < 0) {
+
+ errno = smbc_errno(&srv->cli);
+ return -1;
+
+ }
+
+ return 0;
+
+}
+