|
|
|
# --- 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))
|