svn commit: samba r23212 - in branches/SAMBA_3_0_26/source/rpc_server: .

jerry at samba.org jerry at samba.org
Tue May 29 16:46:22 GMT 2007


Author: jerry
Date: 2007-05-29 16:46:16 +0000 (Tue, 29 May 2007)
New Revision: 23212

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=23212

Log:
merge from SAMBA_3_0: Use pipe_user rather than global current_user
Modified:
   branches/SAMBA_3_0_26/source/rpc_server/srv_spoolss_nt.c


Changeset:
Modified: branches/SAMBA_3_0_26/source/rpc_server/srv_spoolss_nt.c
===================================================================
--- branches/SAMBA_3_0_26/source/rpc_server/srv_spoolss_nt.c	2007-05-29 16:26:38 UTC (rev 23211)
+++ branches/SAMBA_3_0_26/source/rpc_server/srv_spoolss_nt.c	2007-05-29 16:46:16 UTC (rev 23212)
@@ -1534,7 +1534,6 @@
 
 	fstring name;
 	int snum;
-	struct current_user user;
 	Printer_entry *Printer=NULL;
 
 	if ( !q_u->printername )
@@ -1558,8 +1557,6 @@
 		return WERR_INVALID_PRINTER_NAME;
 	}
 
-	get_current_user(&user, p);
-
 	/*
 	 * First case: the user is opening the print server:
 	 *
@@ -1624,12 +1621,12 @@
 			/* if the user is not root, doesn't have SE_PRINT_OPERATOR privilege,
 			   and not a printer admin, then fail */
 			
-			if ((user.ut.uid != 0) &&
-			    !user_has_privileges(user.nt_user_token,
+			if ((p->pipe_user.ut.uid != 0) &&
+			    !user_has_privileges(p->pipe_user.nt_user_token,
 						 &se_printop ) &&
 			    !token_contains_name_in_list(
-				    uidtoname(user.ut.uid), NULL,
-				    user.nt_user_token,
+				    uidtoname(p->pipe_user.ut.uid), NULL,
+				    p->pipe_user.nt_user_token,
 				    lp_printer_admin(snum))) {
 				close_printer_handle(p, handle);
 				return WERR_ACCESS_DENIED;
@@ -1682,9 +1679,9 @@
 			return WERR_ACCESS_DENIED;
 		}
 
-		if (!user_ok_token(uidtoname(user.ut.uid), user.nt_user_token,
-				   snum) ||
-		    !print_access_check(&user, snum,
+		if (!user_ok_token(uidtoname(p->pipe_user.ut.uid),
+				   p->pipe_user.nt_user_token, snum) ||
+		    !print_access_check(&p->pipe_user, snum,
 					printer_default->access_required)) {
 			DEBUG(3, ("access DENIED for printer open\n"));
 			close_printer_handle(p, handle);
@@ -1978,20 +1975,17 @@
 	NT_PRINTER_DRIVER_INFO_LEVEL	info;
 	NT_PRINTER_DRIVER_INFO_LEVEL	info_win2k;
 	int				version;
-	struct current_user		user;
 	WERROR				status;
 	WERROR				status_win2k = WERR_ACCESS_DENIED;
 	SE_PRIV                         se_printop = SE_PRINT_OPERATOR;	
 	
-	get_current_user(&user, p);
-	 
 	/* if the user is not root, doesn't have SE_PRINT_OPERATOR privilege,
 	   and not a printer admin, then fail */
 			
-	if ( (user.ut.uid != 0) 
-		&& !user_has_privileges(user.nt_user_token, &se_printop ) 
-		&& !token_contains_name_in_list( uidtoname(user.ut.uid), 
-		    NULL, user.nt_user_token, lp_printer_admin(-1)) ) 
+	if ( (p->pipe_user.ut.uid != 0) 
+		&& !user_has_privileges(p->pipe_user.nt_user_token, &se_printop ) 
+		&& !token_contains_name_in_list( uidtoname(p->pipe_user.ut.uid), 
+		    NULL, p->pipe_user.nt_user_token, lp_printer_admin(-1)) ) 
 	{
 		return WERR_ACCESS_DENIED;
 	}
@@ -2038,7 +2032,7 @@
 			/* if we get to here, we now have 2 driver info structures to remove */
 			/* remove the Win2k driver first*/
 		
-			status_win2k = delete_printer_driver(info_win2k.info_3, &user, 3, False );
+			status_win2k = delete_printer_driver(info_win2k.info_3, &p->pipe_user, 3, False );
 			free_a_printer_driver( info_win2k, 3 );
 		
 			/* this should not have failed---if it did, report to client */
@@ -2050,7 +2044,7 @@
 		}
 	}
 	
-	status = delete_printer_driver(info.info_3, &user, version, False);
+	status = delete_printer_driver(info.info_3, &p->pipe_user, version, False);
 	
 	/* if at least one of the deletes succeeded return OK */
 	
@@ -2076,20 +2070,17 @@
 	int				version;
 	uint32				flags = q_u->delete_flags;
 	BOOL				delete_files;
-	struct current_user		user;
 	WERROR				status;
 	WERROR				status_win2k = WERR_ACCESS_DENIED;
 	SE_PRIV                         se_printop = SE_PRINT_OPERATOR;	
 	
-	get_current_user(&user, p);
-	
 	/* if the user is not root, doesn't have SE_PRINT_OPERATOR privilege,
 	   and not a printer admin, then fail */
 			
-	if ( (user.ut.uid != 0) 
-		&& !user_has_privileges(user.nt_user_token, &se_printop ) 
-		&& !token_contains_name_in_list( uidtoname(user.ut.uid), 
-		    NULL, user.nt_user_token, lp_printer_admin(-1)) ) 
+	if ( (p->pipe_user.ut.uid != 0) 
+		&& !user_has_privileges(p->pipe_user.nt_user_token, &se_printop ) 
+		&& !token_contains_name_in_list( uidtoname(p->pipe_user.ut.uid), 
+		    NULL, p->pipe_user.nt_user_token, lp_printer_admin(-1)) ) 
 	{
 		return WERR_ACCESS_DENIED;
 	}
@@ -2175,7 +2166,7 @@
 			/* if we get to here, we now have 2 driver info structures to remove */
 			/* remove the Win2k driver first*/
 		
-			status_win2k = delete_printer_driver(info_win2k.info_3, &user, 3, delete_files);
+			status_win2k = delete_printer_driver(info_win2k.info_3, &p->pipe_user, 3, delete_files);
 			free_a_printer_driver( info_win2k, 3 );
 				
 			/* this should not have failed---if it did, report to client */
@@ -2185,7 +2176,7 @@
 		}
 	}
 
-	status = delete_printer_driver(info.info_3, &user, version, delete_files);
+	status = delete_printer_driver(info.info_3, &p->pipe_user, version, delete_files);
 
 	if ( W_ERROR_IS_OK(status) || W_ERROR_IS_OK(status_win2k) )
 		status = WERR_OK;
@@ -5725,15 +5716,12 @@
 	pstring jobname;
 	fstring datatype;
 	Printer_entry *Printer = find_printer_index_by_hnd(p, handle);
-	struct current_user user;
 
 	if (!Printer) {
 		DEBUG(2,("_spoolss_startdocprinter: Invalid handle (%s:%u:%u)\n", OUR_HANDLE(handle)));
 		return WERR_BADFID;
 	}
 
-	get_current_user(&user, p);
-
 	/*
 	 * a nice thing with NT is it doesn't listen to what you tell it.
 	 * when asked to send _only_ RAW datas, it tries to send datas
@@ -5757,7 +5745,7 @@
 
 	unistr2_to_ascii(jobname, &info_1->docname, sizeof(jobname));
 	
-	Printer->jobid = print_job_start(&user, snum, jobname, Printer->nt_devmode);
+	Printer->jobid = print_job_start(&p->pipe_user, snum, jobname, Printer->nt_devmode);
 
 	/* An error occured in print_job_start() so return an appropriate
 	   NT error code. */
@@ -5830,13 +5818,10 @@
 static WERROR control_printer(POLICY_HND *handle, uint32 command,
 			      pipes_struct *p)
 {
-	struct current_user user;
 	int snum;
 	WERROR errcode = WERR_BADFUNC;
 	Printer_entry *Printer = find_printer_index_by_hnd(p, handle);
 
-	get_current_user(&user, p);
-
 	if (!Printer) {
 		DEBUG(2,("control_printer: Invalid handle (%s:%u:%u)\n", OUR_HANDLE(handle)));
 		return WERR_BADFID;
@@ -5847,18 +5832,18 @@
 
 	switch (command) {
 	case PRINTER_CONTROL_PAUSE:
-		if (print_queue_pause(&user, snum, &errcode)) {
+		if (print_queue_pause(&p->pipe_user, snum, &errcode)) {
 			errcode = WERR_OK;
 		}
 		break;
 	case PRINTER_CONTROL_RESUME:
 	case PRINTER_CONTROL_UNPAUSE:
-		if (print_queue_resume(&user, snum, &errcode)) {
+		if (print_queue_resume(&p->pipe_user, snum, &errcode)) {
 			errcode = WERR_OK;
 		}
 		break;
 	case PRINTER_CONTROL_PURGE:
-		if (print_queue_purge(&user, snum, &errcode)) {
+		if (print_queue_purge(&p->pipe_user, snum, &errcode)) {
 			errcode = WERR_OK;
 		}
 		break;
@@ -5880,7 +5865,6 @@
 	POLICY_HND	*handle = &q_u->handle;
 	Printer_entry 	*Printer = find_printer_index_by_hnd(p, handle);
 	int		snum;
-	struct 		current_user user;
 	WERROR 		errcode = WERR_OK;
 	
 	if (!Printer) {
@@ -5891,10 +5875,8 @@
 	if (!get_printer_snum(p, handle, &snum))
 		return WERR_BADFID;
 	
-	get_current_user( &user, p );	
+	print_job_delete( &p->pipe_user, snum, Printer->jobid, &errcode );	
 	
-	print_job_delete( &user, snum, Printer->jobid, &errcode );	
-	
 	return errcode;
 }
 
@@ -6753,8 +6735,6 @@
 	POLICY_HND *handle = &q_u->handle;
 	uint32 jobid = q_u->jobid;
 	uint32 command = q_u->command;
-
-	struct current_user user;
 	int snum;
 	WERROR errcode = WERR_BADFUNC;
 		
@@ -6766,23 +6746,21 @@
 		return WERR_INVALID_PRINTER_NAME;
 	}
 
-	get_current_user(&user, p);	
-
 	switch (command) {
 	case JOB_CONTROL_CANCEL:
 	case JOB_CONTROL_DELETE:
-		if (print_job_delete(&user, snum, jobid, &errcode)) {
+		if (print_job_delete(&p->pipe_user, snum, jobid, &errcode)) {
 			errcode = WERR_OK;
 		}
 		break;
 	case JOB_CONTROL_PAUSE:
-		if (print_job_pause(&user, snum, jobid, &errcode)) {
+		if (print_job_pause(&p->pipe_user, snum, jobid, &errcode)) {
 			errcode = WERR_OK;
 		}		
 		break;
 	case JOB_CONTROL_RESTART:
 	case JOB_CONTROL_RESUME:
-		if (print_job_resume(&user, snum, jobid, &errcode)) {
+		if (print_job_resume(&p->pipe_user, snum, jobid, &errcode)) {
 			errcode = WERR_OK;
 		}
 		break;
@@ -7708,26 +7686,23 @@
 	SPOOL_PRINTER_DRIVER_INFO_LEVEL *info = &q_u->info;
 	WERROR err = WERR_OK;
 	NT_PRINTER_DRIVER_INFO_LEVEL driver;
-	struct current_user user;
 	fstring driver_name;
 	uint32 version;
 
 	ZERO_STRUCT(driver);
 
-	get_current_user(&user, p);
-	
 	if (!convert_printer_driver_info(info, &driver, level)) {
 		err = WERR_NOMEM;
 		goto done;
 	}
 
 	DEBUG(5,("Cleaning driver's information\n"));
-	err = clean_up_driver_struct(driver, level, &user);
+	err = clean_up_driver_struct(driver, level, &p->pipe_user);
 	if (!W_ERROR_IS_OK(err))
 		goto done;
 
 	DEBUG(5,("Moving driver to final destination\n"));
-	if( !W_ERROR_IS_OK(err = move_driver_to_download_area(driver, level, &user, &err)) ) {
+	if( !W_ERROR_IS_OK(err = move_driver_to_download_area(driver, level, &p->pipe_user, &err)) ) {
 		goto done;
 	}
 



More information about the samba-cvs mailing list