summarylogtreecommitdiffstats
path: root/xdg-compliant-wget-hsts-file.patch
diff options
context:
space:
mode:
authorNoah Vogt2021-11-17 23:53:48 +0100
committerNoah Vogt2021-11-17 23:53:48 +0100
commitfa010525eb105a0ff6b25e821524dbcfe9e96d0d (patch)
tree16c8985afa58a624bb4ea8a66979ca39dfcb6e48 /xdg-compliant-wget-hsts-file.patch
downloadaur-fa010525eb105a0ff6b25e821524dbcfe9e96d0d.tar.gz
init commit
Diffstat (limited to 'xdg-compliant-wget-hsts-file.patch')
-rw-r--r--xdg-compliant-wget-hsts-file.patch179
1 files changed, 179 insertions, 0 deletions
diff --git a/xdg-compliant-wget-hsts-file.patch b/xdg-compliant-wget-hsts-file.patch
new file mode 100644
index 000000000000..4aedf7020e4f
--- /dev/null
+++ b/xdg-compliant-wget-hsts-file.patch
@@ -0,0 +1,179 @@
+From b27917936c64ac9036509b3a67516738e924c9ea Mon Sep 17 00:00:00 2001
+From: Noah Vogt <noah@noahvogt.com>
+Date: Wed, 17 Nov 2021 23:32:37 +0100
+Subject: [PATCH] xdg compliant wget hsts file
+
+---
+ src/hsts.c | 4 ++--
+ src/main.c | 29 ++++++++++++++++++++++++-----
+ src/path.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/path.h | 5 +++++
+ 4 files changed, 85 insertions(+), 7 deletions(-)
+ create mode 100644 src/path.c
+ create mode 100644 src/path.h
+
+diff --git a/src/hsts.c b/src/hsts.c
+index 9aa97b4..2562327 100644
+--- a/src/hsts.c
++++ b/src/hsts.c
+@@ -630,7 +630,7 @@ get_hsts_store_filename (void)
+
+ if (opt.homedir)
+ {
+- filename = ajoin_dir_file (opt.homedir, ".wget-hsts-test");
++ filename = ajoin_dir_file (get_hsts_file_dir(), HSTS_TEST_FILE);
+ fp = fopen (filename, "w");
+ if (fp)
+ fclose (fp);
+@@ -796,7 +796,7 @@ test_hsts_read_database (void)
+
+ if (opt.homedir)
+ {
+- file = ajoin_dir_file (opt.homedir, ".wget-hsts-testing");
++ file = ajoin_dir_file (get_hsts_file_dir(), HSTS_TESTING_FILE);
+ fp = fopen (file, "w");
+ if (fp)
+ {
+diff --git a/src/main.c b/src/main.c
+index 0f7b6b1..39082bc 100644
+--- a/src/main.c
++++ b/src/main.c
+@@ -31,6 +31,8 @@ as that of the covered work. */
+
+ #include <stdio.h>
+ #include <stdlib.h>
++#include <sys/types.h>
++#include <sys/stat.h>
+ #include <unistd.h>
+ #include <string.h>
+ #include <signal.h>
+@@ -63,6 +65,7 @@ as that of the covered work. */
+ #include <getopt.h>
+ #include <getpass.h>
+ #include <quote.h>
++#include "path.c"
+
+ #ifdef TESTING
+ /* Rename the main function so we can have a main() in fuzzing code
+@@ -178,8 +181,21 @@ get_hsts_database (void)
+
+ if (opt.homedir)
+ {
+- char *dir = ajoin_dir_file(opt.homedir, ".wget-hsts");
+- return dir;
++ char* dir = get_hsts_file_dir();
++ char* path = ajoin_dir_file(get_hsts_file_dir(), HSTS_FILE);
++ struct stat st = {0};
++
++ /* make directory for hsts file if it does not exist */
++ if (stat(dir, &st) == -1)
++ {
++ int mkdir_sucess = mkdir(dir, 0700);
++ if (!(stat(dir, &st) == 0 && S_ISDIR(st.st_mode)))
++ {
++ printf("Error: Could not create hsts file\n");
++ exit (WGET_EXIT_GENERIC_ERROR);
++ }
++ }
++ return path;
+ }
+
+ return NULL;
+@@ -206,7 +222,8 @@ load_hsts (void)
+ else
+ logprintf (LOG_NOTQUIET, "ERROR: could not open HSTS store. HSTS will be disabled.\n");
+
+- xfree (filename);
++ /* TODO: get free() call working again */
++ // xfree (filename);
+ }
+ }
+
+@@ -224,9 +241,11 @@ save_hsts (void)
+ }
+
+ hsts_store_close (hsts_store);
+- xfree (hsts_store);
++ /* TODO: get free() call working again */
++ // xfree (hsts_store);
+
+- xfree (filename);
++ /* TODO: get free() call working again */
++ // xfree (filename);
+ }
+ }
+ #endif
+diff --git a/src/path.c b/src/path.c
+new file mode 100644
+index 0000000..51cc3f0
+--- /dev/null
++++ b/src/path.c
+@@ -0,0 +1,54 @@
++#include "wget.h"
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <limits.h>
++#include <string.h>
++
++#include "path.h"
++#include "exits.h"
++
++char*
++get_hsts_file_dir (void)
++{
++ char *home_dir;
++ char *default_xdg_dir = "/" DEDAULT_XDG_CACHE_DIR;
++ char *hsts_file_base_dir = "/" HSTS_FILE_DIR;
++ char* user_xdg_dir;
++ static char hsts_file_dir[_POSIX_PATH_MAX] = "";
++ const char *slash = "/";
++ char *check_multiple;
++
++ if (!(home_dir = getenv("HOME")))
++ {
++ printf("Error: Could not access home directory\n");
++ exit (WGET_EXIT_GENERIC_ERROR);
++ }
++
++ /* prevent the function from runnning multiple times by returning right away
++ * when a a "/" character is found in the hsts_file_dir variable
++ */
++ check_multiple = hsts_file_dir;
++ while (*check_multiple)
++ {
++ if (strchr(slash, *check_multiple))
++ {
++ return hsts_file_dir;
++ }
++ check_multiple++;
++ }
++
++ if ((user_xdg_dir = getenv("XDG_CACHE_HOME")))
++ {
++ strcat(hsts_file_dir, user_xdg_dir);
++ } else
++ {
++ strcat(hsts_file_dir, home_dir);
++ strcat(hsts_file_dir, default_xdg_dir);
++ }
++
++ strcat(hsts_file_dir, hsts_file_base_dir);
++
++ return hsts_file_dir;
++}
+diff --git a/src/path.h b/src/path.h
+new file mode 100644
+index 0000000..c9b1f7b
+--- /dev/null
++++ b/src/path.h
+@@ -0,0 +1,5 @@
++#define HSTS_FILE_DIR "wget"
++#define HSTS_FILE "hsts"
++#define HSTS_TEST_FILE "hsts-test"
++#define HSTS_TESTING_FILE "hsts-testing"
++#define DEDAULT_XDG_CACHE_DIR ".cache"
+--
+2.34.0
+