diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 1997-02-03 06:08:08 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 1997-02-03 06:08:08 +0000 |
commit | c5028873046a262c61e4f06e160260394f7effca (patch) | |
tree | 1bfc334d685bd05c4abe342bb15221dc47c77240 /usr.bin/ftp | |
parent | 40d540e0524218351a0ae38723c937b80b24ec1a (diff) |
subsumed by fetch.c
Diffstat (limited to 'usr.bin/ftp')
-rw-r--r-- | usr.bin/ftp/http.c | 165 |
1 files changed, 0 insertions, 165 deletions
diff --git a/usr.bin/ftp/http.c b/usr.bin/ftp/http.c deleted file mode 100644 index 69642d7a825..00000000000 --- a/usr.bin/ftp/http.c +++ /dev/null @@ -1,165 +0,0 @@ -/* $OpenBSD: http.c,v 1.2 1997/01/29 22:21:32 millert Exp $ */ - -/* - * Copyright (c) 1996 Theo de Raadt - * Copyright (c) 1996 Brian Mitchell - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/types.h> -#include <sys/file.h> -#include <sys/socket.h> -#include <netinet/in.h> - -#include <ctype.h> -#include <err.h> -#include <netdb.h> -#include <pwd.h> -#include <signal.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -/* - * This function lets you retrieve files from the WWW. It will accept - * any http:// url. It conects and retrieves the file, saving it in - * the current directory. - * - * Limitations: - * http://host does not work, nor http://host/ - you have to specifically - * specify the filename you want to transfer. - */ -int -http_fetch(url) - char *url; -{ - char *hostname, *filename, basename[MAXPATHLEN] = "/"; - char buf[8192], *bufp, *req = NULL; - struct sockaddr_in addr; - struct hostent *he; - FILE *write_to; - char *s, *p; - int bytes, c, d; - int sock = -1, file = -1, ret = 1; - - s = url + strlen("http://"); - p = strchr(s, '/'); - if (p) - *p = '\0'; - else - p = s + strlen(s); - if (p - s > MAXHOSTNAMELEN-1) { - warn("hostname too long"); - return (1); - } - hostname = s; - filename = p + 1; - - p = strrchr(filename, '/'); - if (p == NULL) { - if (strlen(s) > MAXPATHLEN-1) { - warn("filename too long"); - return (1); - } - strcpy(basename, filename); - } else { - p++; - if (strlen(p) > MAXPATHLEN-1) { - warn("filename too long"); - return (1); - } - strcpy(basename, p); - } - if (strlen(basename) == 0) - strcpy(basename, "index.html"); - - req = (char *)malloc(sizeof("GET ") + strlen(filename) +3); - if (!req) { - warn("no memory"); - return (1); - } - sprintf(req, "GET /%s\n", filename); - - he = gethostbyname(hostname); - if (!he) { - herror("gethostbyname"); - goto die; - } - - sock = socket(AF_INET, SOCK_STREAM, 0); - if (sock == -1) { - perror("socket"); - goto die; - } - - memset(&addr, 0, sizeof addr); - addr.sin_family = he->h_addrtype; - addr.sin_port = htons(80); - memcpy(&addr.sin_addr, he->h_addr, he->h_length); - - if (connect(sock, (struct sockaddr *)&addr, sizeof addr) == -1) { - perror("connect"); - goto die; - } - printf("Connected to %s.\n", hostname); - - printf("Retrieving using: %s", req); - for (bufp = req, c = strlen(bufp); c > 0; c -= d, bufp += d) { - if ((d = write(sock, bufp, c)) <= 0) - break; - } - if (d == -1) { - perror("sending command"); - goto die; - } - - file = open(basename, O_CREAT|O_WRONLY|O_TRUNC, 0666); - if (!file) { - perror("fopen"); - goto die; - } - - bytes = 0; - while ((c = read(sock, buf, sizeof (buf))) > 0) { - bytes += c; - for (bufp = buf; c > 0; c -= d, bufp += d) - if ((d = write(file, bufp, c)) <= 0) - break; - } - if (d == -1) { - perror("failed to receive correctly"); - goto die; - } - printf("Success, closing connection.\n"); - ret = 0; -die: - if (sock != -1) - close(sock); - if (file != -1) - close(file); - if (req) - free(req); - return (ret); -} |