* Interface to lpr system.
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#include <sys/param.h>
#include <sys/syslog.h>
#include <sys/time.h>
#include <string.h>
#include <netdb.h>
#include <fcntl.h>
+#include <pwd.h>
#include "printer.h"
#include "file.h"
char cost[ 22 ];
char balance[ 22 ];
#endif ABS_PRINT
-#ifdef CAPDIR
+#if defined( CAPDIR ) || defined( USE_CAP )
char username[32];
int addr_net, addr_node;
FILE *cap_file;
{
char name[ MAXPATHLEN ];
int fd;
+ struct passwd *pwent;
if (( lp.lp_flags & LP_INIT ) == 0 && lp_init( out, sat ) != 0 ) {
return( -1 );
if ( lp.lp_flags & LP_PIPE ) {
/* go right to program */
+ if (lp.lp_person != NULL) {
+ if((pwent = getpwnam(lp.lp_person)) != NULL) {
+ if(setreuid(pwent->pw_uid, pwent->pw_uid) != 0) {
+ syslog(LOG_INFO, "setreuid error: %m");
+ }
+ } else {
+ syslog(LOG_INFO, "Error getting username (%s)", lp.lp_person);
+ }
+ }
if (( lp.lp_stream = popen( printer->p_printer, "w" )) == NULL ) {
syslog( LOG_ERR, "lp_open popen %s: %m", printer->p_printer );
spoolerror( out, NULL );