On Tue, Mar 11, 2025 at 09:00:10PM +0100, Hiltjo Posthuma wrote:
> On Thu, Mar 06, 2025 at 07:01:44PM +0000, Stuart Henderson wrote:
> > On 2025/03/06 18:45, Hiltjo Posthuma wrote:
> > > In the following commit the sysctl kern.usermount=1 was removed:
> > >   
> > > https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/sys/kern/kern_sysctl.c?rev=1.306&content-type=text/x-cvsweb-markup
> > > 
> > > What is the alternative to run FUSE safely as non-root now?  It seems 
> > > ports
> > > like sshfs, curlftps etc cannot run as a user now?
> > 
> > There isn't one. (And fuse is a bit of a dead-end on OpenBSD anyway, we
> > have always been a bit incompatible anyway, and the fuse 3 compatible
> > code that was written never made it into the tree).
> > 
> > > Feel free to use the above changes into usmb if you want.
> > 
> > a set of "I changed this and this and this" instructions isn't
> > particularly helpful for getting something into a port..
> 
> Yes, sorry, below is a patch that changes the following:
> 
> * Change the block size from the 512 bytes default to 32768 for files (struct
>   stat.st_blksize).
> * Remove max_read FUSE limit option.
> * Remove the maximum 32768 bytes per write limitation (the smbclient code
>   handles this just fine).
> 
> Thank you,
> 
> 
> diff --git a/sysutils/usmb/Makefile b/sysutils/usmb/Makefile
> index f10c062979a..3f7fcc47264 100644
> --- a/sysutils/usmb/Makefile
> +++ b/sysutils/usmb/Makefile
> @@ -1,7 +1,7 @@
>  COMMENT=     mount SMB shares from userland via FUSE
>  
>  DISTNAME=    usmb-20130204
> -REVISION=    7
> +REVISION=    8
>  
>  CATEGORIES=  sysutils
>  
> diff --git a/sysutils/usmb/patches/patch-options_c 
> b/sysutils/usmb/patches/patch-options_c
> new file mode 100644
> index 00000000000..e293d27457b
> --- /dev/null
> +++ b/sysutils/usmb/patches/patch-options_c
> @@ -0,0 +1,21 @@
> +Index: options.c
> +--- options.c.orig
> ++++ options.c
> +@@ -149,7 +149,6 @@
> +   static char MINUS_D[] = "-d";
> +   static char MINUS_F[] = "-f";
> +   static char MINUS_O[] = "-o";
> +-  static char MAX_READ[] = "max_read=32768";
> + 
> +   assert (NULL != mountpoint);
> +   static char *argv[MAXARGS];
> +@@ -167,9 +166,6 @@
> +   if (nofork)
> + #endif
> +     argv[argc++] = MINUS_F;
> +-
> +-  argv[argc++] = MINUS_O;
> +-  argv[argc++] = MAX_READ;
> + 
> +   if ((NULL != options) && ('\0' != options[0]))
> +   {
> diff --git a/sysutils/usmb/patches/patch-usmb_file_c 
> b/sysutils/usmb/patches/patch-usmb_file_c
> index 8e16874813c..714eaf71cbf 100644
> --- a/sysutils/usmb/patches/patch-usmb_file_c
> +++ b/sysutils/usmb/patches/patch-usmb_file_c
> @@ -1,10 +1,75 @@
>  Index: usmb_file.c
>  --- usmb_file.c.orig
>  +++ usmb_file.c
> -@@ -202,6 +202,30 @@ int usmb_write (const char *filename UNUSED, const cha
> +@@ -60,7 +60,18 @@
> +   return (NULL == dirent);
>   }
>   
> ++static bool change_blksiz(struct stat *st)
> ++{
> ++  if (st == NULL)
> ++    return false;
> + 
> ++  if (S_ISREG(st->st_mode)) {
> ++    st->st_blksize = 32768;
> ++    return true;
> ++  }
> ++  return false;
> ++}
> ++
> + int usmb_getattr (const char *filename, struct stat *st)
> + {
> +   char *url = make_url (filename);
> +@@ -74,6 +85,8 @@
> +   if ((0 > ret) || !fix_nlink (url, st))
> +     ret = -errno;
> + 
> ++  change_blksiz(st);
> ++
> +   free (url);
> +   return ret;
> + }
> +@@ -101,6 +114,8 @@
> +       return -errno;
> +   }
> + 
> ++  change_blksiz(st);
> ++
> +   return 0;
> + }
> + 
> +@@ -147,8 +162,6 @@
> + int usmb_read (const char *filename UNUSED, char *buff, size_t len, off_t 
> off,
> +                struct fuse_file_info *fi)
> + {
> +-  assert (32768 >= len);
> +-
> +   SMBCFILE *file = fd_to_smbcfile (fi->fh);
> +   DEBUG (fprintf (stderr, "read (%p, %p, %llu, %lld) ",
> +                   (void *)file, buff, (unsigned long long)len, (long 
> long)off));
> +@@ -178,14 +191,11 @@
> +   size_t written = 0;
> +   int bytes = 0;
> + 
> +-  // No idea whether Windows servers don't like > 32768 byte writes
> +-  // (cf. usmb_read), but taking no chances...
> +-
> +   const smbc_write_fn write_fn = smbc_getFunctionWrite (ctx);
> + 
> +   while (written < len)
> +   {
> +-    bytes = write_fn (ctx, file, (char *)buff, (len > 32768) ? 32768 : len);
> ++    bytes = write_fn (ctx, file, (char *)buff, len);
> +     if (0 > bytes)
> +       break;
> + 
> +@@ -199,6 +209,30 @@
>   
> +   DEBUG (fprintf (stderr, "= %d\n", (0 > bytes) ? -errno : (int)written));
> +   return (0 > bytes) ? -errno : (int)written;
> ++}
> ++
> ++
>  +/* File systems must support mknod on OpenBSD */
>  +int usmb_mknod (const char *filename, mode_t mode, __attribute__((unused)) 
> dev_t dev)
>  +{
> @@ -26,9 +91,4 @@ Index: usmb_file.c
>  +    smbc_getFunctionClose (ctx) (ctx, file);
>  +  free (url);
>  +  return ret;
> -+}
> -+
> -+
> - int usmb_create (const char *filename, mode_t mode, struct fuse_file_info 
> *fi)
> - {
> -   char *url = make_url (filename);
> + }
> 

Bump!

Can someone update this or give thoughts if theres anything wrong with the
latest patch?

Thank you,

-- 
Kind regards,
Hiltjo

Reply via email to