CMD_DECLARE (cmd_spec_mirror);
CMD_DECLARE (cmd_spec_progress);
CMD_DECLARE (cmd_spec_recursive);
+CMD_DECLARE (cmd_spec_restrict_file_names);
CMD_DECLARE (cmd_spec_useragent);
/* List of recognized commands, each consisting of name, closure and function.
{ "reject", &opt.rejects, cmd_vector },
{ "relativeonly", &opt.relative_only, cmd_boolean },
{ "removelisting", &opt.remove_listing, cmd_boolean },
+ { "restrictfilenames", &opt.restrict_file_names, cmd_spec_restrict_file_names },
{ "retrsymlinks", &opt.retr_symlinks, cmd_boolean },
{ "retryconnrefused", &opt.retry_connrefused, cmd_boolean },
{ "robots", &opt.use_robots, cmd_boolean },
opt.dots_in_line = 50;
opt.dns_cache = 1;
+
+ /* The default for file name restriction defaults to the OS type. */
+#if !defined(WINDOWS) && !defined(__CYGWIN__)
+ opt.restrict_file_names = restrict_shell;
+#else
+ opt.restrict_file_names = restrict_windows;
+#endif
}
\f
/* Return the user's home directory (strdup-ed), or NULL if none is
cmd_boolean (const char *com, const char *val, void *closure)
{
int bool_value;
-
- if (!strcasecmp (val, "on")
- || (*val == '1' && !*(val + 1)))
+ const char *v = val;
+#define LC(x) TOLOWER(x)
+
+ if ((LC(v[0]) == 'o' && LC(v[1]) == 'n' && !v[2])
+ ||
+ (LC(v[0]) == 'y' && LC(v[1]) == 'e' && LC(v[2]) == 's' && !v[3])
+ ||
+ (v[0] == '1' && !v[1]))
+ /* "on", "yes" and "1" mean true. */
bool_value = 1;
- else if (!strcasecmp (val, "off")
- || (*val == '0' && !*(val + 1)))
+ else if ((LC(v[0]) == 'o' && LC(v[1]) == 'f' && LC(v[2]) == 'f' && !v[3])
+ ||
+ (LC(v[0]) == 'n' && LC(v[1]) == 'o' && !v[2])
+ ||
+ (v[0] == '0' && !v[1]))
+ /* "off", "no" and "0" mean false. */
bool_value = 0;
else
{
if (*(int *)closure == -1 || *(int *)closure == 2)
return 1;
- if (!strcasecmp (val, "always")
- || (*val == '2' && !*(val + 1)))
+ if (!strcasecmp (val, "always") || !strcmp (val, "2"))
lockable_boolean_value = 2;
else if (!strcasecmp (val, "on")
- || (*val == '1' && !*(val + 1)))
+ || !strcasecmp (val, "yes")
+ || !strcmp (val, "1"))
lockable_boolean_value = 1;
else if (!strcasecmp (val, "off")
- || (*val == '0' && !*(val + 1)))
+ || !strcasecmp (val, "no")
+ || !strcmp (val, "0"))
lockable_boolean_value = 0;
- else if (!strcasecmp (val, "never")
- || (*val == '-' && *(val + 1) == '1' && !*(val + 2)))
+ else if (!strcasecmp (val, "never") || !strcmp (val, "-1"))
lockable_boolean_value = -1;
else
{
return 1;
}
+static int
+cmd_spec_restrict_file_names (const char *com, const char *val, void *closure)
+{
+ /* The currently accepted values are `none', `unix', and
+ `windows'. */
+ if (0 == strcasecmp (val, "none"))
+ opt.restrict_file_names = restrict_none;
+ else if (0 == strcasecmp (val, "unix"))
+ opt.restrict_file_names = restrict_shell;
+ else if (0 == strcasecmp (val, "windows"))
+ opt.restrict_file_names = restrict_windows;
+ else
+ {
+ fprintf (stderr, _("%s: %s: Invalid specification `%s'.\n"),
+ exec_name, com, val);
+ return 0;
+ }
+ return 1;
+}
+
static int
cmd_spec_useragent (const char *com, const char *val, void *closure)
{