Split musl patch into multiple small ones. Much easier to reason about. Removed stack protector patch. This is not an issue anymore. Removed NLS support. There seems to be a linking issue as libiconv-stub does not have a shared library component. Signed-off-by: Rosen Penev <rosenp@gmail.com>lilik-openwrt-22.03
@ -0,0 +1,49 @@ | |||
--- a/src/mount_davfs.c | |||
+++ b/src/mount_davfs.c | |||
@@ -702,7 +702,7 @@ check_fstab(const dav_args *args) | |||
struct mntent *ft = getmntent(fstab); | |||
while (ft) { | |||
if (ft->mnt_dir) { | |||
- char *mp = canonicalize_file_name(ft->mnt_dir); | |||
+ char *mp = realpath(ft->mnt_dir, NULL); | |||
if (mp) { | |||
if (strcmp(mp, mpoint) == 0) { | |||
free(mp); | |||
@@ -966,7 +966,7 @@ parse_commandline(int argc, char *argv[]) | |||
url = ne_strdup(argv[i]); | |||
} | |||
i++; | |||
- mpoint = canonicalize_file_name(argv[i]); | |||
+ mpoint = realpath(argv[i], NULL); | |||
if (!mpoint) | |||
error(EXIT_FAILURE, 0, | |||
_("can't evaluate path of mount point %s"), mpoint); | |||
@@ -2188,7 +2188,7 @@ read_config(dav_args *args, const char * filename, int system) | |||
error_at_line(EXIT_FAILURE, 0, filename, lineno, | |||
_("malformed line")); | |||
*(parmv[0] + strlen(parmv[0]) - 1) = '\0'; | |||
- char *mp = canonicalize_file_name(parmv[0] + 1); | |||
+ char *mp = realpath(parmv[0] + 1, NULL); | |||
if (mp) { | |||
applies = (strcmp(mp, mpoint) == 0); | |||
free(mp); | |||
@@ -2440,7 +2440,7 @@ read_secrets(dav_args *args, const char *filename) | |||
if (scheme && !port) | |||
port = ne_uri_defaultport(scheme); | |||
- char *mp = canonicalize_file_name(parmv[0]); | |||
+ char *mp = realpath(parmv[0], NULL); | |||
char *ccert = NULL; | |||
if (args->clicert) { | |||
--- a/src/umount_davfs.c | |||
+++ b/src/umount_davfs.c | |||
@@ -118,7 +118,7 @@ main(int argc, char *argv[]) | |||
if (optind < (argc - 1)) | |||
error(EXIT_FAILURE, 0, _("too many arguments")); | |||
- char *mpoint = canonicalize_file_name(argv[optind]); | |||
+ char *mpoint = realpath(argv[optind], NULL); | |||
char *umount_command = NULL; | |||
if (mpoint) { |
@ -0,0 +1,11 @@ | |||
--- a/src/dav_fuse.c | |||
+++ b/src/dav_fuse.c | |||
@@ -48,6 +48,8 @@ | |||
#include <sys/stat.h> | |||
#endif | |||
+#include <sys/select.h> | |||
+ | |||
#include "defaults.h" | |||
#include "mount_davfs.h" | |||
#include "cache.h" |
@ -0,0 +1,11 @@ | |||
--- a/src/kernel_interface.c | |||
+++ b/src/kernel_interface.c | |||
@@ -45,6 +45,8 @@ | |||
#include <unistd.h> | |||
#endif | |||
+#include <sys/types.h> | |||
+ | |||
#ifdef HAVE_SYS_MOUNT_H | |||
#include <sys/mount.h> | |||
#endif |
@ -0,0 +1,10 @@ | |||
--- a/src/mount_davfs.c | |||
+++ b/src/mount_davfs.c | |||
@@ -40,6 +40,7 @@ | |||
#ifdef HAVE_MNTENT_H | |||
#include <mntent.h> | |||
#endif | |||
+#include <paths.h> | |||
#include <pwd.h> | |||
#include <signal.h> | |||
#ifdef HAVE_STDINT_H |
@ -0,0 +1,120 @@ | |||
--- a/configure.ac | |||
+++ b/configure.ac | |||
@@ -42,7 +42,7 @@ DAV_CHECK_NEON | |||
# Checks for header files. | |||
AC_HEADER_DIRENT | |||
AC_HEADER_STDC | |||
-AC_CHECK_HEADERS([fcntl.h iconv.h libintl.h langinfo.h limits.h locale.h mntent.h stddef.h stdint.h stdlib.h string.h sys/file.h sys/mount.h sys/time.h syslog.h termios.h unistd.h utime.h]) | |||
+AC_CHECK_HEADERS([error.h fcntl.h iconv.h libintl.h langinfo.h limits.h locale.h mntent.h stddef.h stdint.h stdlib.h string.h sys/file.h sys/mount.h sys/time.h syslog.h termios.h unistd.h utime.h]) | |||
# Checks for typedefs, structures, and compiler characteristics. | |||
AC_C_CONST | |||
--- a/src/cache.c | |||
+++ b/src/cache.c | |||
@@ -19,12 +19,12 @@ | |||
#include "config.h" | |||
+#include "compat.h" | |||
#ifdef HAVE_DIRENT_H | |||
#include <dirent.h> | |||
#endif | |||
#include <errno.h> | |||
-#include <error.h> | |||
#ifdef HAVE_FCNTL_H | |||
#include <fcntl.h> | |||
#endif | |||
--- /dev/null | |||
+++ b/src/compat.h | |||
@@ -0,0 +1,39 @@ | |||
+#ifndef _COMPAT_H | |||
+#define _COMPAT_H | |||
+ | |||
+#ifdef HAVE_ERROR_H | |||
+# include <error.h> | |||
+#else | |||
+# include <stdio.h> | |||
+# include <stdarg.h> | |||
+# include <stdlib.h> | |||
+# include <string.h> | |||
+static void error_at_line(int status, int errnum, const char *filename, | |||
+ unsigned int linenum, const char *format, ...) | |||
+{ | |||
+ va_list ap; | |||
+ | |||
+ fflush(stdout); | |||
+ | |||
+ if (filename != NULL) | |||
+ fprintf(stderr, "%s:%u: ", filename, linenum); | |||
+ | |||
+ va_start(ap, format); | |||
+ vfprintf(stderr, format, ap); | |||
+ va_end(ap); | |||
+ | |||
+ if (errnum != 0) | |||
+ fprintf(stderr, ": %s", strerror(errnum)); | |||
+ | |||
+ fprintf(stderr, "\n"); | |||
+ | |||
+ if (status != 0) | |||
+ exit(status); | |||
+} | |||
+ | |||
+#define error(status, errnum, format...) \ | |||
+ error_at_line(status, errnum, NULL, 0, format) | |||
+ | |||
+#endif /* HAVE_ERROR_H */ | |||
+ | |||
+#endif /* _COMPAT_H */ | |||
--- a/src/kernel_interface.c | |||
+++ b/src/kernel_interface.c | |||
@@ -19,8 +19,8 @@ | |||
#include "config.h" | |||
+#include "compat.h" | |||
-#include <error.h> | |||
#ifdef HAVE_FCNTL_H | |||
#include <fcntl.h> | |||
#endif | |||
--- a/src/mount_davfs.c | |||
+++ b/src/mount_davfs.c | |||
@@ -19,10 +19,10 @@ | |||
#include "config.h" | |||
+#include "compat.h" | |||
#include <ctype.h> | |||
#include <errno.h> | |||
-#include <error.h> | |||
#ifdef HAVE_FCNTL_H | |||
#include <fcntl.h> | |||
#endif | |||
--- a/src/umount_davfs.c | |||
+++ b/src/umount_davfs.c | |||
@@ -19,8 +19,8 @@ | |||
#include "config.h" | |||
+#include "compat.h" | |||
-#include <error.h> | |||
#include <errno.h> | |||
#include <getopt.h> | |||
#ifdef HAVE_LIBINTL_H | |||
--- a/src/webdav.c | |||
+++ b/src/webdav.c | |||
@@ -19,9 +19,9 @@ | |||
#include "config.h" | |||
+#include "compat.h" | |||
#include <errno.h> | |||
-#include <error.h> | |||
#ifdef HAVE_FCNTL_H | |||
#include <fcntl.h> | |||
#endif |
@ -1,194 +0,0 @@ | |||
--- a/configure.ac | |||
+++ b/configure.ac | |||
@@ -42,7 +42,7 @@ DAV_CHECK_NEON | |||
# Checks for header files. | |||
AC_HEADER_DIRENT | |||
AC_HEADER_STDC | |||
-AC_CHECK_HEADERS([fcntl.h libintl.h langinfo.h limits.h locale.h mntent.h stddef.h stdint.h stdlib.h string.h sys/file.h sys/mount.h sys/time.h syslog.h termios.h unistd.h utime.h]) | |||
+AC_CHECK_HEADERS([error.h fcntl.h libintl.h langinfo.h limits.h locale.h mntent.h stddef.h stdint.h stdlib.h string.h sys/file.h sys/mount.h sys/time.h sys/select.h sys/types.h syslog.h termios.h unistd.h utime.h]) | |||
# Checks for typedefs, structures, and compiler characteristics. | |||
AC_C_CONST | |||
@@ -78,7 +78,7 @@ AC_FUNC_SELECT_ARGTYPES | |||
AC_FUNC_STRFTIME | |||
AC_FUNC_STAT | |||
AC_FUNC_UTIME_NULL | |||
-AC_CHECK_FUNCS([endpwent ftruncate getmntent memset mkdir nl_langinfo rpmatch select setlocale strcasecmp strchr strdup strerror strpbrk strrchr strstr strtol strtoull utime]) | |||
+AC_CHECK_FUNCS([endpwent ftruncate getmntent memset mkdir nl_langinfo rpmatch select setlocale strcasecmp strchr strdup strerror strpbrk strrchr strstr strtol strtoull utime canonicalize_file_name fopencookie]) | |||
# Misc. | |||
DAV_DEFAULTS | |||
--- a/src/cache.c | |||
+++ b/src/cache.c | |||
@@ -19,12 +19,12 @@ | |||
#include "config.h" | |||
+#include "compat.h" | |||
#ifdef HAVE_DIRENT_H | |||
#include <dirent.h> | |||
#endif | |||
#include <errno.h> | |||
-#include <error.h> | |||
#ifdef HAVE_FCNTL_H | |||
#include <fcntl.h> | |||
#endif | |||
--- /dev/null | |||
+++ b/src/compat.h | |||
@@ -0,0 +1,64 @@ | |||
+#ifndef _COMPAT_H | |||
+#define _COMPAT_H | |||
+ | |||
+#ifndef _PATH_MOUNTED | |||
+# define _PATH_MOUNTED "/proc/mounts" | |||
+#endif | |||
+ | |||
+#ifndef _PATH_MNTTAB | |||
+# define _PATH_MNTTAB "/etc/fstab" | |||
+#endif | |||
+ | |||
+#ifdef HAVE_ERROR_H | |||
+# include <error.h> | |||
+#else | |||
+# include <stdio.h> | |||
+# include <stdarg.h> | |||
+# include <stdlib.h> | |||
+# include <string.h> | |||
+static void error_at_line(int status, int errnum, const char *filename, | |||
+ unsigned int linenum, const char *format, ...) | |||
+{ | |||
+ va_list ap; | |||
+ | |||
+ fflush(stdout); | |||
+ | |||
+ if (filename != NULL) | |||
+ fprintf(stderr, "%s:%u: ", filename, linenum); | |||
+ | |||
+ va_start(ap, format); | |||
+ vfprintf(stderr, format, ap); | |||
+ va_end(ap); | |||
+ | |||
+ if (errnum != 0) | |||
+ fprintf(stderr, ": %s", strerror(errnum)); | |||
+ | |||
+ fprintf(stderr, "\n"); | |||
+ | |||
+ if (status != 0) | |||
+ exit(status); | |||
+} | |||
+ | |||
+#define error(status, errnum, format...) \ | |||
+ error_at_line(status, errnum, NULL, 0, format) | |||
+ | |||
+#endif /* HAVE_ERROR_H */ | |||
+ | |||
+#ifndef HAVE_CANONICALIZE_FILE_NAME | |||
+#include <limits.h> | |||
+#include <string.h> | |||
+#include <stdlib.h> | |||
+static char * canonicalize_file_name(const char *path) | |||
+{ | |||
+ char buf[PATH_MAX] = { }; | |||
+ | |||
+ snprintf(buf, sizeof(buf) - 1, "%s", path); | |||
+ | |||
+ if (!realpath(path, buf)) | |||
+ return NULL; | |||
+ | |||
+ return strdup(buf); | |||
+} | |||
+#endif | |||
+ | |||
+#endif /* _COMPAT_H */ | |||
--- a/src/dav_fuse.c | |||
+++ b/src/dav_fuse.c | |||
@@ -47,6 +47,9 @@ | |||
#ifdef HAVE_SYS_STAT_H | |||
#include <sys/stat.h> | |||
#endif | |||
+#ifdef HAVE_SYS_SELECT_H | |||
+#include <sys/select.h> | |||
+#endif | |||
#include "defaults.h" | |||
#include "mount_davfs.h" | |||
--- a/src/kernel_interface.c | |||
+++ b/src/kernel_interface.c | |||
@@ -19,8 +19,8 @@ | |||
#include "config.h" | |||
+#include "compat.h" | |||
-#include <error.h> | |||
#ifdef HAVE_FCNTL_H | |||
#include <fcntl.h> | |||
#endif | |||
@@ -51,6 +51,9 @@ | |||
#ifdef HAVE_SYS_STAT_H | |||
#include <sys/stat.h> | |||
#endif | |||
+#ifdef HAVE_SYS_TYPES_H | |||
+#include <sys/types.h> | |||
+#endif | |||
#include <sys/wait.h> | |||
#include "defaults.h" | |||
--- a/src/mount_davfs.c | |||
+++ b/src/mount_davfs.c | |||
@@ -19,10 +19,10 @@ | |||
#include "config.h" | |||
+#include "compat.h" | |||
#include <ctype.h> | |||
#include <errno.h> | |||
-#include <error.h> | |||
#ifdef HAVE_FCNTL_H | |||
#include <fcntl.h> | |||
#endif | |||
--- a/src/umount_davfs.c | |||
+++ b/src/umount_davfs.c | |||
@@ -19,8 +19,8 @@ | |||
#include "config.h" | |||
+#include "compat.h" | |||
-#include <error.h> | |||
#include <errno.h> | |||
#include <getopt.h> | |||
#ifdef HAVE_LIBINTL_H | |||
--- a/src/webdav.c | |||
+++ b/src/webdav.c | |||
@@ -19,9 +19,9 @@ | |||
#include "config.h" | |||
+#include "compat.h" | |||
#include <errno.h> | |||
-#include <error.h> | |||
#ifdef HAVE_FCNTL_H | |||
#include <fcntl.h> | |||
#endif | |||
@@ -368,6 +368,7 @@ dav_init_webdav(const dav_args *args) | |||
error(EXIT_FAILURE, errno, _("socket library initialization failed")); | |||
if (args->neon_debug & ~NE_DBG_HTTPPLAIN) { | |||
+#ifdef HAVE_FOPENCOOKIE | |||
char *buf = malloc(log_bufsize); | |||
cookie_io_functions_t *log_func = malloc(sizeof(cookie_io_functions_t)); | |||
if (!log_func) abort(); | |||
@@ -380,6 +381,9 @@ dav_init_webdav(const dav_args *args) | |||
error(EXIT_FAILURE, errno, | |||
_("can't open stream to log neon-messages")); | |||
ne_debug_init(log_stream, args->neon_debug); | |||
+#else | |||
+ error(EXIT_FAILURE, 0, "neon debugging unsupported"); | |||
+#endif | |||
} | |||
session = ne_session_create(args->scheme, args->host, args->port); |
@ -1,12 +0,0 @@ | |||
--- a/src/Makefile.am | |||
+++ b/src/Makefile.am | |||
@@ -32,8 +32,7 @@ mount_davfs_SOURCES = cache.c dav_coda.c \ | |||
kernel_interface.h mount_davfs.h webdav.h | |||
umount_davfs_SOURCES = umount_davfs.c defaults.h | |||
-AM_CFLAGS = -Wall -Werror=format-security \ | |||
- -fstack-protector-strong --param=ssp-buffer-size=4 | |||
+AM_CFLAGS = -Wall -Werror=format-security | |||
DEFS = -DPROGRAM_NAME=\"mount.davfs\" \ | |||
-DDAV_SYS_CONF_DIR=\"$(pkgsysconfdir)\" \ | |||
-DDAV_LOCALSTATE_DIR=\"$(dav_localstatedir)\" \ |
@ -1,38 +0,0 @@ | |||
--- a/src/webdav.c | |||
+++ b/src/webdav.c | |||
@@ -25,7 +25,7 @@ | |||
#ifdef HAVE_FCNTL_H | |||
#include <fcntl.h> | |||
#endif | |||
-#ifdef HAVE_ICONV_H | |||
+#ifdef HAVE_ICONV | |||
#include <iconv.h> | |||
#endif | |||
#ifdef HAVE_LANGINFO_H | |||
@@ -231,7 +231,7 @@ static int initialized; | |||
Needed by ssl_verify() which may be called at any time. */ | |||
static int have_terminal; | |||
-#ifdef HAVE_ICONV_H | |||
+#ifdef HAVE_ICONV | |||
/* Handle to convert character encoding from utf-8 to LC_CTYPE. | |||
If NULL no conversion is done. */ | |||
static iconv_t from_utf_8; | |||
@@ -264,7 +264,7 @@ static char **cookie_list; | |||
/* Private function prototypes and inline functions */ | |||
/*==================================================*/ | |||
-#ifdef HAVE_ICONV_H | |||
+#ifdef HAVE_ICONV | |||
static void | |||
convert(char **s, iconv_t conv); | |||
#endif | |||
@@ -337,7 +337,7 @@ dav_init_webdav(const dav_args *args) | |||
if (args->neon_debug & ~NE_DBG_HTTPPLAIN) | |||
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Initializing webdav"); | |||
-#ifdef HAVE_ICONV_H | |||
+#ifdef HAVE_ICONV | |||
char *lc_charset = nl_langinfo(CODESET); | |||
if (lc_charset && strcasecmp(lc_charset, "UTF-8") != 0) { | |||
from_utf_8 = iconv_open(lc_charset, "UTF-8"); |