summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Untz <vuntz@suse.com>2012-12-10 10:44:31 +0100
committerVincent Untz <vuntz@suse.com>2012-12-10 10:44:31 +0100
commitf00aee0b43c31e94087668b23b72e873c660de5e (patch)
tree3b8c28f2a6eaa254fc1b7522e2b1f1eb0c8b5bc2
parent69d9f6e5eefc6dd83e707334e9e59276656f7ed7 (diff)
Revert "Be stricter when validating printer names"
Apparently, this is way too strict. The lpadmin man page says: CUPS allows printer names to contain any printable character except SPACE, TAB, "/", or "#". So the previous code was (mostly) correct. This reverts commit 7bf9cbe43ef8f648f308e4760f75c2aa6b61fa8e.
-rw-r--r--src/cups.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/cups.c b/src/cups.c
index 96c2c20..09f0e7b 100644
--- a/src/cups.c
+++ b/src/cups.c
@@ -327,25 +327,23 @@ _cph_cups_is_printer_name_valid_internal (const char *name)
int i;
int len;
- /* Quoting http://www.cups.org/documentation.php/doc-1.1/sam.html#4_1:
- *
- * The printer name must start with any printable character except
- * " ", "/", and "@". It can contain up to 127 letters, numbers, and
- * the underscore (_).
- *
- * The first part is a bit weird, as the second part is more
- * restrictive. So we only consider the second part. */
-
/* no empty string */
if (!name || name[0] == '\0')
return FALSE;
len = strlen (name);
- if (len > 127)
+ /* no string that is too long; see comment at the beginning of the
+ * validation code block */
+ if (len > CPH_STR_MAXLEN)
return FALSE;
+ /* only printable characters, no space, no /, no # */
for (i = 0; i < len; i++) {
- if (!g_ascii_isalnum (name[i]) && name[i] != '_')
+ if (!g_ascii_isprint (name[i]))
+ return FALSE;
+ if (g_ascii_isspace (name[i]))
+ return FALSE;
+ if (name[i] == '/' || name[i] == '#')
return FALSE;
}