X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Finit.c;h=9ce9b1662a8414601425fa65b4fca94b758387bd;hp=e342b848ccb8bdfd207888f0cbaffde5294d48f2;hb=7c802e58d3e45e3a21d99c8d24dc5be806ecf174;hpb=30ac043b0a4a9a983dd1b50ce1c89ed953019292 diff --git a/src/init.c b/src/init.c index e342b848..9ce9b166 100644 --- a/src/init.c +++ b/src/init.c @@ -100,6 +100,7 @@ CMD_DECLARE (cmd_spec_htmlify); 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. @@ -131,6 +132,7 @@ static struct { { "deleteafter", &opt.delete_after, cmd_boolean }, { "dirprefix", &opt.dir_prefix, cmd_directory }, { "dirstruct", NULL, cmd_spec_dirstruct }, + { "dnscache", &opt.dns_cache, cmd_boolean }, { "domains", &opt.domains, cmd_vector }, { "dotbytes", &opt.dot_bytes, cmd_bytes }, { "dotsinline", &opt.dots_in_line, cmd_number }, @@ -187,6 +189,7 @@ static struct { { "reject", &opt.rejects, cmd_vector }, { "relativeonly", &opt.relative_only, cmd_boolean }, { "removelisting", &opt.remove_listing, cmd_boolean }, + { "restrictfilenames", NULL, cmd_spec_restrict_file_names }, { "retrsymlinks", &opt.retr_symlinks, cmd_boolean }, { "retryconnrefused", &opt.retry_connrefused, cmd_boolean }, { "robots", &opt.use_robots, cmd_boolean }, @@ -204,6 +207,7 @@ static struct { { "sslcheckcert", &opt.sslcheckcert, cmd_number }, { "sslprotocol", &opt.sslprotocol, cmd_number }, #endif /* HAVE_SSL */ + { "strictcomments", &opt.strict_comments, cmd_boolean }, { "timeout", &opt.timeout, cmd_time }, { "timestamping", &opt.timestamping, cmd_boolean }, { "tries", &opt.ntry, cmd_number_inf }, @@ -278,6 +282,16 @@ defaults (void) opt.dot_bytes = 1024; opt.dot_spacing = 10; 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_files_os = restrict_unix; +#else + opt.restrict_files_os = restrict_windows; +#endif + opt.restrict_files_ctrl = 1; } /* Return the user's home directory (strdup-ed), or NULL if none is @@ -540,12 +554,22 @@ static int 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 { @@ -579,17 +603,17 @@ cmd_lockable_boolean (const char *com, const char *val, void *closure) 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 { @@ -995,6 +1019,47 @@ cmd_spec_recursive (const char *com, const char *val, void *closure) return 1; } +static int +cmd_spec_restrict_file_names (const char *com, const char *val, void *closure) +{ + int restrict_os = opt.restrict_files_os; + int restrict_ctrl = opt.restrict_files_ctrl; + + const char *end = strchr (val, ','); + if (!end) + end = val + strlen (val); + +#define VAL_IS(string_literal) BOUNDED_EQUAL (val, end, string_literal) + + if (VAL_IS ("unix")) + restrict_os = restrict_unix; + else if (VAL_IS ("windows")) + restrict_os = restrict_windows; + else if (VAL_IS ("nocontrol")) + restrict_ctrl = 0; + else + { + err: + fprintf (stderr, _("%s: %s: Invalid specification `%s'.\n"), + exec_name, com, val); + return 0; + } + +#undef VAL_IS + + if (*end) + { + if (!strcmp (end + 1, "nocontrol")) + restrict_ctrl = 0; + else + goto err; + } + + opt.restrict_files_os = restrict_os; + opt.restrict_files_ctrl = restrict_ctrl; + return 1; +} + static int cmd_spec_useragent (const char *com, const char *val, void *closure) { @@ -1028,8 +1093,6 @@ myatoi (const char *s) return res; } -#define ISODIGIT(x) ((x) >= '0' && (x) <= '7') - static int check_user_specified_header (const char *s) {