This fixes "sshfs -o idmap=user".

The "if (o->off != ULONG_MAX)" logic is basically
"if (!FUSE_OPT_IS_OPT_KEY(o))" from above, so I stuck it into an else.

Ideas from Helg: https://marc.info/?l=openbsd-tech&m=142451814811631&w=2

Ray

Index: fuse_opt.c
===================================================================
RCS file: /home/cvs/src/lib/libfuse/fuse_opt.c,v
retrieving revision 1.15
diff -u -p -r1.15 fuse_opt.c
--- fuse_opt.c  19 Oct 2015 17:24:07 -0000      1.15
+++ fuse_opt.c  21 May 2016 12:53:57 -0000
@@ -247,13 +247,14 @@ parse_opt(const struct fuse_opt *o, cons
                                        ret = f(data, &val[idx], o->val, arg);
                                else
                                        ret = f(data, val, o->val, arg);
-                       }
-
-                       if (o->off != ULONG_MAX && data && o->val >= 0) {
-                               ret = f(data, val, o->val, arg);
-                               int *addr = (int *)(data + o->off);
-                               *addr = o->val;
-                               ret = 0;
+                       /* exact match, e.g. "idmap=user" (instead of 
"idmap=%s") */
+                       } else if (keyval && strcmp(val, o->templ) == 0) {
+                               if (data && o->val >= 0) {
+                                       ret = f(data, val, o->val, arg);
+                                       int *addr = (int *)(data + o->off);
+                                       *addr = o->val;
+                                       ret = 0;
+                               }
                        }
 
                        if (ret == -1)

Reply via email to