Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 21 Jun 2007 09:35:33 GMT
From:      Roman Divacky <rdivacky@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 122074 for review
Message-ID:  <200706210935.l5L9ZX2a016957@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=122074

Change 122074 by rdivacky@rdivacky_witten on 2007/06/21 09:35:23

	Add faccessat() syscall. We ignore the mode argument. We implement
	the AT_EACCESS flag.
	
	Untested.

Affected files ...

.. //depot/projects/soc2007/rdivacky/linux_at/sys/kern/init_sysent.c#2 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/kern/syscalls.c#2 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/kern/syscalls.master#2 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/kern/systrace_args.c#2 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/kern/vfs_syscalls.c#19 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/sys/fcntl.h#5 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/sys/syscall.h#2 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/sys/syscall.mk#2 edit
.. //depot/projects/soc2007/rdivacky/linux_at/sys/sys/sysproto.h#2 edit

Differences ...

==== //depot/projects/soc2007/rdivacky/linux_at/sys/kern/init_sysent.c#2 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call switch table.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/kern/init_sysent.c,v 1.228 2006/11/11 22:01:25 ru Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/kern/syscalls.master,v 1.231 2006/11/03 15:23:14 rrs Exp 
  */
 
@@ -504,4 +504,5 @@
 	{ AS(sctp_generic_sendmsg_args), (sy_call_t *)sctp_generic_sendmsg, AUE_NULL, NULL, 0, 0 },	/* 472 = sctp_generic_sendmsg */
 	{ AS(sctp_generic_sendmsg_iov_args), (sy_call_t *)sctp_generic_sendmsg_iov, AUE_NULL, NULL, 0, 0 },	/* 473 = sctp_generic_sendmsg_iov */
 	{ AS(sctp_generic_recvmsg_args), (sy_call_t *)sctp_generic_recvmsg, AUE_NULL, NULL, 0, 0 },	/* 474 = sctp_generic_recvmsg */
+	{ AS(faccessat_args), (sy_call_t *)faccessat, AUE_ACCESS, NULL, 0, 0 },	/* 475 = faccessat */
 };

==== //depot/projects/soc2007/rdivacky/linux_at/sys/kern/syscalls.c#2 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call names.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/kern/syscalls.c,v 1.212 2006/11/11 22:01:25 ru Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/kern/syscalls.master,v 1.231 2006/11/03 15:23:14 rrs Exp 
  */
 
@@ -482,4 +482,5 @@
 	"sctp_generic_sendmsg",			/* 472 = sctp_generic_sendmsg */
 	"sctp_generic_sendmsg_iov",			/* 473 = sctp_generic_sendmsg_iov */
 	"sctp_generic_recvmsg",			/* 474 = sctp_generic_recvmsg */
+	"faccessat",			/* 475 = faccessat */
 };

==== //depot/projects/soc2007/rdivacky/linux_at/sys/kern/syscalls.master#2 (text+ko) ====

@@ -835,5 +835,6 @@
 474     AUE_NULL        STD    { int sctp_generic_recvmsg(int sd, struct iovec *iov, int iovlen, \
 				    struct sockaddr * from, __socklen_t *fromlenaddr, \
 				    struct sctp_sndrcvinfo *sinfo, int *msg_flags); }
+475	AUE_ACCESS	STD	{ int faccessat(int dirfd, char *path, int mode, int flags); }
 ; Please copy any additions and changes to the following compatability tables:
 ; sys/compat/freebsd32/syscalls.master

==== //depot/projects/soc2007/rdivacky/linux_at/sys/kern/systrace_args.c#2 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call argument to DTrace register array converstion.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/kern/systrace_args.c,v 1.12 2006/11/11 22:01:25 ru Exp $
+ * $FreeBSD$
  * This file is part of the DTrace syscall provider.
  */
 
@@ -2805,6 +2805,16 @@
 		*n_args = 7;
 		break;
 	}
+	/* faccessat */
+	case 475: {
+		struct faccessat_args *p = params;
+		iarg[0] = p->dirfd; /* int */
+		uarg[1] = (intptr_t) p->path; /* char * */
+		iarg[2] = p->mode; /* int */
+		iarg[3] = p->flags; /* int */
+		*n_args = 4;
+		break;
+	}
 	default:
 		*n_args = 0;
 		break;

==== //depot/projects/soc2007/rdivacky/linux_at/sys/kern/vfs_syscalls.c#19 (text+ko) ====

@@ -1999,6 +1999,20 @@
 	return (kern_access(td, uap->path, UIO_USERSPACE, uap->flags));
 }
 
+#ifndef _SYS_SYSPROTO_H_
+struct faccessat_args {
+	int	dirfd;
+	char	*path;
+	int	mode;
+	int	flags;
+}
+#endif
+int faccessat(struct thread *td, struct faccessat_args *args)
+{
+	/* XXX: what about mode? */
+	return kern_accessat(td, args->path, UIO_USERSPACE, args->flags, args->dirfd);
+}
+
 int
 kern_access(struct thread *td, char *path, enum uio_seg pathseg, int flags)
 {
@@ -2029,8 +2043,13 @@
 	 */
 	cred = td->td_ucred;
 	tmpcred = crdup(cred);
-	tmpcred->cr_uid = cred->cr_ruid;
-	tmpcred->cr_groups[0] = cred->cr_rgid;
+	if (flags & AT_EACCESS) {
+		tmpcred->cr_uid = cred->cr_uid;
+		tmpcred->cr_groups[0] = cred->cr_groups[0];
+	} else {
+		tmpcred->cr_uid = cred->cr_ruid;
+		tmpcred->cr_groups[0] = cred->cr_rgid;
+	}
 	td->td_ucred = tmpcred;
 	if ((error = namei(&nd)) != 0)
 		goto out;

==== //depot/projects/soc2007/rdivacky/linux_at/sys/sys/fcntl.h#5 (text+ko) ====

@@ -108,9 +108,7 @@
 					   to determine the target of relative
 					   file paths.
 					 */
-#ifdef notyet
 #define	AT_EACCESS		0x100	/* Check access using effective user and group ID */
-#endif
 #define	AT_SYMLINK_NOFOLLOW	0x200   /* Do not follow symbolic links */
 #define	AT_SYMLINK_FOLLOW	0x400	/* Follow symbolic link */
 #define	AT_REMOVEDIR		0x800	/* Remove directory instead of file */

==== //depot/projects/soc2007/rdivacky/linux_at/sys/sys/syscall.h#2 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call numbers.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/sys/syscall.h,v 1.209 2006/11/11 22:01:24 ru Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/kern/syscalls.master,v 1.231 2006/11/03 15:23:14 rrs Exp 
  */
 
@@ -394,4 +394,5 @@
 #define	SYS_sctp_generic_sendmsg	472
 #define	SYS_sctp_generic_sendmsg_iov	473
 #define	SYS_sctp_generic_recvmsg	474
-#define	SYS_MAXSYSCALL	475
+#define	SYS_faccessat	475
+#define	SYS_MAXSYSCALL	476

==== //depot/projects/soc2007/rdivacky/linux_at/sys/sys/syscall.mk#2 (text+ko) ====

@@ -1,6 +1,6 @@
 # FreeBSD system call names.
 # DO NOT EDIT-- this file is automatically generated.
-# $FreeBSD: src/sys/sys/syscall.mk,v 1.164 2006/11/11 22:01:24 ru Exp $
+# $FreeBSD$
 # created from FreeBSD: src/sys/kern/syscalls.master,v 1.231 2006/11/03 15:23:14 rrs Exp 
 MIASM =  \
 	syscall.o \
@@ -335,4 +335,5 @@
 	sctp_peeloff.o \
 	sctp_generic_sendmsg.o \
 	sctp_generic_sendmsg_iov.o \
-	sctp_generic_recvmsg.o
+	sctp_generic_recvmsg.o \
+	faccessat.o

==== //depot/projects/soc2007/rdivacky/linux_at/sys/sys/sysproto.h#2 (text+ko) ====

@@ -2,7 +2,7 @@
  * System call prototypes.
  *
  * DO NOT EDIT-- this file is automatically generated.
- * $FreeBSD: src/sys/sys/sysproto.h,v 1.213 2006/11/11 22:01:24 ru Exp $
+ * $FreeBSD$
  * created from FreeBSD: src/sys/kern/syscalls.master,v 1.231 2006/11/03 15:23:14 rrs Exp 
  */
 
@@ -1482,6 +1482,12 @@
 	char sinfo_l_[PADL_(struct sctp_sndrcvinfo *)]; struct sctp_sndrcvinfo * sinfo; char sinfo_r_[PADR_(struct sctp_sndrcvinfo *)];
 	char msg_flags_l_[PADL_(int *)]; int * msg_flags; char msg_flags_r_[PADR_(int *)];
 };
+struct faccessat_args {
+	char dirfd_l_[PADL_(int)]; int dirfd; char dirfd_r_[PADR_(int)];
+	char path_l_[PADL_(char *)]; char * path; char path_r_[PADR_(char *)];
+	char mode_l_[PADL_(int)]; int mode; char mode_r_[PADR_(int)];
+	char flags_l_[PADL_(int)]; int flags; char flags_r_[PADR_(int)];
+};
 int	nosys(struct thread *, struct nosys_args *);
 void	sys_exit(struct thread *, struct sys_exit_args *);
 int	fork(struct thread *, struct fork_args *);
@@ -1814,6 +1820,7 @@
 int	sctp_generic_sendmsg(struct thread *, struct sctp_generic_sendmsg_args *);
 int	sctp_generic_sendmsg_iov(struct thread *, struct sctp_generic_sendmsg_iov_args *);
 int	sctp_generic_recvmsg(struct thread *, struct sctp_generic_recvmsg_args *);
+int	faccessat(struct thread *, struct faccessat_args *);
 
 #ifdef COMPAT_43
 
@@ -2365,6 +2372,7 @@
 #define	SYS_AUE_sctp_generic_sendmsg	AUE_NULL
 #define	SYS_AUE_sctp_generic_sendmsg_iov	AUE_NULL
 #define	SYS_AUE_sctp_generic_recvmsg	AUE_NULL
+#define	SYS_AUE_faccessat	AUE_ACCESS
 
 #undef PAD_
 #undef PADL_



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200706210935.l5L9ZX2a016957>