char buf[4096];
struct rxpd_file* self = NULL;
- // TODO better filenname validation / error handling
if (!filename ||
- strchr (filename, '/') ||
+ strcspn(filename, RXPD_FILE_ILG_CHARS) != strlen (filename) ||
strlen (filename) + strlen (base->rulesdir) > 4097)
return NULL;
if (!self->file)
{
- // todo create policy?
self->file = rxpd_file_new (self->base, &line[i->sz]);
if (!self->file)
{
- rxpd_buffer_printf (&self->out, "#ERROR: illegal rule\n");
+ rxpd_buffer_printf (&self->out, "#ERROR: illegal filename\n");
rxpd_connection_delete (self);
return;
}
enum rxpd_cmd_e {RXPD_COMMANDS};
#undef RXPD_CMD
+/*
+ * characters which are absolutely not allowed in rule filenames
+ * for finer control use policies
+ */
+#define RXPD_FILE_ILG_CHARS "/: \t\n"
+
struct rxpd_base;
struct rxpd_file;
struct rxpd_rule;