diff -ru davfs2-1.4.7-orig/src/cache.c davfs2-1.4.7/src/cache.c
--- davfs2-1.4.7-orig/src/cache.c	2012-07-19 12:26:00.000000000 +0100
+++ davfs2-1.4.7/src/cache.c	2013-02-22 19:15:24.139031494 +0000
@@ -2819,8 +2819,9 @@
         error(EXIT_FAILURE, 0, _("wrong owner of cache directory %s"),
               cache_dir);
     if ((DAV_A_MASK & st.st_mode) != S_IRWXU)
-        error(EXIT_FAILURE, 0,
-              _("wrong permissions set for cache directory %s"), cache_dir);
+        if (chmod(cache_dir, S_IRWXU))
+            error(EXIT_FAILURE, 0,
+                _("wrong permissions set for cache directory %s"), cache_dir);
 }
 
 
diff -ru davfs2-1.4.7-orig/src/mount_davfs.c davfs2-1.4.7/src/mount_davfs.c
--- davfs2-1.4.7-orig/src/mount_davfs.c	2012-07-19 12:35:11.000000000 +0100
+++ davfs2-1.4.7/src/mount_davfs.c	2013-02-23 00:00:00.729911928 +0000
@@ -29,7 +29,9 @@
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
 #endif
+#ifndef __UCLIBC__
 #include <fstab.h>
+#endif
 #include <getopt.h>
 #include <grp.h>
 #ifdef HAVE_LIBINTL_H
@@ -221,6 +223,71 @@
 static char *
 user_input(const char *prompt);
 
+#ifndef HAVE_ARGZ_H
+/* argz_create/stringify from gnulib */ 
+/* Functions for dealing with '\0' separated arg vectors.
+   Copyright (C) 1995-1998, 2000-2002, 2006, 2008 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License along
+   with this program; if not, write to the Free Software Foundation,
+   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+/* Make a '\0' separated arg vector from a unix argv vector, returning it in
+   ARGZ, and the total length in LEN.  If a memory allocation error occurs,
+   ENOMEM is returned, otherwise 0.  */
+error_t
+argz_create (char *const argv[], char **argz, size_t *len)
+{
+    int argc;
+    size_t tlen = 0;
+    char *const *ap;
+    char *p;
+
+    for (argc = 0; argv[argc] != NULL; ++argc)
+        tlen += strlen (argv[argc]) + 1;
+
+    if (tlen == 0)
+        *argz = NULL;
+    else {
+        *argz = malloc (tlen);
+        if (*argz == NULL)
+            return ENOMEM;
+
+        for (p = *argz, ap = argv; *ap; ++ap, ++p)
+            p = stpcpy (p, *ap);
+    }
+    *len = tlen;
+
+    return 0;
+}
+
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
+   except the last into the character SEP.  */
+void
+argz_stringify (char *argz, size_t len, int sep)
+{
+    if (len > 0)
+    while (1) {
+        size_t part_len = strnlen (argz, len);
+        argz += part_len;
+        len -= part_len;
+        if (len-- <= 1)    /* includes final '\0' we want to stop at */
+            break;
+        *argz++ = sep;
+    }
+}
+#endif
 
 /* Public functions */
 /*==================*/
@@ -530,7 +597,7 @@
             char *file_name = ne_concat(path, "/", DAV_CONFIG, NULL);
             if (access(file_name, F_OK) != 0) {
                 char *template = ne_concat(DAV_DATA_DIR, "/", DAV_CONFIG, NULL);
-                char *command = ne_concat("cp ", template, " ", file_name,
+                char *command = ne_concat("cp '", template, "' '", file_name, "'",
                                           NULL);
                 if (system(command) != 0);
                 free(command);
@@ -542,7 +609,7 @@
             if (access(file_name, F_OK) != 0) {
                 char *template = ne_concat(DAV_DATA_DIR, "/", DAV_SECRETS,
                                            NULL);
-                char *command = ne_concat("cp ", template, " ", file_name,
+                char *command = ne_concat("cp '", template, "' '", file_name, "'",
                                           NULL);
                 if (system(command) == 0)
                     chmod(file_name, S_IRUSR | S_IWUSR);
@@ -666,6 +733,23 @@
     return pidf;
 }
 
+static struct mntent*
+get_fstab_mountpoint(FILE *fp)
+{
+    struct mntent *ft = NULL;
+    char *mp = NULL;
+    if (asprintf(&mp, "%s/", mpoint) < 0)
+        abort();
+    
+    while ((ft = getmntent(fp)) != NULL) {
+        if (strcmp(ft->mnt_dir, mpoint) == 0 || strcmp(ft->mnt_dir, mp) == 0) {
+            free(mp);
+            return ft;
+        }
+    }
+    free(mp);
+    return NULL;
+}
 
 /* Checks fstab whether there is an entry for the mountpoint specified in args
    and compares the values in args with the values in fstab.
@@ -676,31 +760,22 @@
 {
     dav_args *n_args = new_args();
     n_args->mopts = DAV_USER_MOPTS;
-    setfsent();
-    struct fstab *ft = getfsfile(mpoint);
- 
-    if (!ft) {
-        char *mp = NULL;
-        if (asprintf(&mp, "%s/", mpoint) < 0) abort();
-        ft = getfsfile(mp);
-        if (mp) free(mp);
-    }
+    FILE *fp = setmntent(_PATH_FSTAB, "r");
+    struct mntent *ft = get_fstab_mountpoint(fp);
+    if (!ft || ft->mnt_fsname == NULL)
+        error(EXIT_FAILURE, 0, _("no entry for %s found in %s"), url, _PATH_FSTAB);
 
-   if (!ft || !ft->fs_spec)
-        error(EXIT_FAILURE, 0, _("no entry for %s found in %s"), url,
-              _PATH_FSTAB);
-
-    if (strcmp(url, ft->fs_spec) != 0) {
-        char *fstab_url = decode_octal(ft->fs_spec);
+    if (strcmp(url, ft->mnt_fsname) != 0) {
+        char *fstab_url = decode_octal(ft->mnt_fsname);
         if (strcmp(url, fstab_url) != 0)
             error(EXIT_FAILURE, 0, _("different URL in %s"), _PATH_FSTAB);
         free(fstab_url);
     }
 
-    if (ft->fs_mntops)
-        get_options(n_args, ft->fs_mntops);
+    if (ft->mnt_opts)
+        get_options(n_args, ft->mnt_opts);
 
-    if (! ft->fs_vfstype || strcmp(DAV_FS_TYPE, ft->fs_vfstype) != 0)
+    if (! ft->mnt_type || strcmp(DAV_FS_TYPE, ft->mnt_type) != 0)
         error(EXIT_FAILURE, 0, _("different file system type in %s"),
               _PATH_FSTAB);
     if (args->conf || n_args->conf) {
@@ -718,6 +793,11 @@
         error(EXIT_FAILURE, 0,
               _("neither option `user' nor option `users' set in %s"),
               _PATH_FSTAB);
+
+/* busybox "mount" don't pass option user/users
+   (neither any other recognized options)
+   to mount helpers, so disable this check
+
     if (args->user != n_args->user)
         error(EXIT_FAILURE, 0, _("different option `user' in %s"), _PATH_FSTAB);
     if (args->users != n_args->users)
@@ -726,6 +806,7 @@
     if (args->mopts != n_args->mopts)
         error(EXIT_FAILURE, 0, _("different mount options in %s"),
               _PATH_FSTAB);
+*/
     if (args->uid != n_args->uid)
         error(EXIT_FAILURE, 0, _("different uid in %s"), _PATH_FSTAB);
     if (args->gid != n_args->gid)
@@ -735,7 +816,7 @@
     if (args->file_mode != n_args->file_mode)
         error(EXIT_FAILURE, 0, _("different file_mode in %s"), _PATH_FSTAB);
 
-    endfsent();
+    fclose(fp);
     delete_args(n_args);
 }
 
@@ -758,7 +839,12 @@
     struct passwd *pw;
 
     if (*mpoint != '/') {
-        char *mp = canonicalize_file_name(mpoint);
+#ifdef __UCLIBC__
+        char *mp = realpath(mpoint, NULL);
+#else
+        char *mp = canonicalize_file_name(mpoint, NULL);
+#endif
+        
         if (!mp)
             error(EXIT_FAILURE, 0,
                   _("can't evaluate path of mount point %s"), mpoint);
diff -ru davfs2-1.4.7-orig/src/mount_davfs.h davfs2-1.4.7/src/mount_davfs.h
--- davfs2-1.4.7-orig/src/mount_davfs.h	2012-07-19 11:33:47.000000000 +0100
+++ davfs2-1.4.7/src/mount_davfs.h	2013-02-22 19:15:24.139031494 +0000
@@ -21,6 +21,9 @@
 #ifndef DAV_MOUNT_DAVFS_H
 #define DAV_MOUNT_DAVFS_H
 
+#ifndef _PATH_FSTAB
+#define _PATH_FSTAB "/etc/fstab"
+#endif /* _PATH_FSTAB */
 
 /* Data Types */
 /*============*/
diff -ru davfs2-1.4.7-orig/src/umount_davfs.c davfs2-1.4.7/src/umount_davfs.c
--- davfs2-1.4.7-orig/src/umount_davfs.c	2012-07-19 12:32:12.000000000 +0100
+++ davfs2-1.4.7/src/umount_davfs.c	2013-02-22 19:15:24.140031474 +0000
@@ -119,8 +119,12 @@
         error(EXIT_FAILURE, 0, _("missing argument"));
     if (optind < (argc - 1))
         error(EXIT_FAILURE, 0, _("too many arguments"));
-
+#ifdef __UCLIBC__
+    char *mpoint = realpath(argv[optind], NULL);
+#else
     char *mpoint = canonicalize_file_name(argv[optind]);
+#endif
+    
     if (!mpoint)
         mpoint = argv[optind];
     if (!mpoint || *mpoint != '/')
diff -ru davfs2-1.4.7-orig/src/webdav.c davfs2-1.4.7/src/webdav.c
--- davfs2-1.4.7-orig/src/webdav.c	2012-07-19 12:27:51.000000000 +0100
+++ davfs2-1.4.7/src/webdav.c	2013-02-23 00:05:16.323500045 +0000
@@ -1957,20 +1957,17 @@
         printf("\n");
         printf(_("  fingerprint: %s"), digest);
         printf("\n");
-            printf(_("You only should accept this certificate, if you can\n"
-                     "verify the fingerprint! The server might be faked\n"
-                     "or there might be a man-in-the-middle-attack.\n"));
-            printf(_("Accept certificate for this session? [y,N] "));
-            char *s = NULL;
-            size_t n = 0;
-            ssize_t len = 0;
-            len = getline(&s, &n, stdin);
-            if (len < 0)
-                abort();
-            if (rpmatch(s) > 0)
-                ret = 0;
-            free(s);
-    } 
+        printf(_("You only should accept this certificate, if you can\n"
+                 "verify the fingerprint! The server might be faked\n"
+                 "or there might be a man-in-the-middle-attack.\n"));
+        printf(_("Accept certificate for this session? [y,N] "));
+        char yesno[3];
+        fflush(stdout);
+        if (fgets(yesno, sizeof(yesno), stdin) == NULL) 
+            abort();
+        if (yesno[0] == 'y' || yesno[0] == 'Y') 
+            ret = 0;
+    }
 
     if (failures & NE_SSL_NOTYETVALID)
         syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_ERR),

