1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-25 23:21:54 +03:00

Makefile: Added CC=gcc to DGUX on Intel. Comment from ross@filmworks.com.

ipc.c:
loadparm.c:
printing.c:
           Added code from <Dirk.DeWachter@rug.ac.be> to implement print
           queue pausing. New parameters are "queuepause command" and
           "queueresume command".
util.c: Added fix for mount options in autmount map.
lib/rpc/include/rpc_misc.h: Removed duplicate pipe names for Jean-Francois.
Jeremy.
This commit is contained in:
Jeremy Allison 0001-01-01 00:00:00 +00:00
parent 7f7e265ab4
commit 559a9bf2bb
6 changed files with 106 additions and 22 deletions

View File

@ -1062,6 +1062,8 @@ char *lp_lpqcommand(int );
char *lp_lprmcommand(int );
char *lp_lppausecommand(int );
char *lp_lpresumecommand(int );
char *lp_queuepausecommand(int );
char *lp_queueresumecommand(int );
char *lp_printername(int );
char *lp_printerdriver(int );
char *lp_hostsallow(int );
@ -1719,6 +1721,7 @@ void del_printqueue(int cnum,int snum,int jobid);
void status_printjob(int cnum,int snum,int jobid,int status);
int printjob_encode(int snum, int job);
void printjob_decode(int jobid, int *snum, int *job);
void status_printqueue(int cnum,int snum,int status);
/*The following definitions come from quotas.c */

View File

@ -27,17 +27,6 @@
#include "rpc_dce.h"
/* pipe string names */
#define PIPE_SRVSVC "\\PIPE\\srvsvc"
#define PIPE_SAMR "\\PIPE\\samr"
#define PIPE_WINREG "\\PIPE\\winreg"
#define PIPE_WKSSVC "\\PIPE\\wkssvc"
#define PIPE_NETLOGON "\\PIPE\\NETLOGON"
#define PIPE_NTLSA "\\PIPE\\ntlsa"
#define PIPE_NTSVCS "\\PIPE\\ntsvcs"
#define PIPE_LSASS "\\PIPE\\lsass"
#define PIPE_LSARPC "\\PIPE\\lsarpc"
/* well-known RIDs - Relative IDs */
/* RIDs - Well-known users ... */

View File

@ -4038,6 +4038,30 @@ char *client_addr(int fd)
return addr_buf;
}
#if (defined(NETGROUP) && defined(AUTOMOUNT))
/******************************************************************
Remove any mount options such as -rsize=2048,wsize=2048 etc.
Based on a fix from <Thomas.Hepper@icem.de>.
*******************************************************************/
static void strip_mount_options( pstring *str)
{
if (**str == '-')
{
char *p = *str;
while(*p && !isspace(*p))
p++;
while(*p && isspace(*p))
p++;
if(*p) {
pstring tmp_str;
pstrcpy(tmp_str, p);
pstrcpy(*str, tmp_str);
}
}
}
/*******************************************************************
Patch from jkf@soton.ac.uk
Split Luke's automount_server into YP lookup and string splitter
@ -4045,7 +4069,6 @@ char *client_addr(int fd)
As we may end up doing both, cache the last YP result.
*******************************************************************/
#if (defined(NETGROUP) && defined(AUTOMOUNT))
#ifdef NISPLUS_HOME
static char *automount_lookup(char *user_name)
{
@ -4094,6 +4117,9 @@ static char *automount_lookup(char *user_name)
}
nis_freeresult(result);
}
strip_mount_options(&last_value);
DEBUG(4, ("NIS+ Lookup: %s resulted in %s\n", user_name, last_value));
return last_value;
}
@ -4141,6 +4167,8 @@ static char *automount_lookup(char *user_name)
last_value[nis_result_len] = '\0';
}
strip_mount_options(&last_value);
DEBUG(4, ("YP Lookup: %s resulted in %s\n", user_name, last_value));
return last_value;
}

View File

@ -252,6 +252,8 @@ typedef struct
char *szLprmcommand;
char *szLppausecommand;
char *szLpresumecommand;
char *szQueuepausecommand;
char *szQueueresumecommand;
char *szPrintername;
char *szPrinterDriver;
char *szPrinterDriverLocation;
@ -340,6 +342,8 @@ static service sDefault =
NULL, /* szLprmcommand */
NULL, /* szLppausecommand */
NULL, /* szLpresumecommand */
NULL, /* szQueuepausecommand */
NULL, /* szQueueresumecommand */
NULL, /* szPrintername */
NULL, /* szPrinterDriver - this is set in init_globals() */
NULL, /* szPrinterDriverLocation */
@ -593,6 +597,9 @@ static struct parm_struct parm_table[] =
{"lprm command", P_STRING, P_LOCAL, &sDefault.szLprmcommand, NULL, NULL, FLAG_PRINT|FLAG_GLOBAL},
{"lppause command", P_STRING, P_LOCAL, &sDefault.szLppausecommand, NULL, NULL, FLAG_GLOBAL},
{"lpresume command", P_STRING, P_LOCAL, &sDefault.szLpresumecommand,NULL, NULL, FLAG_GLOBAL},
{"queuepause command", P_STRING, P_LOCAL, &sDefault.szQueuepausecommand, NULL, NULL, FLAG_GLOBAL},
{"queueresume command", P_STRING, P_LOCAL, &sDefault.szQueueresumecommand, NULL, NULL, FLAG_GLOBAL},
{"printer name", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, FLAG_PRINT},
{"printer", P_STRING, P_LOCAL, &sDefault.szPrintername, NULL, NULL, 0},
{"printer driver", P_STRING, P_LOCAL, &sDefault.szPrinterDriver, NULL, NULL, 0},
@ -911,7 +918,12 @@ static void init_locals(void)
#ifdef SVR4
string_initial(&sDefault.szLppausecommand,"lp -i %p-%j -H hold");
string_initial(&sDefault.szLpresumecommand,"lp -i %p-%j -H resume");
#endif
string_initial(&sDefault.szQueuepausecommand, "lpc stop %p");
string_initial(&sDefault.szQueueresumecommand, "lpc start %p");
#else /* SVR4 */
string_initial(&sDefault.szQueuepausecommand, "disable %p");
string_initial(&sDefault.szQueueresumecommand, "enable %p");
#endif /* SVR4 */
break;
case PRINT_QNX:
@ -1153,6 +1165,8 @@ FN_LOCAL_STRING(lp_lpqcommand,szLpqcommand)
FN_LOCAL_STRING(lp_lprmcommand,szLprmcommand)
FN_LOCAL_STRING(lp_lppausecommand,szLppausecommand)
FN_LOCAL_STRING(lp_lpresumecommand,szLpresumecommand)
FN_LOCAL_STRING(lp_queuepausecommand,szQueuepausecommand)
FN_LOCAL_STRING(lp_queueresumecommand,szQueueresumecommand)
FN_LOCAL_STRING(lp_printername,szPrintername)
FN_LOCAL_STRING(lp_printerdriver,szPrinterDriver)
FN_LOCAL_STRING(lp_hostsallow,szHostsallow)

View File

@ -1213,3 +1213,36 @@ void printjob_decode(int jobid, int *snum, int *job)
(*snum) = (jobid >> 8) & 0xFF;
(*job) = jobid & 0xFF;
}
/****************************************************************************
Change status of a printer queue
****************************************************************************/
void status_printqueue(int cnum,int snum,int status)
{
char *queuestatus_command = (status==LPSTAT_STOPPED ?
lp_queuepausecommand(snum):lp_queueresumecommand(snum));
char *printername = PRINTERNAME(snum);
pstring syscmd;
int ret;
if (!printername || !*printername) {
DEBUG(6,("replacing printer name with service (snum=(%s,%d))\n",
lp_servicename(snum),snum));
printername = lp_servicename(snum);
}
if (!queuestatus_command || !(*queuestatus_command)) {
DEBUG(5,("No queuestatus command to %s job\n",
(status==LPSTAT_STOPPED?"pause":"resume")));
return;
}
pstrcpy(syscmd,queuestatus_command);
string_sub(syscmd,"%p",printername);
standard_sub(cnum,syscmd);
ret = smbrun(syscmd,NULL,False);
DEBUG(3,("Running the command `%s' gave %d\n",syscmd,ret));
lpq_reset(snum); /* queue has changed */
}

View File

@ -1821,11 +1821,15 @@ static BOOL api_RDosPrintJobDel(int cnum,uint16 vuid, char *param,char *data,
return(True);
}
/****************************************************************************
Purge a print queue - or pause or resume it.
****************************************************************************/
static BOOL api_WPrintQueuePurge(int cnum,uint16 vuid, char *param,char *data,
int mdrcnt,int mprcnt,
char **rdata,char **rparam,
int *rdata_len,int *rparam_len)
{
int function = SVAL(param,0);
char *str1 = param+2;
char *str2 = skip_string(str1,1);
char *QueueName = skip_string(str2,1);
@ -1853,19 +1857,30 @@ static BOOL api_WPrintQueuePurge(int cnum,uint16 vuid, char *param,char *data,
}
if (snum >= 0 && VALID_SNUM(snum)) {
print_queue_struct *queue=NULL;
int i, count;
lpq_reset(snum);
count = get_printqueue(snum,cnum,&queue,NULL);
for (i = 0; i < count; i++)
del_printqueue(cnum,snum,queue[i].job);
if (queue) free(queue);
switch (function) {
case 74: /* Pause queue */
case 75: /* Resume queue */
status_printqueue(cnum,snum,(function==74?LPSTAT_STOPPED:LPSTAT_OK));
DEBUG(3,("Print queue %s, queue=%s\n",
(function==74?"pause":"resume"),QueueName));
break;
case 103: /* Purge */
{
print_queue_struct *queue=NULL;
int i, count;
count = get_printqueue(snum,cnum,&queue,NULL);
for (i = 0; i < count; i++)
del_printqueue(cnum,snum,queue[i].job);
if (queue) free(queue);
DEBUG(3,("Print queue purge, queue=%s\n",QueueName));
break;
}
}
}
DEBUG(3,("Print queue purge, queue=%s\n",QueueName));
return(True);
}
@ -3490,6 +3505,8 @@ struct
{"NetWkstaGetInfo", 63, api_NetWkstaGetInfo,0},
{"DosPrintQEnum", 69, api_DosPrintQEnum,0},
{"DosPrintQGetInfo", 70, api_DosPrintQGetInfo,0},
{"WPrintQueuePause", 74, api_WPrintQueuePurge,0},
{"WPrintQueueResume", 75, api_WPrintQueuePurge,0},
{"WPrintJobEnumerate",76, api_WPrintJobEnumerate,0},
{"WPrintJobGetInfo", 77, api_WPrintJobGetInfo,0},
{"RDosPrintJobDel", 81, api_RDosPrintJobDel,0},