Module Name: src Committed By: christos Date: Wed Sep 25 16:55:40 UTC 2024
Modified Files: src/usr.bin/ftp: fetch.c ftp.1 ftp_var.h main.c Log Message: PR/58581: Sunil Nimmagadda: Add flag to allow specifying extra http header fields. To generate a diff of this commit: cvs rdiff -u -r1.240 -r1.241 src/usr.bin/ftp/fetch.c cvs rdiff -u -r1.155 -r1.156 src/usr.bin/ftp/ftp.1 cvs rdiff -u -r1.88 -r1.89 src/usr.bin/ftp/ftp_var.h cvs rdiff -u -r1.131 -r1.132 src/usr.bin/ftp/main.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/ftp/fetch.c diff -u src/usr.bin/ftp/fetch.c:1.240 src/usr.bin/ftp/fetch.c:1.241 --- src/usr.bin/ftp/fetch.c:1.240 Wed Sep 25 12:53:58 2024 +++ src/usr.bin/ftp/fetch.c Wed Sep 25 12:55:39 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: fetch.c,v 1.240 2024/09/25 16:53:58 christos Exp $ */ +/* $NetBSD: fetch.c,v 1.241 2024/09/25 16:55:39 christos Exp $ */ /*- * Copyright (c) 1997-2015 The NetBSD Foundation, Inc. @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: fetch.c,v 1.240 2024/09/25 16:53:58 christos Exp $"); +__RCSID("$NetBSD: fetch.c,v 1.241 2024/09/25 16:55:39 christos Exp $"); #endif /* not lint */ /* @@ -865,6 +865,7 @@ print_get(FETCH *fin, int hasleading, in const struct urlinfo *ui) { const char *leading = hasleading ? ", " : " ("; + struct entry *np; if (isproxy) { if (verbose) { @@ -882,6 +883,10 @@ print_get(FETCH *fin, int hasleading, in print_host(fin, ui); fetch_printf(fin, "Accept: */*\r\n"); fetch_printf(fin, "Connection: close\r\n"); + SLIST_FOREACH(np, &custom_headers, entries) { + fetch_printf(fin, "%s\r\n", np->header); + } + if (restart_point) { fputs(leading, ttyout); fetch_printf(fin, "Range: bytes=" LLF "-\r\n", Index: src/usr.bin/ftp/ftp.1 diff -u src/usr.bin/ftp/ftp.1:1.155 src/usr.bin/ftp/ftp.1:1.156 --- src/usr.bin/ftp/ftp.1:1.155 Thu Jul 18 23:51:21 2024 +++ src/usr.bin/ftp/ftp.1 Wed Sep 25 12:55:39 2024 @@ -1,4 +1,4 @@ -.\" $NetBSD: ftp.1,v 1.155 2024/07/19 03:51:21 lukem Exp $ +.\" $NetBSD: ftp.1,v 1.156 2024/09/25 16:55:39 christos Exp $ .\" .\" Copyright (c) 1996-2024 The NetBSD Foundation, Inc. .\" All rights reserved. @@ -57,7 +57,7 @@ .\" .\" @(#)ftp.1 8.3 (Berkeley) 10/9/94 .\" -.Dd July 19, 2024 +.Dd September 25, 2024 .Dt FTP 1 .Os .Sh NAME @@ -67,6 +67,7 @@ .Nm .Op Fl 46AadefginpRtVv\&? .Op Fl b Ar bufsize +.Op Fl h Ar header .Op Fl N Ar netrc .Op Fl o Ar output .Op Fl P Ar port @@ -223,6 +224,14 @@ or proxies. .It Fl g Disables file name globbing. +It Fl H Ar header +Include the provided +.Ar header +string as a custom +.Tn HTTP +header for an +.Th HTTP +request. .It Fl i Turns off interactive prompting during multiple file transfers. Index: src/usr.bin/ftp/ftp_var.h diff -u src/usr.bin/ftp/ftp_var.h:1.88 src/usr.bin/ftp/ftp_var.h:1.89 --- src/usr.bin/ftp/ftp_var.h:1.88 Sun Feb 18 17:33:15 2024 +++ src/usr.bin/ftp/ftp_var.h Wed Sep 25 12:55:39 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: ftp_var.h,v 1.88 2024/02/18 22:33:15 wiz Exp $ */ +/* $NetBSD: ftp_var.h,v 1.89 2024/09/25 16:55:39 christos Exp $ */ /*- * Copyright (c) 1996-2009 The NetBSD Foundation, Inc. @@ -101,6 +101,7 @@ #endif #include <sys/param.h> +#include <sys/queue.h> #include <netinet/in.h> #include <arpa/inet.h> @@ -165,6 +166,14 @@ enum { FEAT_max }; +/* + * Custom HTTP headers + */ +struct entry { + SLIST_ENTRY(entry) entries; + const char *header; +}; +SLIST_HEAD(http_headers, entry); /* * Global defines @@ -320,8 +329,9 @@ GLOBAL FILE *cin; GLOBAL FILE *cout; GLOBAL int data; -extern struct cmd cmdtab[]; -extern struct option optiontab[]; +extern struct cmd cmdtab[]; +extern struct option optiontab[]; +extern struct http_headers custom_headers; extern size_t ftp_buflen; Index: src/usr.bin/ftp/main.c diff -u src/usr.bin/ftp/main.c:1.131 src/usr.bin/ftp/main.c:1.132 --- src/usr.bin/ftp/main.c:1.131 Wed Sep 25 12:53:58 2024 +++ src/usr.bin/ftp/main.c Wed Sep 25 12:55:39 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.131 2024/09/25 16:53:58 christos Exp $ */ +/* $NetBSD: main.c,v 1.132 2024/09/25 16:55:39 christos Exp $ */ /*- * Copyright (c) 1996-2023 The NetBSD Foundation, Inc. @@ -98,7 +98,7 @@ __COPYRIGHT("@(#) Copyright (c) 1985, 19 #if 0 static char sccsid[] = "@(#)main.c 8.6 (Berkeley) 10/9/94"; #else -__RCSID("$NetBSD: main.c,v 1.131 2024/09/25 16:53:58 christos Exp $"); +__RCSID("$NetBSD: main.c,v 1.132 2024/09/25 16:55:39 christos Exp $"); #endif #endif /* not lint */ @@ -134,11 +134,14 @@ static int usage(void); static int usage_help(void); static void setupoption(const char *, const char *, const char *); +struct http_headers custom_headers; + int main(int volatile argc, char **volatile argv) { int ch, rval; struct passwd *pw; + struct entry *p; char *cp, *ep, *anonpass, *upload_path, *src_addr; const char *anonuser; int dumbterm, isupload; @@ -267,7 +270,8 @@ main(int volatile argc, char **volatile } } - while ((ch = getopt(argc, argv, ":46Aab:defginN:o:pP:q:r:Rs:tT:u:vVx:")) != -1) { + SLIST_INIT(&custom_headers); + while ((ch = getopt(argc, argv, ":46Aab:defgH:inN:o:pP:q:r:Rs:tT:u:vVx:")) != -1) { switch (ch) { case '4': family = AF_INET; @@ -315,6 +319,12 @@ main(int volatile argc, char **volatile doglob = 0; break; + case 'H': + p = ftp_malloc(sizeof(*p)); + p->header = ftp_strdup(optarg); + SLIST_INSERT_HEAD(&custom_headers, p, entries); + break; + case 'i': interactive = 0; break;