[SCM] Samba Shared Repository - branch master updated
Günther Deschner
gd at samba.org
Mon Apr 19 03:54:27 MDT 2010
The branch, master has been updated
via 0b2e5de... s3-smb2: fix some c++ warnings.
via 7b84d36... s3-spoolss: fix samr_ValidatePassword_Change.
via 7277668... spoolss: move up enum spoolss_Build in the IDL.
via 2033314... s3-lanman: use spoolss for api_WPrintJobGetInfo().
via 0c80d12... s3-lanman: use spoolss for api_WPrintJobEnumerate().
from 0277143... s3: re-run make samba3-idl.
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 0b2e5debb004ed586e0ec7d926311c32a8b8f9e6
Author: Günther Deschner <gd at samba.org>
Date: Mon Apr 19 11:53:11 2010 +0200
s3-smb2: fix some c++ warnings.
Guenther
commit 7b84d36f19a29e33735bde08151e540d4c2b86b1
Author: Günther Deschner <gd at samba.org>
Date: Mon Apr 19 11:46:03 2010 +0200
s3-spoolss: fix samr_ValidatePassword_Change.
Guenther
commit 7277668128e3a8c138e9dc48ce6c2e85d1aac34f
Author: Günther Deschner <gd at samba.org>
Date: Mon Apr 19 11:45:33 2010 +0200
spoolss: move up enum spoolss_Build in the IDL.
Guenther
commit 2033314a7ca731e9cea76cb3296c3dc85660ae30
Author: Günther Deschner <gd at samba.org>
Date: Sat Apr 10 01:44:08 2010 +0200
s3-lanman: use spoolss for api_WPrintJobGetInfo().
Guenther
commit 0c80d12656267c4e932f8e22750e827d53997f07
Author: Günther Deschner <gd at samba.org>
Date: Sat Apr 10 01:33:37 2010 +0200
s3-lanman: use spoolss for api_WPrintJobEnumerate().
Guenther
-----------------------------------------------------------------------
Summary of changes:
librpc/gen_ndr/ndr_spoolss.c | 50 ++++----
librpc/gen_ndr/ndr_spoolss.h | 2 +-
librpc/gen_ndr/spoolss.h | 26 ++--
librpc/idl/spoolss.idl | 10 +-
source3/rpc_server/srv_samr_nt.c | 2 +-
source3/smbd/lanman.c | 228 ++++++++++++++++++++++++++++++++------
source3/smbd/smb2_server.c | 6 +-
7 files changed, 244 insertions(+), 80 deletions(-)
Changeset truncated at 500 lines:
diff --git a/librpc/gen_ndr/ndr_spoolss.c b/librpc/gen_ndr/ndr_spoolss.c
index a2355b7..552f894 100644
--- a/librpc/gen_ndr/ndr_spoolss.c
+++ b/librpc/gen_ndr/ndr_spoolss.c
@@ -308,6 +308,31 @@ _PUBLIC_ void ndr_print_spoolss_JobStatus(struct ndr_print *ndr, const char *nam
ndr->depth--;
}
+static enum ndr_err_code ndr_push_spoolss_Build(struct ndr_push *ndr, int ndr_flags, enum spoolss_Build r)
+{
+ NDR_CHECK(ndr_push_enum_uint32(ndr, NDR_SCALARS, r));
+ return NDR_ERR_SUCCESS;
+}
+
+static enum ndr_err_code ndr_pull_spoolss_Build(struct ndr_pull *ndr, int ndr_flags, enum spoolss_Build *r)
+{
+ uint32_t v;
+ NDR_CHECK(ndr_pull_enum_uint32(ndr, NDR_SCALARS, &v));
+ *r = v;
+ return NDR_ERR_SUCCESS;
+}
+
+_PUBLIC_ void ndr_print_spoolss_Build(struct ndr_print *ndr, const char *name, enum spoolss_Build r)
+{
+ const char *val = NULL;
+
+ switch (r) {
+ case SPOOLSS_DEBUGGING_BUILD: val = "SPOOLSS_DEBUGGING_BUILD"; break;
+ case SPOOLSS_RELEASE_BUILD: val = "SPOOLSS_RELEASE_BUILD"; break;
+ }
+ ndr_print_enum(ndr, name, "ENUM", val, r);
+}
+
_PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo0(struct ndr_push *ndr, int ndr_flags, const struct spoolss_PrinterInfo0 *r)
{
if (ndr_flags & NDR_SCALARS) {
@@ -6810,31 +6835,6 @@ _PUBLIC_ void ndr_print_spoolss_PrinterControl(struct ndr_print *ndr, const char
ndr_print_enum(ndr, name, "ENUM", val, r);
}
-static enum ndr_err_code ndr_push_spoolss_Build(struct ndr_push *ndr, int ndr_flags, enum spoolss_Build r)
-{
- NDR_CHECK(ndr_push_enum_uint32(ndr, NDR_SCALARS, r));
- return NDR_ERR_SUCCESS;
-}
-
-static enum ndr_err_code ndr_pull_spoolss_Build(struct ndr_pull *ndr, int ndr_flags, enum spoolss_Build *r)
-{
- uint32_t v;
- NDR_CHECK(ndr_pull_enum_uint32(ndr, NDR_SCALARS, &v));
- *r = v;
- return NDR_ERR_SUCCESS;
-}
-
-_PUBLIC_ void ndr_print_spoolss_Build(struct ndr_print *ndr, const char *name, enum spoolss_Build r)
-{
- const char *val = NULL;
-
- switch (r) {
- case SPOOLSS_DEBUGGING_BUILD: val = "SPOOLSS_DEBUGGING_BUILD"; break;
- case SPOOLSS_RELEASE_BUILD: val = "SPOOLSS_RELEASE_BUILD"; break;
- }
- ndr_print_enum(ndr, name, "ENUM", val, r);
-}
-
static enum ndr_err_code ndr_push_spoolss_SetPrinterInfo0(struct ndr_push *ndr, int ndr_flags, const struct spoolss_SetPrinterInfo0 *r)
{
if (ndr_flags & NDR_SCALARS) {
diff --git a/librpc/gen_ndr/ndr_spoolss.h b/librpc/gen_ndr/ndr_spoolss.h
index 2ae3466..2f4411e 100644
--- a/librpc/gen_ndr/ndr_spoolss.h
+++ b/librpc/gen_ndr/ndr_spoolss.h
@@ -243,6 +243,7 @@ enum ndr_err_code ndr_push_spoolss_PrinterStatus(struct ndr_push *ndr, int ndr_f
enum ndr_err_code ndr_pull_spoolss_PrinterStatus(struct ndr_pull *ndr, int ndr_flags, uint32_t *r);
void ndr_print_spoolss_PrinterStatus(struct ndr_print *ndr, const char *name, uint32_t r);
void ndr_print_spoolss_JobStatus(struct ndr_print *ndr, const char *name, uint32_t r);
+void ndr_print_spoolss_Build(struct ndr_print *ndr, const char *name, enum spoolss_Build r);
enum ndr_err_code ndr_push_spoolss_PrinterInfo0(struct ndr_push *ndr, int ndr_flags, const struct spoolss_PrinterInfo0 *r);
enum ndr_err_code ndr_pull_spoolss_PrinterInfo0(struct ndr_pull *ndr, int ndr_flags, struct spoolss_PrinterInfo0 *r);
void ndr_print_spoolss_PrinterInfo0(struct ndr_print *ndr, const char *name, const struct spoolss_PrinterInfo0 *r);
@@ -347,7 +348,6 @@ void ndr_print_spoolss_SetJobInfo(struct ndr_print *ndr, const char *name, const
void ndr_print_spoolss_JobInfoContainer(struct ndr_print *ndr, const char *name, const struct spoolss_JobInfoContainer *r);
void ndr_print_spoolss_JobControl(struct ndr_print *ndr, const char *name, enum spoolss_JobControl r);
void ndr_print_spoolss_PrinterControl(struct ndr_print *ndr, const char *name, enum spoolss_PrinterControl r);
-void ndr_print_spoolss_Build(struct ndr_print *ndr, const char *name, enum spoolss_Build r);
void ndr_print_spoolss_SetPrinterInfo0(struct ndr_print *ndr, const char *name, const struct spoolss_SetPrinterInfo0 *r);
void ndr_print_spoolss_SetPrinterInfo1(struct ndr_print *ndr, const char *name, const struct spoolss_SetPrinterInfo1 *r);
void ndr_print_spoolss_SetPrinterInfo2(struct ndr_print *ndr, const char *name, const struct spoolss_SetPrinterInfo2 *r);
diff --git a/librpc/gen_ndr/spoolss.h b/librpc/gen_ndr/spoolss.h
index f1f0c4f..9d6fb6d 100644
--- a/librpc/gen_ndr/spoolss.h
+++ b/librpc/gen_ndr/spoolss.h
@@ -243,6 +243,19 @@ enum spoolss_MinorVersion
#define JOB_STATUS_RESTART ( 0x00000800 )
#define JOB_STATUS_COMPLETE ( 0x00001000 )
+enum spoolss_Build
+#ifndef USE_UINT_ENUMS
+ {
+ SPOOLSS_DEBUGGING_BUILD=(int)(0x00000000),
+ SPOOLSS_RELEASE_BUILD=(int)(0x00000001)
+}
+#else
+ { __donnot_use_enum_spoolss_Build=0x7FFFFFFF}
+#define SPOOLSS_DEBUGGING_BUILD ( 0x00000000 )
+#define SPOOLSS_RELEASE_BUILD ( 0x00000001 )
+#endif
+;
+
struct spoolss_PrinterInfo0 {
const char * printername;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
const char * servername;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */
@@ -1467,19 +1480,6 @@ enum spoolss_PrinterControl
#endif
;
-enum spoolss_Build
-#ifndef USE_UINT_ENUMS
- {
- SPOOLSS_DEBUGGING_BUILD=(int)(0x00000000),
- SPOOLSS_RELEASE_BUILD=(int)(0x00000001)
-}
-#else
- { __donnot_use_enum_spoolss_Build=0x7FFFFFFF}
-#define SPOOLSS_DEBUGGING_BUILD ( 0x00000000 )
-#define SPOOLSS_RELEASE_BUILD ( 0x00000001 )
-#endif
-;
-
struct spoolss_SetPrinterInfo0 {
const char *servername;/* [unique,charset(UTF16)] */
const char *printername;/* [unique,charset(UTF16)] */
diff --git a/librpc/idl/spoolss.idl b/librpc/idl/spoolss.idl
index 1e5d1f2..4127ffb 100644
--- a/librpc/idl/spoolss.idl
+++ b/librpc/idl/spoolss.idl
@@ -119,6 +119,11 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
JOB_STATUS_COMPLETE = 0x00001000
} spoolss_JobStatus;
+ typedef [v1_enum] enum {
+ SPOOLSS_DEBUGGING_BUILD = 0x00000000,
+ SPOOLSS_RELEASE_BUILD = 0x00000001
+ } spoolss_Build;
+
typedef [public,gensize] struct {
[relative] nstring *printername;
[relative] nstring *servername;
@@ -1146,11 +1151,6 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
SPOOLSS_PRINTER_CONTROL_SET_STATUS = 4
} spoolss_PrinterControl;
- typedef [v1_enum] enum {
- SPOOLSS_DEBUGGING_BUILD = 0x00000000,
- SPOOLSS_RELEASE_BUILD = 0x00000001
- } spoolss_Build;
-
typedef struct {
[string,charset(UTF16)] uint16 *servername;
[string,charset(UTF16)] uint16 *printername;
diff --git a/source3/rpc_server/srv_samr_nt.c b/source3/rpc_server/srv_samr_nt.c
index 3ebfe39..97ed381 100644
--- a/source3/rpc_server/srv_samr_nt.c
+++ b/source3/rpc_server/srv_samr_nt.c
@@ -6698,7 +6698,7 @@ static enum samr_ValidationStatus samr_ValidatePassword_Change(TALLOC_CTX *mem_c
NTSTATUS status;
if (req->password.string == NULL) {
- SAMR_VALIDATION_STATUS_SUCCESS;
+ return SAMR_VALIDATION_STATUS_SUCCESS;
}
if (strlen(req->password.string) < dom_pw_info->min_password_length) {
ZERO_STRUCT(rep->info);
diff --git a/source3/smbd/lanman.c b/source3/smbd/lanman.c
index b9d531f..71d1f4d 100644
--- a/source3/smbd/lanman.c
+++ b/source3/smbd/lanman.c
@@ -547,6 +547,19 @@ static int printj_status(int v)
return 0;
}
+static int printj_spoolss_status(int v)
+{
+ if (v == JOB_STATUS_QUEUED)
+ return RAP_JOB_STATUS_QUEUED;
+ if (v & JOB_STATUS_PAUSED)
+ return RAP_JOB_STATUS_PAUSED;
+ if (v & JOB_STATUS_SPOOLING)
+ return RAP_JOB_STATUS_SPOOLING;
+ if (v & JOB_STATUS_PRINTING)
+ return RAP_JOB_STATUS_PRINTING;
+ return 0;
+}
+
/* turn a print queue status into a on the wire status
*/
static int printq_status(int v)
@@ -618,6 +631,80 @@ static void fill_printjob_info(connection_struct *conn, int snum, int uLevel,
}
}
+static time_t spoolss_Time_to_time_t(const struct spoolss_Time *r)
+{
+ struct tm unixtime;
+
+ unixtime.tm_year = r->year - 1900;
+ unixtime.tm_mon = r->month - 1;
+ unixtime.tm_wday = r->day_of_week;
+ unixtime.tm_mday = r->day;
+ unixtime.tm_hour = r->hour;
+ unixtime.tm_min = r->minute;
+ unixtime.tm_sec = r->second;
+
+ return mktime(&unixtime);
+}
+
+static void fill_spoolss_printjob_info(int uLevel,
+ struct pack_desc *desc,
+ struct spoolss_JobInfo2 *info2,
+ int n)
+{
+ time_t t = spoolss_Time_to_time_t(&info2->submitted);
+
+ /* the client expects localtime */
+ t -= get_time_zone(t);
+
+ PACKI(desc,"W",pjobid_to_rap(info2->printer_name, info2->job_id)); /* uJobId */
+ if (uLevel == 1) {
+ PACKS(desc,"B21", info2->user_name); /* szUserName */
+ PACKS(desc,"B",""); /* pad */
+ PACKS(desc,"B16",""); /* szNotifyName */
+ PACKS(desc,"B10","PM_Q_RAW"); /* szDataType */
+ PACKS(desc,"z",""); /* pszParms */
+ PACKI(desc,"W",n+1); /* uPosition */
+ PACKI(desc,"W", printj_spoolss_status(info2->status)); /* fsStatus */
+ PACKS(desc,"z",""); /* pszStatus */
+ PACKI(desc,"D", t); /* ulSubmitted */
+ PACKI(desc,"D", info2->size); /* ulSize */
+ PACKS(desc,"z", info2->document_name); /* pszComment */
+ }
+ if (uLevel == 2 || uLevel == 3 || uLevel == 4) {
+ PACKI(desc,"W", info2->priority); /* uPriority */
+ PACKS(desc,"z", info2->user_name); /* pszUserName */
+ PACKI(desc,"W",n+1); /* uPosition */
+ PACKI(desc,"W", printj_spoolss_status(info2->status)); /* fsStatus */
+ PACKI(desc,"D",t); /* ulSubmitted */
+ PACKI(desc,"D", info2->size); /* ulSize */
+ PACKS(desc,"z","Samba"); /* pszComment */
+ PACKS(desc,"z", info2->document_name); /* pszDocument */
+ if (uLevel == 3) {
+ PACKS(desc,"z",""); /* pszNotifyName */
+ PACKS(desc,"z","PM_Q_RAW"); /* pszDataType */
+ PACKS(desc,"z",""); /* pszParms */
+ PACKS(desc,"z",""); /* pszStatus */
+ PACKS(desc,"z", info2->printer_name); /* pszQueue */
+ PACKS(desc,"z","lpd"); /* pszQProcName */
+ PACKS(desc,"z",""); /* pszQProcParms */
+ PACKS(desc,"z","NULL"); /* pszDriverName */
+ PackDriverData(desc); /* pDriverData */
+ PACKS(desc,"z",""); /* pszPrinterName */
+ } else if (uLevel == 4) { /* OS2 */
+ PACKS(desc,"z",""); /* pszSpoolFileName */
+ PACKS(desc,"z",""); /* pszPortName */
+ PACKS(desc,"z",""); /* pszStatus */
+ PACKI(desc,"D",0); /* ulPagesSpooled */
+ PACKI(desc,"D",0); /* ulPagesSent */
+ PACKI(desc,"D",0); /* ulPagesPrinted */
+ PACKI(desc,"D",0); /* ulTimePrinted */
+ PACKI(desc,"D",0); /* ulExtendJobStatus */
+ PACKI(desc,"D",0); /* ulStartPage */
+ PACKI(desc,"D",0); /* ulEndPage */
+ }
+ }
+}
+
/********************************************************************
Return a driver name given an snum.
Returns True if from tdb, False otherwise.
@@ -4184,16 +4271,19 @@ static bool api_WPrintJobGetInfo(connection_struct *conn, uint16 vuid,
char *str2 = skip_string(param,tpscnt,str1);
char *p = skip_string(param,tpscnt,str2);
int uLevel;
- int count;
- int i;
- int snum;
fstring sharename;
uint32 jobid;
struct pack_desc desc;
- print_queue_struct *queue=NULL;
- print_status_struct status;
char *tmpdata=NULL;
+ TALLOC_CTX *mem_ctx = talloc_tos();
+ WERROR werr;
+ NTSTATUS status;
+ struct rpc_pipe_client *cli = NULL;
+ struct policy_handle handle;
+ struct spoolss_DevmodeContainer devmode_ctr;
+ union spoolss_JobInfo info;
+
if (!str1 || !str2 || !p) {
return False;
}
@@ -4217,16 +4307,45 @@ static bool api_WPrintJobGetInfo(connection_struct *conn, uint16 vuid,
return False;
}
- snum = lp_servicenumber( sharename);
- if (snum < 0 || !VALID_SNUM(snum)) {
- return(False);
+ ZERO_STRUCT(handle);
+
+ status = rpc_pipe_open_internal(mem_ctx, &ndr_table_spoolss.syntax_id,
+ rpc_spoolss_dispatch, conn->server_info,
+ &cli);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(0,("api_WPrintJobGetInfo: could not connect to spoolss: %s\n",
+ nt_errstr(status)));
+ desc.errcode = W_ERROR_V(ntstatus_to_werror(status));
+ goto out;
}
- count = print_queue_status(snum,&queue,&status);
- for (i = 0; i < count; i++) {
- if (queue[i].job == jobid) {
- break;
- }
+ ZERO_STRUCT(devmode_ctr);
+
+ status = rpccli_spoolss_OpenPrinter(cli, mem_ctx,
+ sharename,
+ NULL,
+ devmode_ctr,
+ SEC_FLAG_MAXIMUM_ALLOWED,
+ &handle,
+ &werr);
+ if (!NT_STATUS_IS_OK(status)) {
+ desc.errcode = W_ERROR_V(ntstatus_to_werror(status));
+ goto out;
+ }
+ if (!W_ERROR_IS_OK(werr)) {
+ desc.errcode = W_ERROR_V(werr);
+ goto out;
+ }
+
+ werr = rpccli_spoolss_getjob(cli, mem_ctx,
+ &handle,
+ jobid,
+ 2, /* level */
+ 0, /* offered */
+ &info);
+ if (!W_ERROR_IS_OK(werr)) {
+ desc.errcode = W_ERROR_V(werr);
+ goto out;
}
if (mdrcnt > 0) {
@@ -4246,13 +4365,15 @@ static bool api_WPrintJobGetInfo(connection_struct *conn, uint16 vuid,
}
if (init_package(&desc,1,0)) {
- if (i < count) {
- fill_printjob_info(conn,snum,uLevel,&desc,&queue[i],i);
- *rdata_len = desc.usedlen;
- } else {
- desc.errcode = NERR_JobNotFound;
- *rdata_len = 0;
- }
+ fill_spoolss_printjob_info(uLevel, &desc, &info.info2, info.info2.position);
+ *rdata_len = desc.usedlen;
+ } else {
+ desc.errcode = NERR_JobNotFound;
+ *rdata_len = 0;
+ }
+ out:
+ if (is_valid_policy_hnd(&handle)) {
+ rpccli_spoolss_ClosePrinter(cli, mem_ctx, &handle, NULL);
}
*rparam_len = 6;
@@ -4264,7 +4385,6 @@ static bool api_WPrintJobGetInfo(connection_struct *conn, uint16 vuid,
SSVAL(*rparam,2,0);
SSVAL(*rparam,4,desc.neededlen);
- SAFE_FREE(queue);
SAFE_FREE(tmpdata);
DEBUG(4,("WPrintJobGetInfo: errorcode %d\n",desc.errcode));
@@ -4284,12 +4404,17 @@ static bool api_WPrintJobEnumerate(connection_struct *conn, uint16 vuid,
char *p = skip_string(param,tpscnt,str2);
char *name = p;
int uLevel;
- int count;
int i, succnt=0;
- int snum;
struct pack_desc desc;
- print_queue_struct *queue=NULL;
- print_status_struct status;
+
+ TALLOC_CTX *mem_ctx = talloc_tos();
+ WERROR werr;
+ NTSTATUS status;
+ struct rpc_pipe_client *cli = NULL;
+ struct policy_handle handle;
+ struct spoolss_DevmodeContainer devmode_ctr;
+ uint32_t count;
+ union spoolss_JobInfo *info;
if (!str1 || !str2 || !p) {
return False;
@@ -4319,12 +4444,49 @@ static bool api_WPrintJobEnumerate(connection_struct *conn, uint16 vuid,
return False;
}
- snum = find_service(name);
- if ( !(lp_snum_ok(snum) && lp_print_ok(snum)) ) {
- return False;
+ ZERO_STRUCT(handle);
+
+ status = rpc_pipe_open_internal(mem_ctx, &ndr_table_spoolss.syntax_id,
+ rpc_spoolss_dispatch, conn->server_info,
+ &cli);
+ if (!NT_STATUS_IS_OK(status)) {
+ DEBUG(0,("api_RDosPrintJobDel: could not connect to spoolss: %s\n",
+ nt_errstr(status)));
+ desc.errcode = W_ERROR_V(ntstatus_to_werror(status));
+ goto out;
+ }
+
+ ZERO_STRUCT(devmode_ctr);
+
+ status = rpccli_spoolss_OpenPrinter(cli, mem_ctx,
+ name,
+ NULL,
+ devmode_ctr,
+ SEC_FLAG_MAXIMUM_ALLOWED,
+ &handle,
+ &werr);
+ if (!NT_STATUS_IS_OK(status)) {
+ desc.errcode = W_ERROR_V(ntstatus_to_werror(status));
+ goto out;
+ }
+ if (!W_ERROR_IS_OK(werr)) {
+ desc.errcode = W_ERROR_V(werr);
+ goto out;
+ }
+
+ werr = rpccli_spoolss_enumjobs(cli, mem_ctx,
+ &handle,
+ 0, /* firstjob */
+ 0xff, /* numjobs */
+ 2, /* level */
+ 0, /* offered */
+ &count,
+ &info);
+ if (!W_ERROR_IS_OK(werr)) {
+ desc.errcode = W_ERROR_V(werr);
+ goto out;
}
- count = print_queue_status(snum,&queue,&status);
if (mdrcnt > 0) {
*rdata = smb_realloc_limit(*rdata,mdrcnt);
if (!*rdata) {
@@ -4337,12 +4499,16 @@ static bool api_WPrintJobEnumerate(connection_struct *conn, uint16 vuid,
if (init_package(&desc,count,0)) {
succnt = 0;
for (i = 0; i < count; i++) {
- fill_printjob_info(conn,snum,uLevel,&desc,&queue[i],i);
+ fill_spoolss_printjob_info(uLevel, &desc, &info[i].info2, i);
if (desc.errcode == NERR_Success) {
succnt = i+1;
}
}
}
+ out:
+ if (is_valid_policy_hnd(&handle)) {
+ rpccli_spoolss_ClosePrinter(cli, mem_ctx, &handle, NULL);
+ }
*rdata_len = desc.usedlen;
@@ -4356,8 +4522,6 @@ static bool api_WPrintJobEnumerate(connection_struct *conn, uint16 vuid,
SSVAL(*rparam,4,succnt);
SSVAL(*rparam,6,count);
- SAFE_FREE(queue);
-
DEBUG(4,("WPrintJobEnumerate: errorcode %d\n",desc.errcode));
return True;
diff --git a/source3/smbd/smb2_server.c b/source3/smbd/smb2_server.c
index 0b3222e..55111da 100644
--- a/source3/smbd/smb2_server.c
+++ b/source3/smbd/smb2_server.c
@@ -558,7 +558,7 @@ static NTSTATUS smb2_send_async_interim_response(const struct smbd_smb2_request
/* Step back to the previous reply. */
i = nreq->current_idx - 3;
- outhdr = nreq->out.vector[i].iov_base;
--
Samba Shared Repository
More information about the samba-cvs
mailing list