[Pkg-samba-maint] Bug#408033: smbfs: smbmount-unix-caps.patch no longer needed

dann frazier dannf at debian.org
Fri Jan 26 16:45:38 CET 2007


On Fri, Jan 26, 2007 at 02:52:06AM -0800, Steve Langasek wrote:
> On Mon, Jan 22, 2007 at 06:42:30PM -0700, dann frazier wrote:
> > This patch was added to workaround #310982 right around the release of sarge.
> > However, this patch never ended up in sarge. Since then, this bug has been
> > fixed in the upstream 2.4 and 2.6 kernels and this fix exists in the latest
> > sarge, etch and sid kernels.
> 
> Sorry, can you give the exact versions of the kernel packages that fixed
> this for Debian?  Did the fix in question trickle in via upstream in the
> case of etch/sid?

Yes, upstream 2.6.10 (and 2.4.34)

sarge got it in the last round of security updates 2.4.27-10sarge5,
2.6.8-16sarge6

> > Note that the kernel change makes some corner use cases impossible without
> > some additional userspace changes to samba. Upstream has agreed to accept
> > these patches[1], but I don't know if they've been committed yet.
> 
> Even if it's still a case that all server-side perms are ignored, dropping
> this patch is still an improvement for users wanting symlink support,
> apparently.  So I agree with dropping it, as long as we're sure the kernel
> changes are in place.

Cool. What's the samba team's opinion of the userspace patches going into
etch/sarge? Here's a port of the patch that applies to both etch and
sarge:

--- samba-3.0.23d.orig/source/client/smbmnt.c
+++ samba-3.0.23d/source/client/smbmnt.c
@@ -48,6 +48,10 @@
 static unsigned mount_dmask;
 static int user_mount;
 static char *options;
+static int opt_uid = 0;
+static int opt_gid = 0; 
+static int opt_fmode = 0;
+static int opt_dmode = 0; 
 
 static void
 help(void)
@@ -80,11 +84,13 @@
                 case 'u':
 			if (!user_mount) {
 				mount_uid = strtol(optarg, NULL, 0);
+				opt_uid++;
 			}
                         break;
                 case 'g':
 			if (!user_mount) {
 				mount_gid = strtol(optarg, NULL, 0);
+				opt_gid++;
 			}
                         break;
                 case 'r':
@@ -92,9 +98,11 @@
                         break;
                 case 'f':
                         mount_fmask = strtol(optarg, NULL, 8);
+			opt_fmode++;
                         break;
                 case 'd':
                         mount_dmask = strtol(optarg, NULL, 8);
+			opt_dmode++;
                         break;
 		case 'o':
 			options = optarg;
@@ -177,9 +185,17 @@
 		data2 = (char *) data;
 	}
 
-	slprintf(opts, sizeof(opts)-1,
-		 "version=7,uid=%d,gid=%d,file_mode=0%o,dir_mode=0%o,%s",
-		 mount_uid, mount_gid, data->file_mode, data->dir_mode,options);
+	slprintf(opts, sizeof(opts)-1, "version=7,");
+	if (opt_uid) 
+		slprintf(opts+strlen(opts), sizeof(opts)-strlen(opts)-1, "uid=%d,", mount_uid);
+	if (opt_gid) 
+		slprintf(opts+strlen(opts), sizeof(opts)-strlen(opts)-1, "gid=%d,", mount_gid);
+	if (opt_fmode) 
+		slprintf(opts+strlen(opts), sizeof(opts)-strlen(opts)-1, "file_mode=%d,", data->file_mode);
+	if (opt_dmode) 
+		slprintf(opts+strlen(opts), sizeof(opts)-strlen(opts)-1, "dir_mode=%d,", data->dir_mode);
+	slprintf(opts+strlen(opts), sizeof(opts)-strlen(opts)-1, "%s",options);
+
 	if (mount(share_name, ".", "smbfs", flags, data1) == 0)
 		return 0;
 	return mount(share_name, ".", "smbfs", flags, data2);
@@ -320,4 +336,6 @@
         }
 
 	return 0;
-}	
+}
+
+
--- samba-3.0.23d.orig/source/client/smbmount.c
+++ samba-3.0.23d/source/client/smbmount.c
@@ -41,6 +41,10 @@
 static int smb_port = 0;
 static BOOL got_user;
 static BOOL got_pass;
+static BOOL use_uid = 0;
+static BOOL use_gid = 0;
+static BOOL use_fmask = 0;
+static BOOL use_dmask = 0;
 static uid_t mount_uid;
 static gid_t mount_gid;
 static int mount_ro;
@@ -471,22 +475,22 @@
 	if (mount_ro) {
 		args[i++] = "-r";
 	}
-	if (mount_uid) {
+	if (use_uid) {
 		slprintf(tmp, sizeof(tmp)-1, "%d", mount_uid);
 		args[i++] = "-u";
 		args[i++] = smb_xstrdup(tmp);
 	}
-	if (mount_gid) {
+	if (use_gid) {
 		slprintf(tmp, sizeof(tmp)-1, "%d", mount_gid);
 		args[i++] = "-g";
 		args[i++] = smb_xstrdup(tmp);
 	}
-	if (mount_fmask) {
+	if (use_fmask) {
 		slprintf(tmp, sizeof(tmp)-1, "0%o", mount_fmask);
 		args[i++] = "-f";
 		args[i++] = smb_xstrdup(tmp);
 	}
-	if (mount_dmask) {
+	if (use_dmask) {
 		slprintf(tmp, sizeof(tmp)-1, "0%o", mount_dmask);
 		args[i++] = "-d";
 		args[i++] = smb_xstrdup(tmp);
@@ -784,14 +788,18 @@
 				pstrcpy(my_netbios_name,opteq+1);
 			} else if(!strcmp(opts, "uid")) {
 				mount_uid = nametouid(opteq+1);
+				use_uid++;
 			} else if(!strcmp(opts, "gid")) {
 				mount_gid = nametogid(opteq+1);
+				use_gid++;
 			} else if(!strcmp(opts, "port")) {
 				smb_port = val;
 			} else if(!strcmp(opts, "fmask")) {
 				mount_fmask = strtol(opteq+1, NULL, 8);
+				use_fmask++;
 			} else if(!strcmp(opts, "dmask")) {
 				mount_dmask = strtol(opteq+1, NULL, 8);
+				use_dmask++;
 			} else if(!strcmp(opts, "debug")) {
 				DEBUGLEVEL = val;
 			} else if(!strcmp(opts, "ip")) {



-- 
dann frazier | HP Open Source and Linux Organization




More information about the Pkg-samba-maint mailing list