X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fmain.c;h=dc15bfbf9e82cd54e03696a3ee8880cdb7efe9f5;hp=20c2aa0c2b3b47d3b30633b54884272ad85cdca6;hb=8e9648a972b88fa6eb2293383bd281c6021394d2;hpb=5e7f976fa1be6af7b5698972289107747fe37d0e diff --git a/src/main.c b/src/main.c index 20c2aa0c..dc15bfbf 100644 --- a/src/main.c +++ b/src/main.c @@ -56,6 +56,8 @@ as that of the covered work. */ #include "http.h" /* for save_cookies */ #include +#include +#include #ifndef PATH_SEPARATOR # define PATH_SEPARATOR '/' @@ -140,6 +142,7 @@ static struct cmdline_option option_data[] = { { "accept", 'A', OPT_VALUE, "accept", -1 }, { "append-output", 'a', OPT__APPEND_OUTPUT, NULL, required_argument }, + { "ask-password", 0, OPT_BOOLEAN, "askpassword", -1 }, { "auth-no-challenge", 0, OPT_BOOLEAN, "authnochallenge", -1 }, { "background", 'b', OPT_BOOLEAN, "background", -1 }, { "backup-converted", 'K', OPT_BOOLEAN, "backupconverted", -1 }, @@ -301,7 +304,7 @@ static void init_switches (void) { char *p = short_options; - int i, o = 0; + size_t i, o = 0; for (i = 0; i < countof (option_data); i++) { struct cmdline_option *opt = &option_data[i]; @@ -482,6 +485,8 @@ Download:\n"), --user=USER set both ftp and http user to USER.\n"), N_("\ --password=PASS set both ftp and http password to PASS.\n"), + N_("\ + --ask-password prompt for passwords.\n"), "\n", N_("\ @@ -645,7 +650,7 @@ Recursive accept/reject:\n"), N_("Mail bug reports and suggestions to .\n") }; - int i; + size_t i; printf (_("GNU Wget %s, a non-interactive network retriever.\n"), version_string); @@ -683,6 +688,16 @@ secs_to_human_time (double interval) return buf; } +static char * +prompt_for_password (void) +{ + if (opt.user) + printf (_("Password for user %s: "), quote (opt.user)); + else + printf (_("Password: ")); + return getpass(""); +} + /* Function that prints the line argument while limiting it to at most line_length. prefix is printed on the first line and an appropriate number of spaces are added on subsequent @@ -1010,11 +1025,24 @@ will be placed in the single file you specified.\n\n")); } if (opt.timestamping) { - fputs (_("\ -Cannot specify -N if -O is given. See the manual for details.\n\n"), stdout); - print_usage (); - exit (1); + logprintf (LOG_NOTQUIET, "%s", _("\ +WARNING: timestamping does nothing in combination with -O. See the manual\n\ +for details.\n\n")); + opt.timestamping = false; } + if (opt.noclobber && file_exists_p(opt.output_document)) + { + /* Check if output file exists; if it does, exit. */ + logprintf (LOG_VERBOSE, _("File `%s' already there; not retrieving.\n"), opt.output_document); + exit(1); + } + } + + if (opt.ask_passwd && opt.passwd) + { + printf (_("Cannot specify both --ask-password and --password.\n")); + print_usage (); + exit (1); } if (!nurl && !opt.input_filename) @@ -1029,6 +1057,14 @@ Cannot specify -N if -O is given. See the manual for details.\n\n"), stdout); exit (1); } + if (opt.ask_passwd) + { + opt.passwd = prompt_for_password (); + + if (opt.passwd == NULL || opt.passwd[0] == '\0') + exit (1); + } + #ifdef MSDOS if (opt.wdebug) dbug_init(); @@ -1065,7 +1101,19 @@ Cannot specify -N if -O is given. See the manual for details.\n\n"), stdout); if (opt.output_document) { if (HYPHENP (opt.output_document)) - output_stream = stdout; + { +#ifdef WINDOWS + FILE *result; + result = freopen (NULL, "wb", stdout); + if (result == NULL) + { + logputs (LOG_NOTQUIET, _("\ +WARNING: Can't reopen standard output in binary mode;\n\ + downloaded file may contain inappropriate line endings.\n")); + } +#endif + output_stream = stdout; + } else { struct_fstat st;