[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