/*
- * $Id: main.c,v 1.15 2002-01-04 04:45:47 sibaz Exp $
+ * $Id: main.c,v 1.16 2002-08-20 20:25:54 srittau Exp $
*
* Copyright (c) 1990,1995 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
struct printer *printers = NULL;
int debug = 0;
-char *conffile = _PATH_PAPDCONF;
+static char *conffile = _PATH_PAPDCONF;
char *printcap = _PATH_PAPDPRINTCAP;
unsigned char connid, quantum, sock, oquantum = PAP_MAXQUANTUM;
char *cannedstatus = PIPED_STATUS;
struct printer *printer = NULL;
char *version = VERSION;
-static char *pidfile = _PATH_PAPDLOCK;
+static char *pidfile = _PATH_PAPDLOCK;
char *uamlist;
char *uampath = _PATH_PAPDUAMPATH;
/* Prototypes for locally used functions */
int getstatus( struct printer *pr, char *buf );
int rprintcap( struct printer *pr );
-void getprinters( char *cf );
+static void getprinters( char *cf );
/* this only needs to be used by the server process */
}
char *pgetstr();
-char *getpname();
+char *getpname(char **area, int bufsize);
-void getprinters( cf )
+#define PF_CONFBUFFER 1024
+
+static void getprinters( cf )
char *cf;
{
- char buf[ 1024 ], area[ 1024 ], *a, *p, *name, *type, *zone;
+ char buf[ PF_CONFBUFFER ], area[ PF_CONFBUFFER ], *a, *p, *name, *type, *zone;
struct printer *pr;
int c;
- while (( c = getprent( cf, buf )) > 0 ) {
+ while (( c = getprent( cf, buf, PF_CONFBUFFER )) > 0 ) {
a = area;
/*
* Get the printer's nbp name.
*/
- if (( p = getpname( &a )) == NULL ) {
+ if (( p = getpname( &a, PF_CONFBUFFER )) == NULL ) {
fprintf( stderr, "No printer name\n" );
exit( 1 );
}
/*
- * $Id: printcap.c,v 1.7 2002-02-07 23:35:10 srittau Exp $
+ * $Id: printcap.c,v 1.8 2002-08-20 20:25:54 srittau Exp $
*
* Copyright (c) 1990,1994 Regents of The University of Michigan.
* All Rights Reserved. See COPYRIGHT.
* Added a "cap" parameter, so we can use these calls for printcap
* and papd.conf.
*/
-int getprent( cap, bp)
+int getprent( cap, bp, bufsize )
register char *cap;
register char *bp;
+ register int bufsize;
{
- register int c, skip = 0;
+ register int c, skip = 0, i;
if (pfp == NULL && (pfp = fopen( cap, "r")) == NULL)
return(-1);
tbuf = bp;
+ i = 0;
for (;;) {
switch (c = getc(pfp)) {
case EOF:
return(1);
}
*bp++ = c;
+ if (++i >= bufsize) {
+ write(2, "config file too large\n", 22);
+ fclose(pfp);
+ pfp = NULL;
+ *bp = '\0';
+ return(1);
+ }
}
}
}
}
static char *
-decodename(str, area)
+decodename(str, area, bufsize)
register char *str;
char **area;
+ int bufsize;
{
register char *cp;
register int c;
int i;
cp = *area;
- while ((c = *str++) && c != ':' && c != '|' ) {
+ while ((c = *str++) && --bufsize && c != ':' && c != '|' ) {
switch (c) {
case '^':
}
char *
-getpname( area )
- char **area;
+getpname( area, bufsize )
+ char **area;
+ int bufsize;
{
- return( decodename( tbuf, area ));
+ return( decodename( tbuf, area, bufsize));
}
/*
- * $Id: printcap.h,v 1.3 2001-06-25 20:13:45 rufustfirefly Exp $
+ * $Id: printcap.h,v 1.4 2002-08-20 20:25:54 srittau Exp $
*/
#ifndef PAPD_PRINTCAP_H
#include <sys/cdefs.h>
-int getprent __P(( register char *, register char * ));
+int getprent __P(( register char *, register char *, register int ));
int pnchktc __P(( char * ));
int pgetflag __P(( char * ));
void endprent __P(( void ));