summaryrefslogtreecommitdiff
path: root/source3/printing
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2002-12-05 04:00:16 +0000
committerJeremy Allison <jra@samba.org>2002-12-05 04:00:16 +0000
commit00a20ce45f11e62470e60a8d5fcacc6b0b1f90a2 (patch)
tree6760f9cc2e88c9a5d91c4893392918d8263abd51 /source3/printing
parent21e21dfd214727e1705054d374a836b202712f90 (diff)
downloadsamba-00a20ce45f11e62470e60a8d5fcacc6b0b1f90a2.tar.gz
samba-00a20ce45f11e62470e60a8d5fcacc6b0b1f90a2.tar.bz2
samba-00a20ce45f11e62470e60a8d5fcacc6b0b1f90a2.zip
The element in fsp->print_job should be a RAP jobid, not a uint32 RPC
jobid. This was causing Win9x client "set name" calls to fail. Still need one cleanup fix to finish. Jeremy. (This used to be commit 6c23d2030ab8dddff4c849903c529f0012b94027)
Diffstat (limited to 'source3/printing')
-rw-r--r--source3/printing/printfsp.c22
-rw-r--r--source3/printing/printing.c28
2 files changed, 43 insertions, 7 deletions
diff --git a/source3/printing/printfsp.c b/source3/printing/printfsp.c
index 8a4e7ea073..4ae74e27ec 100644
--- a/source3/printing/printfsp.c
+++ b/source3/printing/printfsp.c
@@ -52,8 +52,15 @@ files_struct *print_fsp_open(connection_struct *conn, char *fname)
return NULL;
}
+ /* Convert to RAP id. */
+ fsp->rap_print_jobid = pjobid_to_rap(SNUM(conn), jobid);
+ if (fsp->rap_print_jobid == 0) {
+ /* We need to delete the entry in the tdb here ! FIXME ! JRA */
+ file_free(fsp);
+ return NULL;
+ }
+
/* setup a full fsp */
- fsp->print_jobid = jobid;
fsp->fd = print_job_fd(SNUM(conn),jobid);
GetTimeOfDay(&fsp->open_time);
fsp->vuid = current_user.vuid;
@@ -88,6 +95,9 @@ print a file - called on closing the file
****************************************************************************/
void print_fsp_end(files_struct *fsp, BOOL normal_close)
{
+ uint32 jobid;
+ int snum;
+
if (fsp->share_mode == FILE_DELETE_ON_CLOSE) {
/*
* Truncate the job. print_job_end will take
@@ -96,9 +106,15 @@ void print_fsp_end(files_struct *fsp, BOOL normal_close)
sys_ftruncate(fsp->fd, 0);
}
- print_job_end(SNUM(fsp->conn),fsp->print_jobid, normal_close);
-
if (fsp->fsp_name) {
string_free(&fsp->fsp_name);
}
+
+ if (!rap_to_pjobid(fsp->rap_print_jobid, &snum, &jobid)) {
+ DEBUG(3,("print_fsp_end: Unable to convert RAP jobid %u to print jobid.\n",
+ (unsigned int)fsp->rap_print_jobid ));
+ return;
+ }
+
+ print_job_end(SNUM(fsp->conn),jobid, normal_close);
}
diff --git a/source3/printing/printing.c b/source3/printing/printing.c
index a6b5e5cb83..6c70b3deae 100644
--- a/source3/printing/printing.c
+++ b/source3/printing/printing.c
@@ -53,6 +53,8 @@ uint16 pjobid_to_rap(int snum, uint32 jobid)
TDB_DATA data, key;
char jinfo[8];
+ DEBUG(10,("pjobid_to_rap: called.\n"));
+
if (!rap_tdb) {
/* Create the in-memory tdb. */
rap_tdb = tdb_open_log(NULL, 0, TDB_INTERNAL, (O_RDWR|O_CREAT), 0644);
@@ -80,13 +82,18 @@ uint16 pjobid_to_rap(int snum, uint32 jobid)
data.dsize = sizeof(rap_jobid);
tdb_store(rap_tdb, key, data, TDB_REPLACE);
tdb_store(rap_tdb, data, key, TDB_REPLACE);
+
+ DEBUG(10,("pjobid_to_rap: jobid %u maps to RAP jobid %u\n",
+ (unsigned int)jobid,
+ (unsigned int)rap_jobid));
return rap_jobid;
}
BOOL rap_to_pjobid(uint16 rap_jobid, int *psnum, uint32 *pjobid)
{
TDB_DATA data, key;
- char jinfo[8];
+
+ DEBUG(10,("rap_to_pjobid called.\n"));
if (!rap_tdb)
return False;
@@ -94,12 +101,18 @@ BOOL rap_to_pjobid(uint16 rap_jobid, int *psnum, uint32 *pjobid)
key.dptr = (char *)&rap_jobid;
key.dsize = sizeof(rap_jobid);
data = tdb_fetch(rap_tdb, key);
- if (data.dptr && data.dsize == sizeof(jinfo)) {
- *psnum = IVAL(&jinfo,0);
- *pjobid = IVAL(&jinfo,4);
+ if (data.dptr && data.dsize == 8) {
+ *psnum = IVAL(data.dptr,0);
+ *pjobid = IVAL(data.dptr,4);
+ DEBUG(10,("rap_to_pjobid: jobid %u maps to RAP jobid %u\n",
+ (unsigned int)*pjobid,
+ (unsigned int)rap_jobid));
SAFE_FREE(data.dptr);
return True;
}
+
+ DEBUG(10,("rap_to_pjobid: Failed to lookup RAP jobid %u\n",
+ (unsigned int)rap_jobid));
SAFE_FREE(data.dptr);
return False;
}
@@ -110,6 +123,8 @@ static void rap_jobid_delete(int snum, uint32 jobid)
uint16 rap_jobid;
char jinfo[8];
+ DEBUG(10,("rap_jobid_delete: called.\n"));
+
if (!rap_tdb)
return;
@@ -120,10 +135,15 @@ static void rap_jobid_delete(int snum, uint32 jobid)
key.dsize = sizeof(jinfo);
data = tdb_fetch(rap_tdb, key);
if (!data.dptr || (data.dsize != sizeof(uint16))) {
+ DEBUG(10,("rap_jobid_delete: cannot find jobid %u\n",
+ (unsigned int)jobid ));
SAFE_FREE(data.dptr);
return;
}
+ DEBUG(10,("rap_jobid_delete: deleting jobid %u\n",
+ (unsigned int)jobid ));
+
memcpy(&rap_jobid, data.dptr, sizeof(uint16));
SAFE_FREE(data.dptr);
data.dptr = (char *)&rap_jobid;