********************************************************************/
uint32 _spoolss_closeprinter(POLICY_HND *handle)
{
+ Printer_entry *Printer=find_printer_index_by_hnd(handle);
+
+ if (Printer && Printer->document_started)
+ _spoolss_enddocprinter(handle); /* print job was not closed */
+
if (!close_printer_handle(handle))
return ERROR_INVALID_HANDLE;
********************************************************************/
uint32 _spoolss_deleteprinter(POLICY_HND *handle)
{
+ Printer_entry *Printer=find_printer_index_by_hnd(handle);
+
+ if (Printer && Printer->document_started)
+ _spoolss_enddocprinter(handle); /* print job was not closed */
+
if (!delete_printer_handle(handle))
return ERROR_INVALID_HANDLE;
return NT_STATUS_NO_PROBLEMO;
}
+/****************************************************************************
+ Return a user struct for a pipe user.
+****************************************************************************/
+
+static struct current_user *get_current_user(struct current_user *user, pipes_struct *p)
+{
+ if (p->ntlmssp_auth_validated) {
+ memcpy(user, &p->pipe_user, sizeof(user));
+ } else {
+ extern struct current_user current_user;
+ memcpy(user, ¤t_user, sizeof(user));
+ }
+
+ return user;
+}
/********************************************************************
* api_spoolss_getprinter
return ERROR_INVALID_HANDLE;
}
- if (p->ntlmssp_auth_validated) {
- memcpy(&user, &p->pipe_user, sizeof(user));
- } else {
- extern struct current_user current_user;
- memcpy(&user, ¤t_user, sizeof(user));
- }
+ get_current_user(&user, p);
/*
* a nice thing with NT is it doesn't listen to what you tell it.
int errcode = 0;
Printer_entry *Printer = find_printer_index_by_hnd(handle);
- if (p->ntlmssp_auth_validated) {
- memcpy(&user, &p->pipe_user, sizeof(user));
- } else {
- extern struct current_user current_user;
- memcpy(&user, ¤t_user, sizeof(user));
- }
+ get_current_user(&user, p);
if (!OPEN_HANDLE(Printer)) {
DEBUG(0,("control_printer: Invalid handle (%s)\n", OUR_HANDLE(handle)));
}
/* Work out which user is performing the operation */
- if (p->ntlmssp_auth_validated) {
- memcpy(&user, &p->pipe_user, sizeof(user));
- } else {
- extern struct current_user current_user;
- memcpy(&user, ¤t_user, sizeof(user));
- }
+ get_current_user(&user, p);
/* Check the user has permissions to change the security
descriptor. By experimentation with two NT machines, the user
uint32 _spoolss_setjob( POLICY_HND *handle,
uint32 jobid,
uint32 level,
- pipes_struct *p,
+ pipes_struct *p,
JOB_INFO *ctr,
uint32 command)
if (!print_job_exists(jobid)) {
return ERROR_INVALID_PRINTER_NAME;
}
-
- if (p->ntlmssp_auth_validated) {
- memcpy(&user, &p->pipe_user, sizeof(user));
- } else {
- extern struct current_user current_user;
- memcpy(&user, ¤t_user, sizeof(user));
- }
+
+ get_current_user(&user, p);
switch (command) {
case JOB_CONTROL_CANCEL:
struct current_user user;
ZERO_STRUCT(driver);
-
- if (p->ntlmssp_auth_validated) {
- memcpy(&user, &p->pipe_user, sizeof(user));
- } else {
- extern struct current_user current_user;
- memcpy(&user, ¤t_user, sizeof(user));
- }
+
+ get_current_user(&user, p);
convert_printer_driver_info(info, &driver, level);