[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: libacl.so.1 => not found dead, long live unimplemented getxattr



On Wed, 2 Sep 2003, Greg Steuck wrote:

> But I guess this is to be expected given that getxattr call is not
> implemented. I should try my hand in stubbing getxattr with something
> that returns ENOATTR, per Linux getxattr(2):
> 
>  If  the named attribute does not exist, or the process has no access to
>  this attribute, errno is set to ENOATTR.

riddle me this, batman:  what's ENOATTR?  it's not defined in 2.5.59, 
which i have handy, but looks like they just use -EOPNOSUPP.  it's too 
early for redhat to be shipping 2.6, if it's even there.  man page reading 
the future perhaps?

preliminary attempt.  we can probably map most of these calls to the 
EXTATTR stuff, but that's disabled by default.


Index: linux_dummy.c
===================================================================
RCS file: /cvs/src/sys/compat/linux/linux_dummy.c,v
retrieving revision 1.13
diff -u -r1.13 linux_dummy.c
--- linux_dummy.c	2003/09/01 14:00:23	1.13
+++ linux_dummy.c	2003/09/03 07:20:35
@@ -117,3 +117,25 @@
 DUMMY(mincore);			/* #218 */
 DUMMY(madvise);			/* #219 */
 DUMMY(fadvise64);		/* #250 */
+
+#define DUMMY_XATTR(s)							\
+int									\
+linux_sys_ ## s ## xattr(p, v, retval)						\
+	struct proc *p;							\
+	void *v;							\
+	register_t *retval;						\
+{									\
+	return (ENOATTR);						\
+}									
+DUMMY_XATTR(set);
+DUMMY_XATTR(lset);
+DUMMY_XATTR(fset);
+DUMMY_XATTR(get);
+DUMMY_XATTR(lget);
+DUMMY_XATTR(fget);
+DUMMY_XATTR(list);
+DUMMY_XATTR(llist);
+DUMMY_XATTR(flist);
+DUMMY_XATTR(remove);
+DUMMY_XATTR(lremove);
+DUMMY_XATTR(fremove);
Index: linux_error.c
===================================================================
RCS file: /cvs/src/sys/compat/linux/linux_error.c,v
retrieving revision 1.2
diff -u -r1.2 linux_error.c
--- linux_error.c	1996/04/17 05:23:45	1.2
+++ linux_error.c	2003/09/03 07:20:35
@@ -117,7 +117,8 @@
 	-LINUX_ENOSYS,		/* not mapped (EFTYPE) */
 	-LINUX_ENOSYS,		/* not mapped (EAUTH) */
 	-LINUX_ENOSYS,		/* not mapped (ENEEDAUTH) */
-	-LINUX_ENOSYS,		/* not mapped (ELAST) */
+	-LINUX_ENOSYS,		/* not mapped (EIPSEC) */
+	-LINUX_EOPNOTSUPP,	/* what is ENOATTR? */
 
 	/*
 	 * The rest of the list consists of errors that only
Index: linux_syscall.h
===================================================================
RCS file: /cvs/src/sys/compat/linux/linux_syscall.h,v
retrieving revision 1.45
diff -u -r1.45 linux_syscall.h
--- linux_syscall.h	2003/09/01 14:01:10	1.45
+++ linux_syscall.h	2003/09/03 07:20:35
@@ -1,4 +1,4 @@
-/*	$OpenBSD: linux_syscall.h,v 1.45 2003/09/01 14:01:10 fgsch Exp $	*/
+/*	$OpenBSD$	*/
 
 /*
  * System call numbers.
@@ -681,6 +681,42 @@
 
 /* syscall: "fcntl64" ret: "int" args: "u_int" "u_int" "void *" */
 #define	LINUX_SYS_fcntl64	221
+
+/* syscall: "setxattr" ret: "int" args: */
+#define	LINUX_SYS_setxattr	226
+
+/* syscall: "lsetxattr" ret: "int" args: */
+#define	LINUX_SYS_lsetxattr	227
+
+/* syscall: "fsetxattr" ret: "int" args: */
+#define	LINUX_SYS_fsetxattr	228
+
+/* syscall: "getxattr" ret: "int" args: */
+#define	LINUX_SYS_getxattr	229
+
+/* syscall: "lgetxattr" ret: "int" args: */
+#define	LINUX_SYS_lgetxattr	230
+
+/* syscall: "fgetxattr" ret: "int" args: */
+#define	LINUX_SYS_fgetxattr	231
+
+/* syscall: "listxattr" ret: "int" args: */
+#define	LINUX_SYS_listxattr	232
+
+/* syscall: "llistxattr" ret: "int" args: */
+#define	LINUX_SYS_llistxattr	233
+
+/* syscall: "flistxattr" ret: "int" args: */
+#define	LINUX_SYS_flistxattr	234
+
+/* syscall: "removexattr" ret: "int" args: */
+#define	LINUX_SYS_removexattr	235
+
+/* syscall: "lremovexattr" ret: "int" args: */
+#define	LINUX_SYS_lremovexattr	236
+
+/* syscall: "fremovexattr" ret: "int" args: */
+#define	LINUX_SYS_fremovexattr	237
 
 /* syscall: "fadvise64" ret: "int" args: */
 #define	LINUX_SYS_fadvise64	250
Index: linux_syscallargs.h
===================================================================
RCS file: /cvs/src/sys/compat/linux/linux_syscallargs.h,v
retrieving revision 1.47
diff -u -r1.47 linux_syscallargs.h
--- linux_syscallargs.h	2003/09/01 14:01:10	1.47
+++ linux_syscallargs.h	2003/09/03 07:20:35
@@ -1,4 +1,4 @@
-/*	$OpenBSD: linux_syscallargs.h,v 1.47 2003/09/01 14:01:10 fgsch Exp $	*/
+/*	$OpenBSD$	*/
 
 /*
  * System call argument lists.
@@ -788,5 +788,17 @@
 int	linux_sys_madvise(struct proc *, void *, register_t *);
 int	linux_sys_getdents64(struct proc *, void *, register_t *);
 int	linux_sys_fcntl64(struct proc *, void *, register_t *);
+int	linux_sys_setxattr(struct proc *, void *, register_t *);
+int	linux_sys_lsetxattr(struct proc *, void *, register_t *);
+int	linux_sys_fsetxattr(struct proc *, void *, register_t *);
+int	linux_sys_getxattr(struct proc *, void *, register_t *);
+int	linux_sys_lgetxattr(struct proc *, void *, register_t *);
+int	linux_sys_fgetxattr(struct proc *, void *, register_t *);
+int	linux_sys_listxattr(struct proc *, void *, register_t *);
+int	linux_sys_llistxattr(struct proc *, void *, register_t *);
+int	linux_sys_flistxattr(struct proc *, void *, register_t *);
+int	linux_sys_removexattr(struct proc *, void *, register_t *);
+int	linux_sys_lremovexattr(struct proc *, void *, register_t *);
+int	linux_sys_fremovexattr(struct proc *, void *, register_t *);
 int	linux_sys_fadvise64(struct proc *, void *, register_t *);
 int	sys_exit(struct proc *, void *, register_t *);
Index: linux_syscalls.c
===================================================================
RCS file: /cvs/src/sys/compat/linux/linux_syscalls.c,v
retrieving revision 1.45
diff -u -r1.45 linux_syscalls.c
--- linux_syscalls.c	2003/09/01 14:01:10	1.45
+++ linux_syscalls.c	2003/09/03 07:20:35
@@ -1,4 +1,4 @@
-/*	$OpenBSD: linux_syscalls.c,v 1.45 2003/09/01 14:01:10 fgsch Exp $	*/
+/*	$OpenBSD$	*/
 
 /*
  * System call names.
@@ -250,18 +250,18 @@
 	"#223 (unimplemented)",		/* 223 = unimplemented */
 	"#224 (unimplemented linux_sys_gettid)",		/* 224 = unimplemented linux_sys_gettid */
 	"#225 (unimplemented linux_sys_readahead)",		/* 225 = unimplemented linux_sys_readahead */
-	"#226 (unimplemented linux_sys_setxattr)",		/* 226 = unimplemented linux_sys_setxattr */
-	"#227 (unimplemented linux_sys_lsetxattr)",		/* 227 = unimplemented linux_sys_lsetxattr */
-	"#228 (unimplemented linux_sys_fsetxattr)",		/* 228 = unimplemented linux_sys_fsetxattr */
-	"#229 (unimplemented linux_sys_getxattr)",		/* 229 = unimplemented linux_sys_getxattr */
-	"#230 (unimplemented linux_sys_lgetxattr)",		/* 230 = unimplemented linux_sys_lgetxattr */
-	"#231 (unimplemented linux_sys_fgetxattr)",		/* 231 = unimplemented linux_sys_fgetxattr */
-	"#232 (unimplemented linux_sys_listxattr)",		/* 232 = unimplemented linux_sys_listxattr */
-	"#233 (unimplemented linux_sys_llistxattr)",		/* 233 = unimplemented linux_sys_llistxattr */
-	"#234 (unimplemented linux_sys_flistxattr)",		/* 234 = unimplemented linux_sys_flistxattr */
-	"#235 (unimplemented linux_sys_removexattr)",		/* 235 = unimplemented linux_sys_removexattr */
-	"#236 (unimplemented linux_sys_lremovexattr)",		/* 236 = unimplemented linux_sys_lremovexattr */
-	"#237 (unimplemented linux_sys_fremovexattr)",		/* 237 = unimplemented linux_sys_fremovexattr */
+	"setxattr",			/* 226 = setxattr */
+	"lsetxattr",			/* 227 = lsetxattr */
+	"fsetxattr",			/* 228 = fsetxattr */
+	"getxattr",			/* 229 = getxattr */
+	"lgetxattr",			/* 230 = lgetxattr */
+	"fgetxattr",			/* 231 = fgetxattr */
+	"listxattr",			/* 232 = listxattr */
+	"llistxattr",			/* 233 = llistxattr */
+	"flistxattr",			/* 234 = flistxattr */
+	"removexattr",			/* 235 = removexattr */
+	"lremovexattr",			/* 236 = lremovexattr */
+	"fremovexattr",			/* 237 = fremovexattr */
 	"#238 (unimplemented linux_sys_tkill)",		/* 238 = unimplemented linux_sys_tkill */
 	"#239 (unimplemented linux_sys_sendfile64)",		/* 239 = unimplemented linux_sys_sendfile64 */
 	"#240 (unimplemented linux_sys_futex)",		/* 240 = unimplemented linux_sys_futex */
Index: linux_sysent.c
===================================================================
RCS file: /cvs/src/sys/compat/linux/linux_sysent.c,v
retrieving revision 1.46
diff -u -r1.46 linux_sysent.c
--- linux_sysent.c	2003/09/01 14:01:10	1.46
+++ linux_sysent.c	2003/09/03 07:20:35
@@ -1,4 +1,4 @@
-/*	$OpenBSD: linux_sysent.c,v 1.46 2003/09/01 14:01:10 fgsch Exp $	*/
+/*	$OpenBSD$	*/
 
 /*
  * System call switch table.
@@ -494,29 +494,29 @@
 	{ 0, 0,
 	    sys_nosys },			/* 225 = unimplemented linux_sys_readahead */
 	{ 0, 0,
-	    sys_nosys },			/* 226 = unimplemented linux_sys_setxattr */
+	    linux_sys_setxattr },		/* 226 = setxattr */
 	{ 0, 0,
-	    sys_nosys },			/* 227 = unimplemented linux_sys_lsetxattr */
+	    linux_sys_lsetxattr },		/* 227 = lsetxattr */
 	{ 0, 0,
-	    sys_nosys },			/* 228 = unimplemented linux_sys_fsetxattr */
+	    linux_sys_fsetxattr },		/* 228 = fsetxattr */
 	{ 0, 0,
-	    sys_nosys },			/* 229 = unimplemented linux_sys_getxattr */
+	    linux_sys_getxattr },		/* 229 = getxattr */
 	{ 0, 0,
-	    sys_nosys },			/* 230 = unimplemented linux_sys_lgetxattr */
+	    linux_sys_lgetxattr },		/* 230 = lgetxattr */
 	{ 0, 0,
-	    sys_nosys },			/* 231 = unimplemented linux_sys_fgetxattr */
+	    linux_sys_fgetxattr },		/* 231 = fgetxattr */
 	{ 0, 0,
-	    sys_nosys },			/* 232 = unimplemented linux_sys_listxattr */
+	    linux_sys_listxattr },		/* 232 = listxattr */
 	{ 0, 0,
-	    sys_nosys },			/* 233 = unimplemented linux_sys_llistxattr */
+	    linux_sys_llistxattr },		/* 233 = llistxattr */
 	{ 0, 0,
-	    sys_nosys },			/* 234 = unimplemented linux_sys_flistxattr */
+	    linux_sys_flistxattr },		/* 234 = flistxattr */
 	{ 0, 0,
-	    sys_nosys },			/* 235 = unimplemented linux_sys_removexattr */
+	    linux_sys_removexattr },		/* 235 = removexattr */
 	{ 0, 0,
-	    sys_nosys },			/* 236 = unimplemented linux_sys_lremovexattr */
+	    linux_sys_lremovexattr },		/* 236 = lremovexattr */
 	{ 0, 0,
-	    sys_nosys },			/* 237 = unimplemented linux_sys_fremovexattr */
+	    linux_sys_fremovexattr },		/* 237 = fremovexattr */
 	{ 0, 0,
 	    sys_nosys },			/* 238 = unimplemented linux_sys_tkill */
 	{ 0, 0,
Index: syscalls.master
===================================================================
RCS file: /cvs/src/sys/compat/linux/syscalls.master,v
retrieving revision 1.44
diff -u -r1.44 syscalls.master
--- syscalls.master	2003/09/01 14:00:23	1.44
+++ syscalls.master	2003/09/03 07:20:36
@@ -362,18 +362,18 @@
 223	UNIMPL
 224	UNIMPL		linux_sys_gettid
 225	UNIMPL		linux_sys_readahead
-226	UNIMPL		linux_sys_setxattr
-227	UNIMPL		linux_sys_lsetxattr
-228	UNIMPL		linux_sys_fsetxattr
-229	UNIMPL		linux_sys_getxattr
-230	UNIMPL		linux_sys_lgetxattr
-231	UNIMPL		linux_sys_fgetxattr
-232	UNIMPL		linux_sys_listxattr
-233	UNIMPL		linux_sys_llistxattr
-234	UNIMPL		linux_sys_flistxattr
-235	UNIMPL		linux_sys_removexattr
-236	UNIMPL		linux_sys_lremovexattr
-237	UNIMPL		linux_sys_fremovexattr
+226	NOARGS		{ int linux_sys_setxattr(void); }
+227	NOARGS		{ int linux_sys_lsetxattr(void); }
+228	NOARGS		{ int linux_sys_fsetxattr(void); }
+229	NOARGS		{ int linux_sys_getxattr(void); }
+230	NOARGS		{ int linux_sys_lgetxattr(void); }
+231	NOARGS		{ int linux_sys_fgetxattr(void); }
+232	NOARGS		{ int linux_sys_listxattr(void); }
+233	NOARGS		{ int linux_sys_llistxattr(void); }
+234	NOARGS		{ int linux_sys_flistxattr(void); }
+235	NOARGS		{ int linux_sys_removexattr(void); }
+236	NOARGS		{ int linux_sys_lremovexattr(void); }
+237	NOARGS		{ int linux_sys_fremovexattr(void); }
 238	UNIMPL		linux_sys_tkill
 239	UNIMPL		linux_sys_sendfile64
 240	UNIMPL		linux_sys_futex


-- 
you are more than the sum of what you consume