[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