commit - bf9ca5e71c334c4d96466a3e6bee8b2dbde5c884
commit + 9888507cd4212b360fc15e4262e5fd95844efc7c
blob - 7300b94ac70ff2cd656979e030da9e3ae9c81881
blob + f76deeb670ee35ddd262c3c180f2ecb27e609f5b
--- titan.c
+++ titan.c
return 0;
}
+static FILE *
+open_input_file(int argc, char **argv)
+{
+ FILE *fp;
+ char buf[BUFSIZ];
+ char sfn[22];
+ size_t r;
+ int fd;
+
+ if (argc > 1) {
+ if ((fp = fopen(argv[1], "r")) == NULL)
+ err(1, "can't open %s", argv[1]);
+ return fp;
+ }
+
+ strlcpy(sfn, "/tmp/titan.XXXXXXXXXX", sizeof(sfn));
+ if ((fd = mkstemp(sfn)) == -1 ||
+ (fp = fdopen(fd, "w+")) == NULL) {
+ warn("%s", sfn);
+ if (fd != -1) {
+ unlink(sfn);
+ close(fd);
+ }
+ errx(1, "can't create temp file");
+ }
+ unlink(sfn);
+
+ for (;;) {
+ r = fread(buf, 1, sizeof(buf), stdin);
+ if (r == 0)
+ break;
+ fwrite(buf, 1, r, fp);
+ }
+ if (ferror(fp))
+ err(1, "I/O error");
+
+ if (fseeko(fp, 0, SEEK_SET) == -1)
+ err(1, "fseeko");
+
+ return fp;
+}
+
static void __dead
usage(void)
{
fprintf(stderr,
- "usage: %s [-C cert] [-K key] [-m mime] [-t token] url file\n",
+ "usage: %s [-C cert] [-K key] [-m mime] [-t token] url [file]\n",
getprogname());
exit(1);
}
char *req;
int sock, ch;
- if (pledge("stdio rpath inet dns", NULL) == -1)
+ if (pledge("stdio rpath tmppath inet dns", NULL) == -1)
err(1, "pledge");
while ((ch = getopt(argc, argv, "C:K:m:t:")) != -1) {
if (cert != NULL && key == NULL)
key = cert;
- if (argc != 2)
+ if (argc > 2)
usage();
- if ((in = fopen(argv[1], "r")) == NULL)
- err(1, "can't open %s", argv[1]);
+ in = open_input_file(argc, argv);
- /* drop rpath */
+ /* drop rpath tmppath */
if (pledge("stdio inet dns", NULL) == -1)
err(1, "pledge");