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

Steve Langasek vorlon at debian.org
Fri Feb 2 08:34:13 CET 2007


On Fri, Jan 26, 2007 at 08:45:38AM -0700, dann frazier wrote:
> > > 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:

The patch looks reasonable to me.  Has it been tested?

-- 
Steve Langasek                   Give me a lever long enough and a Free OS
Debian Developer                   to set it on, and I can move the world.
vorlon at debian.org                                   http://www.debian.org/

> --- 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")) {




More information about the Pkg-samba-maint mailing list