Package: davfs2
Version: 1.4.6-1ubuntu2
Severity: important
Tags: squeeze sid upstream lenny patch

If the sysadmin set system wide options in /etc/davfs2/davfs2.conf and she
allows for unprivileged users to mount WebDAV resources then they will
experience inconsistent results.

Example:

sysadmin@host:~$ echo "davfs2 davfs2/suid_file boolean true" | sudo debconf-
set-selections --
sysadmin@host:~$ sudo dpkg-reconfigure davfs2
sysadmin@host:~$ sudo sh -c 'echo "http://webdav.cyberteams.com:8080/ /mnt
davfs noauto,user 0 0" > /etc/fstab'

user@host:~$ mount /mnt
Please enter the username to authenticate with server
http://webdav.cyberteams.com:8080 or hit enter for none.
  Username: guest
Please enter the password to authenticate user guest with server
http://webdav.cyberteams.com:8080 or hit enter for none.
  Password: guest
user@host:~$ ls /mnt
aaa
[snip]
user@host:~$ umount /mnt
/sbin/umount.davfs: waiting while mount.davfs (pid 13147) synchronizes the
cache .
user@host:~$ mount /mnt
/sbin/mount.davfs:/home/user/.davfs2/davfs2.conf:24: unknown option
user@host:~$ ls /mnt
user@host:~$

This happens because /etc/davfs2/davfs2.conf is copied to ~/.davfs/ if
~/.davfs2 doesn't exist when mount.davfs2 is called.
Due to #620163 Debian needs to include a system option in
/etc/davfs2/davfs2.conf

Fix: Warn instead of exiting when system options are in the users configuration
and vice-versa



-- System Information:
Debian Release: squeeze/sid
  APT prefers maverick-updates
  APT policy: (500, 'maverick-updates'), (500, 'maverick-security'),
(500, 'maverick-proposed'), (500, 'maverick-backports'), (500,
'maverick')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.35-28-generic (SMP w/2 CPU cores)
Locale: LANG=en_US.utf8, LC_CTYPE=en_US.utf8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages davfs2 depends on:
ii  adduser               3.112ubuntu1       add and remove users and groups
ii  debconf [debconf-2.0] 1.5.32ubuntu3      Debian configuration management sy
ii  libc6                 2.12.1-0ubuntu10.3 Embedded GNU C Library: Shared lib
ii  libneon27-gnutls      0.29.3-2           An HTTP and WebDAV client library

davfs2 recommends no packages.

davfs2 suggests no packages.

-- Configuration Files:
/etc/davfs2/secrets [Errno 13] Permission denied: u'/etc/davfs2/secrets'

-- debconf information:
  davfs2/user_name: davfs2
* davfs2/suid_file: true
  davfs2/group_name: davfs2
  davfs2/new_group: true
  davfs2/non_root_users_confimed:
  davfs2/new_user: true
--- src/mount_davfs.c   2010-05-09 02:20:30 +0000                                                                                                           
+++ src/mount_davfs.c	2011-03-31 20:31:46 +0000
@@ -2174,18 +2174,33 @@
 
         } else if (applies && count == 2) {
 
-            if (system && strcmp(parmv[0], "dav_user") == 0) {
-                if (args->dav_user)
-                    free(args->dav_user);
-                args->dav_user = ne_strdup(parmv[1]); 
-            } else if (system && strcmp(parmv[0], "dav_group") == 0) {
-                if (args->dav_group)
-                    free(args->dav_group);
-                args->dav_group = ne_strdup(parmv[1]); 
-            } else if (system && strcmp(parmv[0], "ignore_home") == 0) {
-                if (args->ignore_home)
-                    free(args->ignore_home);
-                args->ignore_home = ne_strdup(parmv[1]); 
+            if (strcmp(parmv[0], "dav_user") == 0) {
+		if (system) {
+	                if (args->dav_user)
+        	            free(args->dav_user);
+	                args->dav_user = ne_strdup(parmv[1]);
+		} else {
+			error_at_line(0, 0, filename, lineno,
+                              _("system option in user configuration file"));
+		}		
+            } else if (strcmp(parmv[0], "dav_group") == 0) {
+		if (system) {
+	                if (args->dav_group)
+        	            free(args->dav_group);
+	                args->dav_group = ne_strdup(parmv[1]);
+		} else {
+			error_at_line(0, 0, filename, lineno,
+                              _("system option in user configuration file"));
+		}
+            } else if (strcmp(parmv[0], "ignore_home") == 0) {
+		if (system) {
+	                if (args->ignore_home)
+	                    free(args->ignore_home);
+			args->ignore_home = ne_strdup(parmv[1]); 
+		} else {
+			error_at_line(0, 0, filename, lineno,
+                              _("system option in user configuration file"));
+		}
             } else if (strcmp(parmv[0], "kernel_fs") == 0) {
                 if (args->kernel_fs)
                     free(args->kernel_fs);
@@ -2196,21 +2211,36 @@
                 if (args->servercert)
                     free(args->servercert);
                 args->servercert = ne_strdup(parmv[1]);
-            } else if (!system && strcmp(parmv[0], "secrets") == 0) {
-                if (args->secrets)
-                    free(args->secrets);
-                args->secrets = ne_strdup(parmv[1]); 
+            } else if (strcmp(parmv[0], "secrets") == 0) {
+		if (system) {
+			error_at_line(0, 0, filename, lineno,
+                              _("user option in system configuration file"));
+		} else {
+        	        if (args->secrets)
+        	            free(args->secrets);
+	                args->secrets = ne_strdup(parmv[1]); 
+		}
             } else if (strcmp(parmv[0], "clientcert") == 0) {
                 if (args->clicert)
                     free(args->clicert);
                 args->clicert = ne_strdup(parmv[1]);
-            } else if (system && strcmp(parmv[0], "proxy") == 0) {
-                if (split_uri(NULL, &args->p_host, &args->p_port, NULL,
-                              parmv[1]) != 0)
-                    error_at_line(EXIT_FAILURE, 0, filename, lineno,
-                                  _("malformed line"));
-            } else if (system && strcmp(parmv[0], "use_proxy") == 0) {
-                args->useproxy = arg_to_int(parmv[1], 10, parmv[0]);
+            } else if (strcmp(parmv[0], "proxy") == 0) {
+		if (system) {
+                	if (split_uri(NULL, &args->p_host, &args->p_port, NULL,
+	                              parmv[1]) != 0)
+	                    error_at_line(EXIT_FAILURE, 0, filename, lineno,
+        	                          _("malformed line"));
+		} else {
+			error_at_line(0, 0, filename, lineno,
+                              _("system option in user configuration file"));
+		}
+            } else if (strcmp(parmv[0], "use_proxy") == 0) {
+		if (system) {
+                	args->useproxy = arg_to_int(parmv[1], 10, parmv[0]);
+		} else {
+			error_at_line(0, 0, filename, lineno,
+                              _("system option in non-system config"));
+		}
             } else if (strcmp(parmv[0], "ask_auth") == 0) {
                 args->askauth = arg_to_int(parmv[1], 10, parmv[0]);
             } else if (strcmp(parmv[0], "use_locks") == 0) {
@@ -2249,14 +2279,24 @@
                 if (args->s_charset)
                     free(args->s_charset);
                 args->s_charset = ne_strdup(parmv[1]);
-            } else if (system && strcmp(parmv[0], "cache_dir") == 0) {
-                if (args->sys_cache)
-                    free(args->sys_cache);
-                args->sys_cache = ne_strdup(parmv[1]); 
-            } else if (!system && strcmp(parmv[0], "cache_dir") == 0) {
-                if (args->cache_dir != NULL)
-                    free(args->cache_dir);
-                args->cache_dir = ne_strdup(parmv[1]); 
+            } else if (strcmp(parmv[0], "cache_dir") == 0) {
+		if (system) {
+                	if (args->sys_cache)
+	                    free(args->sys_cache);
+	                args->sys_cache = ne_strdup(parmv[1]); 
+		} else {
+			error_at_line(0, 0, filename, lineno,
+                              _("system option in user configuration file"));
+		}
+            } else if (strcmp(parmv[0], "cache_dir") == 0) {
+		if (system) {
+	                if (args->cache_dir != NULL)
+	                    free(args->cache_dir);
+	                args->cache_dir = ne_strdup(parmv[1]); 
+		} else {
+			error_at_line(0, 0, filename, lineno,
+                              _("user option in system configuration file"));
+		}
             } else if (strcmp(parmv[0], "backup_dir") == 0) {
                 if (args->backup_dir)
                     free(args->backup_dir);

Reply via email to