@ -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"); |