static void ftp_login(struct connection *c) { unsigned char *login; unsigned char *u; int logl = 0; set_timeout(c); login = init_str(); add_to_str(&login, &logl, cast_uchar "USER "); if ((u = get_user_name(c->url)) && *u) add_to_str(&login, &logl, u); else add_to_str(&login, &logl, cast_uchar "anonymous"); if (u) mem_free(u); if (ftp_options.fast_ftp) { struct ftp_connection_info *fi; add_to_str(&login, &logl, cast_uchar "\r\nPASS "); if ((u = get_pass(c->url)) && *u) add_to_str(&login, &logl, u); else add_to_str(&login, &logl, ftp_options.anon_pass); if (u) mem_free(u); add_to_str(&login, &logl, cast_uchar "\r\n"); if (!(fi = add_file_cmd_to_str(c))) { mem_free(login); return; } add_to_str(&login, &logl, fi->cmdbuf); } else add_to_str(&login, &logl, cast_uchar "\r\n"); write_to_socket(c, c->sock1, login, strlen(cast_const_char login), ftp_logged); mem_free(login); setcstate(c, S_SENT); }
void ftp_send_retr_req(struct connection *c, int state) { struct ftp_connection_info *fi; unsigned char *login; int logl = 0; set_timeout(c); login = init_str(); if (!c->info && !(fi = add_file_cmd_to_str(c))) { mem_free(login); return; } else fi = c->info; if (ftp_options.fast_ftp) a:add_to_str(&login, &logl, fi->cmdbuf); else { unsigned char *nl = strchr(fi->cmdbuf, '\n'); if (!nl) goto a; nl++; add_bytes_to_str(&login, &logl, fi->cmdbuf, nl - fi->cmdbuf); memmove(fi->cmdbuf, nl, strlen(nl) + 1); } write_to_socket(c, c->sock1, login, strlen(login), ftp_retr_1); mem_free(login); setcstate(c, state); }