# --- SDE-COPYRIGHT-NOTE-BEGIN --- # This copyright note is auto-generated by ./scripts/Create-CopyPatch. # # Filename: package/.../cups-pdf/ForcedUser.patch.disabled # Copyright (C) 2005 - 2006 The T2 SDE Project # # More information can be found in the files COPYING and README. # # This patch file is dual-licensed. It is available under the license the # patched project is licensed under, as long as it is an OpenSource license # as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms # of the GNU General Public License as published by the Free Software # Foundation; either version 2 of the License, or (at your option) any later # version. # --- SDE-COPYRIGHT-NOTE-END --- This allows forcing all files to be created with a specific user or, if a unknown user is forced, to create the files as AnonUser, if allowed. - Rene Rebe <rene@exactcode.de> diff -ur cups-pdf-2.0beta2/extra/cups-pdf.conf cups-pdf-2.0beta2-imp/extra/cups-pdf.conf --- cups-pdf-2.0beta2/extra/cups-pdf.conf 2005-10-26 14:15:51.000000000 +0200 +++ cups-pdf-2.0beta2-imp/extra/cups-pdf.conf 2005-12-06 19:20:01.000000000 +0100 @@ -106,6 +106,13 @@ #AnonUser nobody +### Key: ForcedUser +## fixed user for PDF creation (this might be a security issue) +## set this to an empty value to use the username supplied by CUPS +### Default: <empty> + +#ForcedUser archiver + ### Key: LowerCase ## This options allows to check user names given to CUPS-PDF additionally ## against their lower case variants. This is necessary since in some diff -ur cups-pdf-2.0beta2/src/cups-pdf.c cups-pdf-2.0beta2-imp/src/cups-pdf.c --- cups-pdf-2.0beta2/src/cups-pdf.c 2005-10-23 16:04:45.000000000 +0200 +++ cups-pdf-2.0beta2-imp/src/cups-pdf.c 2005-12-06 19:44:50.000000000 +0100 @@ -350,11 +350,12 @@ } int main(int argc, char *argv[]) { - char *user, *dirname, *spoolfile, *outfile, *gscall, *ppcall; + char *dirname, *spoolfile, *outfile, *gscall, *ppcall; cp_string title=""; - int size; + cp_string user=""; mode_t mode; struct passwd *passwd; + int size; pid_t pid; if (getuid()) { @@ -376,15 +377,12 @@ log_event(CPSTATUS, "call contained illegal number of arguments", NULL); return 0; } - size=strlen(conf.userprefix)+strlen(argv[2])+1; - user=calloc(size, sizeof(char)); - if (user == NULL) { - fputs("CUPS-PDF: failed to allocate memory\n", stderr); - return -2; - } - snprintf(user, size, "%s%s", conf.userprefix, argv[2]); + if (*conf.forceduser != 0) + snprintf(user, BUFSIZE, "%s", conf.forceduser); + else + snprintf(user, BUFSIZE, "%s%s", conf.userprefix, argv[2]); passwd=getpwnam(user); - if (passwd == NULL && conf.lowercase) { + if (passwd == NULL && conf.lowercase && *conf.forceduser == 0) { log_event(CPDEBUG, "unknown user", user); for (size=0;size<(int) strlen(argv[2]);size++) argv[2][size]=tolower(argv[2][size]); @@ -398,7 +396,6 @@ passwd=getpwnam(conf.anonuser); if (passwd == NULL) { log_event(CPERROR, "username for anonymous access unknown", conf.anonuser); - free(user); fclose(logfp); return -2; } @@ -408,7 +405,6 @@ dirname=calloc(size, sizeof(char)); if (dirname == NULL) { fputs("CUPS-PDF: failed to allocate memory\n", stderr); - free(user); fclose(logfp); return -2; } @@ -419,7 +415,6 @@ dirname=calloc(size, sizeof(char)); if (dirname == NULL) { fputs("CUPS-PDF: failed to allocate memory\n", stderr); - free(user); fclose(logfp); return -2; } @@ -428,7 +423,6 @@ } else { log_event(CPSTATUS, "anonymous access denied", user); - free(user); fclose(logfp); return 0; } @@ -441,7 +435,6 @@ dirname=calloc(size, sizeof(char)); if (dirname == NULL) { fputs("CUPS-PDF: failed to allocate memory\n", stderr); - free(user); fclose(logfp); return -2; } @@ -452,7 +445,6 @@ dirname=calloc(size, sizeof(char)); if (dirname == NULL) { fputs("CUPS-PDF: failed to allocate memory\n", stderr); - free(user); fclose(logfp); return -2; } @@ -463,7 +455,6 @@ } mode=(0666&~conf.userumask); } - free(user); if (prepareuser(passwd, dirname)) return -2; log_event(CPDEBUG, "user information prepared", NULL); diff -ur cups-pdf-2.0beta2/src/cups-pdf.h cups-pdf-2.0beta2-imp/src/cups-pdf.h --- cups-pdf-2.0beta2/src/cups-pdf.h 2005-10-23 16:03:20.000000000 +0200 +++ cups-pdf-2.0beta2-imp/src/cups-pdf.h 2005-12-06 19:14:22.000000000 +0100 @@ -40,6 +40,7 @@ struct { cp_string anondirname; cp_string anonuser; + cp_string forceduser; cp_string ghostscript; cp_string gscall; cp_string grp; @@ -63,6 +64,7 @@ void _set_defaults() { snprintf(conf.anondirname,BUFSIZE,"%s","/var/spool/cups-pdf/ANONYMOUS"); snprintf(conf.anonuser,BUFSIZE,"%s","nobody"); + snprintf(conf.forceduser,BUFSIZE,"%s",""); snprintf(conf.ghostscript,BUFSIZE,"/usr/bin/gs"); snprintf(conf.gscall,BUFSIZE,"%s","%s -q -dCompatibilityLevel=%s -dNOPAUSE -dBATCH -dSAFER -sDEVICE=pdfwrite -sOutputFile=\"%s\" -dAutoRotatePages=/PageByPage -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dPDFSETTINGS=/prepress -c save pop -f %s"); snprintf(conf.grp,BUFSIZE,"%s","lp"); @@ -91,6 +93,8 @@ strncpy(conf.anondirname,value,BUFSIZE); else if (!strcmp("AnonUser",key)) strncpy(conf.anonuser,value,BUFSIZE); + else if (!strcmp("ForcedUser",key)) + strncpy(conf.forceduser,value,BUFSIZE); else if (!strcmp("GhostScript",key)) strncpy(conf.ghostscript,value,BUFSIZE); else if (!strcmp("GSCall",key))