[SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0pre2-3020-gb34283a

Volker Lendecke vlendec at samba.org
Thu Jun 26 11:14:30 GMT 2008


The branch, v3-3-test has been updated
       via  b34283adeffaa6e481c57926709ea80d48733ef0 (commit)
       via  510f45d01a19ce1c226755ac42a328241098b2e0 (commit)
       via  e2009c0b8dc229faf98ce189d2a906e58d3e1e63 (commit)
       via  fd43059b3dfa8cdac9814de1c76f963ba5de9bcb (commit)
       via  d4cf5a131919530317cd457006b4df5af2c69fa7 (commit)
       via  fbc00460f8deaa57bfbf16b12d29acec56578b63 (commit)
       via  aefad64e3a5c86d2f988d47e6215ed2085b8fc47 (commit)
       via  41d2daeaa5a87da82a0debc4c9cfe14976215bd8 (commit)
       via  d621867bb8767e1c4236d28dd9294a61db6cbb10 (commit)
      from  fee770e5d080b0513418e61e469f2824a1d771ec (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test


- Log -----------------------------------------------------------------
commit b34283adeffaa6e481c57926709ea80d48733ef0
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jun 24 17:04:02 2008 +0200

    remove unused extern current_user from nt_printing.c

commit 510f45d01a19ce1c226755ac42a328241098b2e0
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jun 24 16:58:29 2008 +0200

    Remove current_user reference from printfsp.c

commit e2009c0b8dc229faf98ce189d2a906e58d3e1e63
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jun 24 16:58:12 2008 +0200

    remove unused extern current_user from lanman.c

commit fd43059b3dfa8cdac9814de1c76f963ba5de9bcb
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jun 24 16:03:28 2008 +0200

    Change print_access_check to take auth_serversupplied_info instead of current_user
    
    Reason: This is the main user of p->current_user which I would like to remove

commit d4cf5a131919530317cd457006b4df5af2c69fa7
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jun 24 15:24:08 2008 +0200

    Remove p->vuid
    
    The users can use p->server_info.
    
    Now pipes_struct is decoupled from the SMB transport.

commit fbc00460f8deaa57bfbf16b12d29acec56578b63
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jun 24 15:21:46 2008 +0200

    Remove a check on p->vuid in _netr_LogonSamLogon/off
    
    This is in preparation of removing p->vuid completely. I don't think this check
    here makes any sort of sense, it only proves that the user having done the
    session setup on its way to the schannel bind (ususally anonymous) did not do a
    logoff in between. But this would have been caught way before this in
    reply_pipe_write_and_X.

commit aefad64e3a5c86d2f988d47e6215ed2085b8fc47
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jun 24 14:33:31 2008 +0200

    Now that we have p->server_info, use p->server_info->user_session_key

commit 41d2daeaa5a87da82a0debc4c9cfe14976215bd8
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jun 24 14:25:23 2008 +0200

    Fix typo

commit d621867bb8767e1c4236d28dd9294a61db6cbb10
Author: Volker Lendecke <vl at samba.org>
Date:   Tue Jun 24 14:18:55 2008 +0200

    Add server_info to pipes_struct

-----------------------------------------------------------------------

Summary of changes:
 source/auth/auth_util.c            |   16 ++++++
 source/include/ntdomain.h          |    3 +-
 source/include/proto.h             |   28 +++++++----
 source/printing/nt_printing.c      |   17 +++----
 source/printing/printfsp.c         |    8 +--
 source/printing/printing.c         |   93 ++++++++++++++++++-----------------
 source/rpc_server/srv_lsa_hnd.c    |    8 +---
 source/rpc_server/srv_lsa_nt.c     |   10 +---
 source/rpc_server/srv_netlog_nt.c  |    6 --
 source/rpc_server/srv_pipe.c       |   55 +++++++++++++++-------
 source/rpc_server/srv_pipe_hnd.c   |   19 ++++---
 source/rpc_server/srv_samr_nt.c    |   22 +++++----
 source/rpc_server/srv_spoolss_nt.c |   19 ++++----
 source/rpc_server/srv_wkssvc_nt.c  |   14 ++---
 source/smbd/lanman.c               |   20 +++++---
 source/smbd/open.c                 |    2 +-
 source/smbd/reply.c                |    2 +-
 17 files changed, 189 insertions(+), 153 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source/auth/auth_util.c b/source/auth/auth_util.c
index b1558bc..998a81b 100644
--- a/source/auth/auth_util.c
+++ b/source/auth/auth_util.c
@@ -1334,6 +1334,22 @@ struct auth_serversupplied_info *copy_serverinfo(TALLOC_CTX *mem_ctx,
 	return dst;
 }
 
+/*
+ * Set a new session key. Used in the rpc server where we have to override the
+ * SMB level session key with SystemLibraryDTC
+ */
+
+bool server_info_set_session_key(struct auth_serversupplied_info *info,
+				 DATA_BLOB session_key)
+{
+	TALLOC_FREE(info->user_session_key.data);
+
+	info->user_session_key = data_blob_talloc(
+		info, session_key.data, session_key.length);
+
+	return (info->user_session_key.data != NULL);
+}
+
 static auth_serversupplied_info *guest_info = NULL;
 
 bool init_guest_info(void)
diff --git a/source/include/ntdomain.h b/source/include/ntdomain.h
index caf7e34..1829b19 100644
--- a/source/include/ntdomain.h
+++ b/source/include/ntdomain.h
@@ -213,7 +213,7 @@ typedef struct pipes_struct {
 
 	char client_address[INET6_ADDRSTRLEN];
 
-	uint16 vuid; /* points to the unauthenticated user that opened this pipe. */
+	struct auth_serversupplied_info *server_info;
 
 	fstring name;
 	fstring pipe_srv_name;
@@ -235,7 +235,6 @@ typedef struct pipes_struct {
 	 */
 
 	struct current_user pipe_user;
-	DATA_BLOB session_key;
  
 	/*
 	 * Set to true when an RPC bind has been done on this pipe.
diff --git a/source/include/proto.h b/source/include/proto.h
index 1eb5fbd..6cef348 100644
--- a/source/include/proto.h
+++ b/source/include/proto.h
@@ -122,6 +122,8 @@ NTSTATUS make_serverinfo_from_username(TALLOC_CTX *mem_ctx,
 struct auth_serversupplied_info *copy_serverinfo(TALLOC_CTX *mem_ctx,
 						 auth_serversupplied_info *src);
 bool init_guest_info(void);
+bool server_info_set_session_key(struct auth_serversupplied_info *info,
+				 DATA_BLOB session_key);
 NTSTATUS make_server_info_guest(TALLOC_CTX *mem_ctx,
 				auth_serversupplied_info **server_info);
 bool copy_current_user(struct current_user *dst, struct current_user *src);
@@ -6689,7 +6691,8 @@ WERROR nt_printing_setsec(const char *sharename, SEC_DESC_BUF *secdesc_ctr);
 bool nt_printing_getsec(TALLOC_CTX *ctx, const char *sharename, SEC_DESC_BUF **secdesc_ctr);
 void map_printer_permissions(SEC_DESC *sd);
 void map_job_permissions(SEC_DESC *sd);
-bool print_access_check(struct current_user *user, int snum, int access_type);
+bool print_access_check(struct auth_serversupplied_info *server_info, int snum,
+			int access_type);
 bool print_time_access_check(const char *servicename);
 char* get_server_name( Printer_entry *printer );
 
@@ -6724,7 +6727,7 @@ bool sysv_cache_reload(void);
 /* The following definitions come from printing/printfsp.c  */
 
 NTSTATUS print_fsp_open(connection_struct *conn, const char *fname,
-			files_struct **result);
+			uint16_t current_vuid, files_struct **result);
 void print_fsp_end(files_struct *fsp, enum file_close_type close_type);
 
 /* The following definitions come from printing/printing.c  */
@@ -6745,20 +6748,27 @@ char *print_job_fname(const char* sharename, uint32 jobid);
 NT_DEVICEMODE *print_job_devmode(const char* sharename, uint32 jobid);
 bool print_job_set_place(const char *sharename, uint32 jobid, int place);
 bool print_job_set_name(const char *sharename, uint32 jobid, char *name);
-bool print_job_delete(struct current_user *user, int snum, uint32 jobid, WERROR *errcode);
-bool print_job_pause(struct current_user *user, int snum, uint32 jobid, WERROR *errcode);
-bool print_job_resume(struct current_user *user, int snum, uint32 jobid, WERROR *errcode);
+bool print_job_delete(struct auth_serversupplied_info *server_info, int snum,
+		      uint32 jobid, WERROR *errcode);
+bool print_job_pause(struct auth_serversupplied_info *server_info, int snum,
+		     uint32 jobid, WERROR *errcode);
+bool print_job_resume(struct auth_serversupplied_info *server_info, int snum,
+		      uint32 jobid, WERROR *errcode);
 ssize_t print_job_write(int snum, uint32 jobid, const char *buf, SMB_OFF_T pos, size_t size);
 int print_queue_length(int snum, print_status_struct *pstatus);
-uint32 print_job_start(struct current_user *user, int snum, char *jobname, NT_DEVICEMODE *nt_devmode );
+uint32 print_job_start(struct auth_serversupplied_info *server_info, int snum,
+		       char *jobname, NT_DEVICEMODE *nt_devmode );
 void print_job_endpage(int snum, uint32 jobid);
 bool print_job_end(int snum, uint32 jobid, enum file_close_type close_type);
 int print_queue_status(int snum, 
 		       print_queue_struct **ppqueue,
 		       print_status_struct *status);
-bool print_queue_pause(struct current_user *user, int snum, WERROR *errcode);
-bool print_queue_resume(struct current_user *user, int snum, WERROR *errcode);
-bool print_queue_purge(struct current_user *user, int snum, WERROR *errcode);
+bool print_queue_pause(struct auth_serversupplied_info *server_info, int snum,
+		       WERROR *errcode);
+bool print_queue_resume(struct auth_serversupplied_info *server_info, int snum,
+			WERROR *errcode);
+bool print_queue_purge(struct auth_serversupplied_info *server_info, int snum,
+		       WERROR *errcode);
 
 /* The following definitions come from printing/printing_db.c  */
 
diff --git a/source/printing/nt_printing.c b/source/printing/nt_printing.c
index c13ab5a..ded985c 100644
--- a/source/printing/nt_printing.c
+++ b/source/printing/nt_printing.c
@@ -21,8 +21,6 @@
 
 #include "includes.h"
 
-extern struct current_user current_user;
-
 static TDB_CONTEXT *tdb_forms; /* used for forms files */
 static TDB_CONTEXT *tdb_drivers; /* used for driver files */
 static TDB_CONTEXT *tdb_printers; /* used for printers files */
@@ -5763,7 +5761,8 @@ void map_job_permissions(SEC_DESC *sd)
     3)  "printer admins" (may result in numerous calls to winbind)
 
  ****************************************************************************/
-bool print_access_check(struct current_user *user, int snum, int access_type)
+bool print_access_check(struct auth_serversupplied_info *server_info, int snum,
+			int access_type)
 {
 	SEC_DESC_BUF *secdesc = NULL;
 	uint32 access_granted;
@@ -5775,12 +5774,10 @@ bool print_access_check(struct current_user *user, int snum, int access_type)
 	
 	/* If user is NULL then use the current_user structure */
 
-	if (!user)
-		user = &current_user;
-
 	/* Always allow root or SE_PRINT_OPERATROR to do anything */
 
-	if ( user->ut.uid == 0 || user_has_privileges(user->nt_user_token, &se_printop ) ) {
+	if (server_info->utok.uid == 0
+	    || user_has_privileges(server_info->ptok, &se_printop ) ) {
 		return True;
 	}
 
@@ -5827,7 +5824,7 @@ bool print_access_check(struct current_user *user, int snum, int access_type)
 	}
 
 	/* Check access */
-	result = se_access_check(secdesc->sd, user->nt_user_token, access_type,
+	result = se_access_check(secdesc->sd, server_info->ptok, access_type,
 				 &access_granted, &status);
 
 	DEBUG(4, ("access check was %s\n", result ? "SUCCESS" : "FAILURE"));
@@ -5835,8 +5832,8 @@ bool print_access_check(struct current_user *user, int snum, int access_type)
         /* see if we need to try the printer admin list */
 
         if ((access_granted == 0) &&
-	    (token_contains_name_in_list(uidtoname(user->ut.uid), NULL, NULL,
-					 user->nt_user_token,
+	    (token_contains_name_in_list(uidtoname(server_info->utok.uid),
+					 NULL, NULL, server_info->ptok,
 					 lp_printer_admin(snum)))) {
 		talloc_destroy(mem_ctx);
 		return True;
diff --git a/source/printing/printfsp.c b/source/printing/printfsp.c
index 1fde16b..c674922 100644
--- a/source/printing/printfsp.c
+++ b/source/printing/printfsp.c
@@ -20,15 +20,13 @@
 
 #include "includes.h"
 
-extern struct current_user current_user;
-
 /***************************************************************************
 open a print file and setup a fsp for it. This is a wrapper around
 print_job_start().
 ***************************************************************************/
 
 NTSTATUS print_fsp_open(connection_struct *conn, const char *fname,
-			files_struct **result)
+			uint16_t current_vuid, files_struct **result)
 {
 	int jobid;
 	SMB_STRUCT_STAT sbuf;
@@ -51,7 +49,7 @@ NTSTATUS print_fsp_open(connection_struct *conn, const char *fname,
 		fstrcat(name, p);
 	}
 
-	jobid = print_job_start(&current_user, SNUM(conn), name, NULL);
+	jobid = print_job_start(conn->server_info, SNUM(conn), name, NULL);
 	if (jobid == -1) {
 		status = map_nt_error_from_unix(errno);
 		file_free(fsp);
@@ -70,7 +68,7 @@ NTSTATUS print_fsp_open(connection_struct *conn, const char *fname,
 	/* setup a full fsp */
 	fsp->fh->fd = print_job_fd(lp_const_servicename(SNUM(conn)),jobid);
 	GetTimeOfDay(&fsp->open_time);
-	fsp->vuid = current_user.vuid;
+	fsp->vuid = current_vuid;
 	fsp->fh->pos = -1;
 	fsp->can_lock = True;
 	fsp->can_read = False;
diff --git a/source/printing/printing.c b/source/printing/printing.c
index aa67f08..a425b87 100644
--- a/source/printing/printing.c
+++ b/source/printing/printing.c
@@ -1979,28 +1979,24 @@ static bool print_job_delete1(int snum, uint32 jobid)
  Return true if the current user owns the print job.
 ****************************************************************************/
 
-static bool is_owner(struct current_user *user, const char *servicename,
+static bool is_owner(struct auth_serversupplied_info *server_info,
+		     const char *servicename,
 		     uint32 jobid)
 {
 	struct printjob *pjob = print_job_find(servicename, jobid);
-	user_struct *vuser;
 
-	if (!pjob || !user)
+	if (!pjob || !server_info)
 		return False;
 
-	if ((vuser = get_valid_user_struct(user->vuid)) != NULL) {
-		return strequal(pjob->user,
-				vuser->server_info->sanitized_username);
-	} else {
-		return strequal(pjob->user, uidtoname(user->ut.uid));
-	}
+	return strequal(pjob->user, server_info->sanitized_username);
 }
 
 /****************************************************************************
  Delete a print job.
 ****************************************************************************/
 
-bool print_job_delete(struct current_user *user, int snum, uint32 jobid, WERROR *errcode)
+bool print_job_delete(struct auth_serversupplied_info *server_info, int snum,
+		      uint32 jobid, WERROR *errcode)
 {
 	const char* sharename = lp_const_servicename( snum );
 	struct printjob *pjob;
@@ -2009,13 +2005,13 @@ bool print_job_delete(struct current_user *user, int snum, uint32 jobid, WERROR
 
 	*errcode = WERR_OK;
 		
-	owner = is_owner(user, lp_const_servicename(snum), jobid);
+	owner = is_owner(server_info, lp_const_servicename(snum), jobid);
 	
 	/* Check access against security descriptor or whether the user
 	   owns their job. */
 
 	if (!owner && 
-	    !print_access_check(user, snum, JOB_ACCESS_ADMINISTER)) {
+	    !print_access_check(server_info, snum, JOB_ACCESS_ADMINISTER)) {
 		DEBUG(3, ("delete denied by security descriptor\n"));
 		*errcode = WERR_ACCESS_DENIED;
 
@@ -2023,7 +2019,8 @@ bool print_job_delete(struct current_user *user, int snum, uint32 jobid, WERROR
 		sys_adminlog( LOG_ERR, 
 			      "Permission denied-- user not allowed to delete, \
 pause, or resume print job. User name: %s. Printer name: %s.",
-			      uidtoname(user->ut.uid), PRINTERNAME(snum) );
+			      uidtoname(server_info->utok.uid),
+			      PRINTERNAME(snum) );
 		/* END_ADMIN_LOG */
 
 		return False;
@@ -2067,7 +2064,8 @@ pause, or resume print job. User name: %s. Printer name: %s.",
  Pause a job.
 ****************************************************************************/
 
-bool print_job_pause(struct current_user *user, int snum, uint32 jobid, WERROR *errcode)
+bool print_job_pause(struct auth_serversupplied_info *server_info, int snum,
+		     uint32 jobid, WERROR *errcode)
 {
 	const char* sharename = lp_const_servicename(snum);
 	struct printjob *pjob;
@@ -2076,7 +2074,7 @@ bool print_job_pause(struct current_user *user, int snum, uint32 jobid, WERROR *
 
 	pjob = print_job_find(sharename, jobid);
 	
-	if (!pjob || !user) {
+	if (!pjob || !server_info) {
 		DEBUG(10, ("print_job_pause: no pjob or user for jobid %u\n",
 			(unsigned int)jobid ));
 		return False;
@@ -2088,15 +2086,16 @@ bool print_job_pause(struct current_user *user, int snum, uint32 jobid, WERROR *
 		return False;
 	}
 
-	if (!is_owner(user, lp_const_servicename(snum), jobid) &&
-	    !print_access_check(user, snum, JOB_ACCESS_ADMINISTER)) {
+	if (!is_owner(server_info, lp_const_servicename(snum), jobid) &&
+	    !print_access_check(server_info, snum, JOB_ACCESS_ADMINISTER)) {
 		DEBUG(3, ("pause denied by security descriptor\n"));
 
 		/* BEGIN_ADMIN_LOG */
 		sys_adminlog( LOG_ERR, 
 			"Permission denied-- user not allowed to delete, \
 pause, or resume print job. User name: %s. Printer name: %s.",
-				uidtoname(user->ut.uid), PRINTERNAME(snum) );
+			      uidtoname(server_info->utok.uid),
+			      PRINTERNAME(snum) );
 		/* END_ADMIN_LOG */
 
 		*errcode = WERR_ACCESS_DENIED;
@@ -2127,7 +2126,8 @@ pause, or resume print job. User name: %s. Printer name: %s.",
  Resume a job.
 ****************************************************************************/
 
-bool print_job_resume(struct current_user *user, int snum, uint32 jobid, WERROR *errcode)
+bool print_job_resume(struct auth_serversupplied_info *server_info, int snum,
+		      uint32 jobid, WERROR *errcode)
 {
 	const char *sharename = lp_const_servicename(snum);
 	struct printjob *pjob;
@@ -2135,8 +2135,8 @@ bool print_job_resume(struct current_user *user, int snum, uint32 jobid, WERROR
 	struct printif *current_printif = get_printer_fns( snum );
 
 	pjob = print_job_find(sharename, jobid);
-	
-	if (!pjob || !user) {
+
+	if (!pjob || !server_info) {
 		DEBUG(10, ("print_job_resume: no pjob or user for jobid %u\n",
 			(unsigned int)jobid ));
 		return False;
@@ -2148,8 +2148,8 @@ bool print_job_resume(struct current_user *user, int snum, uint32 jobid, WERROR
 		return False;
 	}
 
-	if (!is_owner(user, lp_const_servicename(snum), jobid) &&
-	    !print_access_check(user, snum, JOB_ACCESS_ADMINISTER)) {
+	if (!is_owner(server_info, lp_const_servicename(snum), jobid) &&
+	    !print_access_check(server_info, snum, JOB_ACCESS_ADMINISTER)) {
 		DEBUG(3, ("resume denied by security descriptor\n"));
 		*errcode = WERR_ACCESS_DENIED;
 
@@ -2157,7 +2157,8 @@ bool print_job_resume(struct current_user *user, int snum, uint32 jobid, WERROR
 		sys_adminlog( LOG_ERR, 
 			 "Permission denied-- user not allowed to delete, \
 pause, or resume print job. User name: %s. Printer name: %s.",
-			uidtoname(user->ut.uid), PRINTERNAME(snum) );
+			      uidtoname(server_info->utok.uid),
+			      PRINTERNAME(snum) );
 		/* END_ADMIN_LOG */
 		return False;
 	}
@@ -2357,12 +2358,12 @@ static bool add_to_jobs_changed(struct tdb_print_db *pdb, uint32 jobid)
  Start spooling a job - return the jobid.
 ***************************************************************************/
 
-uint32 print_job_start(struct current_user *user, int snum, char *jobname, NT_DEVICEMODE *nt_devmode )
+uint32 print_job_start(struct auth_serversupplied_info *server_info, int snum,
+		       char *jobname, NT_DEVICEMODE *nt_devmode )
 {
 	uint32 jobid;
 	char *path;
 	struct printjob pjob;
-	user_struct *vuser;
 	const char *sharename = lp_const_servicename(snum);
 	struct tdb_print_db *pdb = get_print_db_byname(sharename);
 	int njobs;
@@ -2372,7 +2373,7 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname, NT_DE
 	if (!pdb)
 		return (uint32)-1;
 
-	if (!print_access_check(user, snum, PRINTER_ACCESS_USE)) {
+	if (!print_access_check(server_info, snum, PRINTER_ACCESS_USE)) {
 		DEBUG(3, ("print_job_start: job start denied by security descriptor\n"));
 		release_print_db(pdb);
 		return (uint32)-1;
@@ -2437,17 +2438,12 @@ uint32 print_job_start(struct current_user *user, int snum, char *jobname, NT_DE
 	
 	fstrcpy(pjob.jobname, jobname);
 
-	if ((vuser = get_valid_user_struct(user->vuid)) != NULL) {
-		fstrcpy(pjob.user, lp_printjob_username(snum));
-		standard_sub_basic(
-			vuser->server_info->sanitized_username,
-			pdb_get_domain(vuser->server_info->sam_account),
-			pjob.user, sizeof(pjob.user)-1);
-		/* ensure NULL termination */ 
-		pjob.user[sizeof(pjob.user)-1] = '\0'; 
-	} else {
-		fstrcpy(pjob.user, uidtoname(user->ut.uid));
-	}
+	fstrcpy(pjob.user, lp_printjob_username(snum));
+	standard_sub_basic(server_info->sanitized_username,
+			   pdb_get_domain(server_info->sam_account),
+			   pjob.user, sizeof(pjob.user)-1);
+	/* ensure NULL termination */
+	pjob.user[sizeof(pjob.user)-1] = '\0';
 
 	fstrcpy(pjob.queuename, lp_const_servicename(snum));
 
@@ -2775,12 +2771,14 @@ int print_queue_status(int snum,
  Pause a queue.
 ****************************************************************************/
 
-bool print_queue_pause(struct current_user *user, int snum, WERROR *errcode)
+bool print_queue_pause(struct auth_serversupplied_info *server_info, int snum,
+		       WERROR *errcode)
 {
 	int ret;
 	struct printif *current_printif = get_printer_fns( snum );
 	
-	if (!print_access_check(user, snum, PRINTER_ACCESS_ADMINISTER)) {
+	if (!print_access_check(server_info, snum,
+				PRINTER_ACCESS_ADMINISTER)) {
 		*errcode = WERR_ACCESS_DENIED;
 		return False;
 	}
@@ -2811,12 +2809,14 @@ bool print_queue_pause(struct current_user *user, int snum, WERROR *errcode)
  Resume a queue.
 ****************************************************************************/
 
-bool print_queue_resume(struct current_user *user, int snum, WERROR *errcode)
+bool print_queue_resume(struct auth_serversupplied_info *server_info, int snum,
+			WERROR *errcode)
 {
 	int ret;
 	struct printif *current_printif = get_printer_fns( snum );
 
-	if (!print_access_check(user, snum, PRINTER_ACCESS_ADMINISTER)) {
+	if (!print_access_check(server_info, snum,
+				PRINTER_ACCESS_ADMINISTER)) {
 		*errcode = WERR_ACCESS_DENIED;
 		return False;
 	}
@@ -2847,7 +2847,8 @@ bool print_queue_resume(struct current_user *user, int snum, WERROR *errcode)
  Purge a queue - implemented by deleting all jobs that we can delete.
 ****************************************************************************/
 
-bool print_queue_purge(struct current_user *user, int snum, WERROR *errcode)
+bool print_queue_purge(struct auth_serversupplied_info *server_info, int snum,
+		       WERROR *errcode)
 {
 	print_queue_struct *queue;
 	print_status_struct status;
@@ -2857,14 +2858,16 @@ bool print_queue_purge(struct current_user *user, int snum, WERROR *errcode)
 	/* Force and update so the count is accurate (i.e. not a cached count) */
 	print_queue_update(snum, True);
 	
-	can_job_admin = print_access_check(user, snum, JOB_ACCESS_ADMINISTER);
+	can_job_admin = print_access_check(server_info, snum,
+					   JOB_ACCESS_ADMINISTER);
 	njobs = print_queue_status(snum, &queue, &status);
 	
 	if ( can_job_admin )
 		become_root();
 
 	for (i=0;i<njobs;i++) {
-		bool owner = is_owner(user, lp_const_servicename(snum), queue[i].job);
+		bool owner = is_owner(server_info, lp_const_servicename(snum),
+				      queue[i].job);
 
 		if (owner || can_job_admin) {
 			print_job_delete1(snum, queue[i].job);
diff --git a/source/rpc_server/srv_lsa_hnd.c b/source/rpc_server/srv_lsa_hnd.c
index 78b891e..377ed50 100644
--- a/source/rpc_server/srv_lsa_hnd.c
+++ b/source/rpc_server/srv_lsa_hnd.c
@@ -256,19 +256,13 @@ bool pipe_access_check(pipes_struct *p)
 	   anonymous > 0 */
 
 	if (lp_restrict_anonymous() > 0) {
-		user_struct *user = get_valid_user_struct(p->vuid);
 
 		/* schannel, so we must be ok */
 		if (p->pipe_bound && (p->auth.auth_type == PIPE_AUTH_TYPE_SCHANNEL)) {
 			return True;
 		}
 
-		if (!user) {
-			DEBUG(3, ("invalid vuid %d\n", p->vuid));
-			return False;
-		}
-
-		if (user->server_info->guest) {
+		if (p->server_info->guest) {
 			return False;
 		}
 	}
diff --git a/source/rpc_server/srv_lsa_nt.c b/source/rpc_server/srv_lsa_nt.c
index 7be139d..95e10ac 100644
--- a/source/rpc_server/srv_lsa_nt.c
+++ b/source/rpc_server/srv_lsa_nt.c
@@ -1463,14 +1463,10 @@ NTSTATUS _lsa_GetUserName(pipes_struct *p,
 			  struct lsa_GetUserName *r)


-- 
Samba Shared Repository


More information about the samba-cvs mailing list