add support for unlink() on printer shares in smbwrapper. unlink()
authorAndrew Tridgell <tridge@samba.org>
Sun, 4 Oct 1998 10:14:21 +0000 (10:14 +0000)
committerAndrew Tridgell <tridge@samba.org>
Sun, 4 Oct 1998 10:14:21 +0000 (10:14 +0000)
will remove the job from the pirnt queue.

source/include/proto.h
source/libsmb/clientgen.c
source/smbwrapper/smbw.c
source/smbwrapper/smbw_stat.c

index 29803cdbbc95e5cbe69d1d069c410b98766d32a8..f2b484ceec10a868b9b9fb3bacf0dff82ecfbf7a 100644 (file)
@@ -418,6 +418,7 @@ BOOL cli_establish_connection(struct cli_state *cli,
                                struct nmb_name *calling, struct nmb_name *called,
                                char *service, char *service_type,
                                BOOL do_shutdown, BOOL do_tcon);
+int cli_printjob_del(struct cli_state *cli, int job);
 int cli_print_queue(struct cli_state *cli, 
                    void (*fn)(struct print_job_info *));
 
index 0e01370f5de0d22cbb79e2e6c06a39427a581eb0..e4aa15c6eb8b67812ec3440a75eb4049bb15330e 100644 (file)
@@ -2495,6 +2495,43 @@ BOOL cli_establish_connection(struct cli_state *cli,
 }
 
 
+/****************************************************************************
+  cancel a print job
+  ****************************************************************************/
+int cli_printjob_del(struct cli_state *cli, int job)
+{
+       char *rparam = NULL;
+       char *rdata = NULL;
+       char *p;
+       int rdrcnt,rprcnt, ret = -1;
+       pstring param;
+
+       bzero(param,sizeof(param));
+
+       p = param;
+       SSVAL(p,0,81);          /* DosPrintJobDel() */
+       p += 2;
+       pstrcpy(p,"W");
+       p = skip_string(p,1);
+       pstrcpy(p,"");
+       p = skip_string(p,1);
+       SSVAL(p,0,job);     
+       p += 2;
+       
+       if (cli_api(cli, 
+                   param, PTR_DIFF(p,param), 1024,  /* Param, length, maxlen */
+                   NULL, 0, CLI_BUFFER_SIZE,            /* data, length, maxlen */
+                   &rparam, &rprcnt,                /* return params, length */
+                   &rdata, &rdrcnt)) {               /* return data, length */
+               ret = SVAL(rparam,0);
+       }
+
+       if (rparam) free(rparam);
+       if (rdata) free(rdata);
+
+       return ret;
+}
+
 
 /****************************************************************************
 call fn() on each entry in a print queue
index 3a2cbcf5ace6b09bd696a88e0dcc1fe728c2e377..0abe823e2995d9d07a2f76576791b4c8e2bf3710 100644 (file)
@@ -756,7 +756,15 @@ int smbw_unlink(const char *fname)
                goto failed;
        }
 
-       if (!cli_unlink(&srv->cli, path)) {
+       if (strncmp(srv->cli.dev, "LPT", 3) == 0) {
+               int job = smbw_stat_printjob(srv, path, NULL, NULL);
+               if (job == -1) {
+                       goto failed;
+               }
+               if (cli_printjob_del(&srv->cli, job) != 0) {
+                       goto failed;
+               }
+       } else if (!cli_unlink(&srv->cli, path)) {
                errno = smbw_errno(&srv->cli);
                goto failed;
        }
index 69ca38a2aeb20943bddb6c5532b7b9278629e7c5..d0b0e59b4f2e754df9074d145e9406c0e6a201cf 100644 (file)
@@ -100,9 +100,13 @@ int smbw_stat_printjob(struct smbw_server *srv,char *path,
        fstrcpy(printjob.name, path);
        cli_print_queue(&srv->cli, smbw_printjob_stat);
 
-       *size = printjob.size;
-       *m_time = printjob.t;
-       return 0;
+       if (size) {
+               *size = printjob.size;
+       }
+       if (m_time) {
+               *m_time = printjob.t;
+       }
+       return printjob.id;
 }