mirror of
https://git.openafs.org/openafs.git
synced 2025-01-18 06:50:12 +00:00
kopenafs-20060802
Add a shared libkopenafs that provides k_hasafs, k_setpag, k_unlog, and k_pioctl (in other words, enough for a PAM session module that calls an external aklog).
This commit is contained in:
parent
5c20647044
commit
83b6575648
@ -508,6 +508,9 @@ shlibafsauthent: ubik auth kauth shlibafsrpc
|
||||
echo Not building shared libafsauthent for ${SYS_NAME} ;; \
|
||||
esac
|
||||
|
||||
kopenafs: config sys
|
||||
${COMPILE_PART1} kopenafs ${COMPILE_PART2}
|
||||
|
||||
libadmin_real:
|
||||
${COMPILE_PART1} libadmin ${COMPILE_PART2}
|
||||
${COMPILE_PART1} libadmin/adminutil ${COMPILE_PART2}
|
||||
@ -550,14 +553,14 @@ finale: project cmd comerr afsd butc tbutc @ENABLE_KERNEL_MODULE@ libuafs audit
|
||||
ptserver scout bu_utils ubik uss bozo vfsck volser tvolser tsalvaged \
|
||||
venus update xstat afsmonitor rxdebug libafsrpc \
|
||||
libafsauthent shlibafsrpc shlibafsauthent libadmin man-pages \
|
||||
platform
|
||||
platform kopenafs
|
||||
${COMPILE_PART1} finale ${COMPILE_PART2}
|
||||
|
||||
finale_nolibafs: project cmd comerr afsd butc tbutc libuafs audit kauth log \
|
||||
ptserver scout bu_utils ubik uss bozo vfsck volser tvolser tsalvaged \
|
||||
venus update xstat afsmonitor rxdebug libafsrpc \
|
||||
libafsauthent shlibafsrpc shlibafsauthent libadmin man-pages \
|
||||
platform
|
||||
platform kopenafs
|
||||
${COMPILE_PART1} finale ${COMPILE_PART2}
|
||||
|
||||
# Use washtool to ensure MakefileProto is current and obj/libafs exists.
|
||||
@ -645,6 +648,7 @@ clean2:
|
||||
-${COMPILE_PART1} libafsauthent ${COMPILE_CLEAN}
|
||||
-${COMPILE_PART1} shlibafsrpc ${COMPILE_CLEAN}
|
||||
-${COMPILE_PART1} shlibafsauthent ${COMPILE_CLEAN}
|
||||
-${COMPILE_PART1} kopenafs ${COMPILE_CLEAN}
|
||||
-${COMPILE_PART1} libadmin ${COMPILE_CLEAN}
|
||||
-${COMPILE_PART1} libadmin/adminutil ${COMPILE_CLEAN}
|
||||
-${COMPILE_PART1} libadmin/client ${COMPILE_CLEAN}
|
||||
@ -706,6 +710,7 @@ distclean: clean
|
||||
src/gtx/Makefile \
|
||||
src/kauth/test/Makefile \
|
||||
src/kauth/Makefile \
|
||||
src/kopenafs/Makefile \
|
||||
src/libacl/test/Makefile \
|
||||
src/libacl/Makefile \
|
||||
src/libadmin/adminutil/Makefile \
|
||||
|
@ -1050,8 +1050,14 @@ if test "$ac_cv_header_regex_h" = "yes" && \
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
|
||||
|
||||
AC_TYPE_SIGNAL
|
||||
AC_CHECK_TYPE(ssize_t, int)
|
||||
AC_CHECK_TYPE([sig_atomic_t], ,
|
||||
[AC_DEFINE([sig_atomic_t], [int],
|
||||
[Define to int if <signal.h> does not define.])],
|
||||
[#include <sys/types.h>
|
||||
#include <signal.h>])
|
||||
AC_SIZEOF_TYPE(long)
|
||||
|
||||
AC_MSG_CHECKING(size of time_t)
|
||||
|
@ -49,6 +49,7 @@ src/gtx/Makefile \
|
||||
src/JAVA/libjafs/Makefile \
|
||||
src/kauth/Makefile \
|
||||
src/kauth/test/Makefile \
|
||||
src/kopenafs/Makefile \
|
||||
src/libacl/Makefile \
|
||||
src/libacl/test/Makefile \
|
||||
src/libadmin/adminutil/Makefile \
|
||||
|
5
src/kopenafs/.cvsignore
Normal file
5
src/kopenafs/.cvsignore
Normal file
@ -0,0 +1,5 @@
|
||||
AFS_component_version_number.c
|
||||
Makefile
|
||||
libkopenafs.*
|
||||
test-setpag
|
||||
test-unlog
|
137
src/kopenafs/Makefile.in
Normal file
137
src/kopenafs/Makefile.in
Normal file
@ -0,0 +1,137 @@
|
||||
# Copyright 2000, International Business Machines Corporation and others.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# This software has been released under the terms of the IBM Public
|
||||
# License. For details, see the LICENSE file in the top-level source
|
||||
# directory or online at http://www.openafs.org/dl/license10.html
|
||||
#
|
||||
# Portions Copyright (c) 2003 Apple Computer, Inc.
|
||||
|
||||
srcdir=@srcdir@
|
||||
include @TOP_OBJDIR@/src/config/Makefile.config
|
||||
|
||||
# API version. When something changes, increment as appropriate.
|
||||
# Ignore at your own risk.
|
||||
MAJOR = 1
|
||||
MINOR = 0
|
||||
|
||||
CC = ${MT_CC}
|
||||
INCLUDES = -I. -I${srcdir} -I../sys
|
||||
CFLAGS = ${COMMON_CFLAGS} ${INCLUDES} ${MT_CFLAGS} ${SHLIB_CFLAGS}
|
||||
|
||||
SYS = ${srcdir}/../sys
|
||||
SYSOBJS = glue.o pioctl.o setpag.o syscall.o
|
||||
LIBOBJS = kopenafs.o ${SYSOBJS} AFS_component_version_number.o
|
||||
|
||||
LIBKOPENAFS = libkopenafs.${SHLIB_SUFFIX}.${MAJOR}.${MINOR}
|
||||
|
||||
all: ${TOP_LIBDIR}/${LIBKOPENAFS} ${TOP_LIBDIR}/libkopenafs.a \
|
||||
${TOP_INCDIR}/kopenafs.h
|
||||
|
||||
${TOP_LIBDIR}/${LIBKOPENAFS}: ${LIBKOPENAFS}
|
||||
${INSTALL_DATA} ${LIBKOPENAFS} ${TOP_LIBDIR}/${LIBKOPENAFS}
|
||||
-ln -f -s ${LIBKOPENAFS} \
|
||||
${TOP_LIBDIR}/libkopenafs.${SHLIB_SUFFIX}
|
||||
-ln -f -s ${LIBKOPENAFS} \
|
||||
${TOP_LIBDIR}/libkopenafs.${SHLIB_SUFFIX}.${MAJOR}
|
||||
|
||||
${TOP_LIBDIR}/libkopenafs.a: libkopenafs.a
|
||||
${INSTALL_DATA} libkopenafs.a $@
|
||||
|
||||
${TOP_INCDIR}/kopenafs.h: kopenafs.h
|
||||
${INSTALL_DATA} kopenafs.h $@
|
||||
|
||||
glue.o: ${SYS}/glue.c ${SYS}/afssyscalls.h
|
||||
${CCOBJ} ${CFLAGS} -c ${SYS}/glue.c
|
||||
|
||||
pioctl.o: ${SYS}/pioctl.c ${SYS}/afssyscalls.h
|
||||
${CCOBJ} ${CFLAGS} -c ${SYS}/pioctl.c
|
||||
|
||||
setpag.o: ${SYS}/setpag.c ${SYS}/afssyscalls.h
|
||||
${CCOBJ} ${CFLAGS} -c ${SYS}/setpag.c
|
||||
|
||||
# This file is only actually used on SGI and AIX, but some systems can't cope
|
||||
# with an empty .o file being included in a link.
|
||||
syscall.o: ${SYS}/syscall.s
|
||||
@set -x; case "$(SYS_NAME)" in \
|
||||
sgi_*) \
|
||||
${CC} ${CFLAGS} -c ${SYS}/syscall.s; \
|
||||
;; \
|
||||
*fbsd* | *obsd* | *nbsd*) \
|
||||
${CCOBJ} -E ${SFLAGS} syscall.s > syscall.S ; \
|
||||
${AS} syscall.S -o syscall.o ; \
|
||||
$(RM) -f syscall.S; \
|
||||
;; \
|
||||
rs_aix*) \
|
||||
/lib/cpp -P ${SFLAGS} ${srcdir}/syscall.s syscall.ss; \
|
||||
as -o syscall.o syscall.ss; \
|
||||
$(RM) syscall.ss; \
|
||||
;; \
|
||||
*) \
|
||||
touch syscall.o; \
|
||||
;; \
|
||||
esac
|
||||
|
||||
libkopenafs.a: ${LIBOBJS}
|
||||
${RM} -f $@
|
||||
${AR} crv $@ ${LIBOBJS}
|
||||
${RANLIB} $@
|
||||
|
||||
${LIBKOPENAFS}: ${LIBOBJS}
|
||||
case ${SYS_NAME} in \
|
||||
rs_aix*) \
|
||||
${SHLIB_LINKER} -o ${LIBKOPENAFS} ${LIBOBJS} \
|
||||
-bE:${srcdir}/kopenafs.exp ${MT_LIBS}; \
|
||||
;; \
|
||||
sun*_5*) \
|
||||
${SHLIB_LINKER} -h libafsrpc.${SHLIB_SUFFIX}.${MAJOR} \
|
||||
-o ${LIBKOPENAFS} ${LIBOBJS} ${MT_LIBS}; \
|
||||
;; \
|
||||
*_linux*) \
|
||||
${SHLIB_LINKER} -Wl,-h,libafsrpc.${SHLIB_SUFFIX}.${MAJOR} \
|
||||
-Wl,--version-script=${srcdir}/mapfile \
|
||||
-o ${LIBKOPENAFS} ${LIBOBJS} ${MT_LIBS}; \
|
||||
;; \
|
||||
*) \
|
||||
${SHLIB_LINKER} -o ${LIBKOPENAFS} ${LIBOBJS} ${MT_LIBS}; \
|
||||
;; \
|
||||
esac
|
||||
|
||||
test-unlog: test-unlog.o libkopenafs.a
|
||||
${CC} -o test-unlog test-unlog.o libkopenafs.a ${XLIBS} ${CFLAGS}
|
||||
|
||||
test-setpag: test-setpag.o libkopenafs.a
|
||||
${CC} -o test-setpag test-setpag.o libkopenafs.a ${XLIBS} ${CFLAGS}
|
||||
|
||||
#
|
||||
# Installation targets
|
||||
#
|
||||
install: ${LIBKOPENAFS}
|
||||
${INSTALL} -d ${DESTDIR}${libdir}
|
||||
${INSTALL} -d ${DESTDIR}${includedir}
|
||||
${INSTALL_DATA} libkopenafs.a ${DESTDIR}${libdir}/libkopenafs.a
|
||||
${INSTALL_DATA} ${LIBKOPENAFS} ${DESTDIR}${libdir}/${LIBKOPENAFS}
|
||||
-ln -f -s ${LIBKOPENAFS} \
|
||||
${DESTDIR}${libdir}/libkopenafs.${SHLIB_SUFFIX}
|
||||
-ln -f -s ${LIBKOPENAFS} \
|
||||
${DESTDIR}${libdir}/libkopenafs.${SHLIB_SUFFIX}.${MAJOR}
|
||||
${INSTALL_DATA} kopenafs.h ${DESTDIR}${includedir}/kopenafs.h
|
||||
|
||||
dest: ${LIBKOPENAFS}
|
||||
${INSTALL} -d ${DEST}/lib
|
||||
${INSTALL} -d ${DEST}/include
|
||||
${INSTALL_DATA} libkopenafs.a ${DEST}/lib/libkopenafs.a
|
||||
${INSTALL_DATA} ${LIBKOPENAFS} ${DEST}/lib/${LIBKOPENAFS}
|
||||
-ln -f -s ${LIBKOPENAFS} \
|
||||
${DEST}/lib/libkopenafs.${SHLIB_SUFFIX}
|
||||
-ln -f -s ${LIBKOPENAFS} \
|
||||
${DEST}/lib/libkopenafs.${SHLIB_SUFFIX}.${MAJOR}
|
||||
${INSTALL_DATA} kopenafs.h ${DEST}/include/kopenafs.h
|
||||
|
||||
#
|
||||
# Misc targets
|
||||
#
|
||||
clean:
|
||||
$(RM) -f *.o *.a ${LIBKOPENAFS} AFS_component_version_number.c
|
||||
|
||||
include ../config/Makefile.version
|
88
src/kopenafs/kopenafs.c
Normal file
88
src/kopenafs/kopenafs.c
Normal file
@ -0,0 +1,88 @@
|
||||
/*
|
||||
* Copyright 2000, International Business Machines Corporation and others.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* This software has been released under the terms of the IBM Public
|
||||
* License. For details, see the LICENSE file in the top-level source
|
||||
* directory or online at http://www.openafs.org/dl/license10.html
|
||||
*/
|
||||
|
||||
/*
|
||||
* Glue code for the kopenafs API. Mostly just wrappers around the functions
|
||||
* included in the libsys code.
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <netinet/in.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/signal.h>
|
||||
|
||||
#include <afsconfig.h>
|
||||
#include <afs/afssyscalls.h>
|
||||
#include <kopenafs.h>
|
||||
|
||||
static volatile sig_atomic_t syscall_okay = 1;
|
||||
|
||||
/* Signal handler to catch failed system calls and change the okay flag. */
|
||||
#ifdef SIGSYS
|
||||
static RETSIGTYPE
|
||||
sigsys_handler(int s)
|
||||
{
|
||||
syscall_okay = 0;
|
||||
signal(SIGSYS, sigsys_handler);
|
||||
}
|
||||
#endif /* SIGSYS */
|
||||
|
||||
int
|
||||
k_hasafs(void)
|
||||
{
|
||||
struct ViceIoctl iob;
|
||||
int okay, saved_errno;
|
||||
RETSIGTYPE (*saved_func)(int);
|
||||
|
||||
saved_errno = errno;
|
||||
|
||||
#ifdef SIGSYS
|
||||
saved_func = signal(SIGSYS, sigsys_handler);
|
||||
#endif
|
||||
|
||||
iob.in = NULL;
|
||||
iob.in_size = 0;
|
||||
iob.out = NULL;
|
||||
iob.out_size = 0;
|
||||
lpioctl(NULL, VIOCSETTOK, (char *) &iob, 0);
|
||||
|
||||
#ifdef SIGSYS
|
||||
signal(SIGSYS, saved_func);
|
||||
#endif
|
||||
|
||||
okay = 1;
|
||||
if (!syscall_okay || errno != EINVAL)
|
||||
okay = 0;
|
||||
errno = saved_errno;
|
||||
return okay;
|
||||
}
|
||||
|
||||
int
|
||||
k_setpag(void)
|
||||
{
|
||||
return lsetpag();
|
||||
}
|
||||
|
||||
int
|
||||
k_pioctl(char *path, int cmd, struct ViceIoctl *cmarg, int follow)
|
||||
{
|
||||
return lpioctl(path, cmd, (char *) cmarg, follow);
|
||||
}
|
||||
|
||||
int
|
||||
k_unlog(void)
|
||||
{
|
||||
struct ViceIoctl iob;
|
||||
|
||||
iob.in = NULL;
|
||||
iob.in_size = 0;
|
||||
iob.out = NULL;
|
||||
iob.out_size = 0;
|
||||
return lpioctl(NULL, VIOCUNLOG, (char *) &iob, 0);
|
||||
}
|
4
src/kopenafs/kopenafs.exp
Normal file
4
src/kopenafs/kopenafs.exp
Normal file
@ -0,0 +1,4 @@
|
||||
k_hasafs
|
||||
k_setpag
|
||||
k_unlog
|
||||
k_pioctl
|
53
src/kopenafs/kopenafs.h
Normal file
53
src/kopenafs/kopenafs.h
Normal file
@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright 2000, International Business Machines Corporation and others.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* This software has been released under the terms of the IBM Public
|
||||
* License. For details, see the LICENSE file in the top-level source
|
||||
* directory or online at http://www.openafs.org/dl/license10.html
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file defines the interface to the libkopenafs library, which provides
|
||||
* a reduced set of functions for compatibility with the Heimdal/KTH libkafs
|
||||
* library. This interface and the corresponding library are the best way to
|
||||
* get a completely standalone setpag() function from OpenAFS (in the form of
|
||||
* the k_setpag() interface defined here).
|
||||
*
|
||||
* The calls here only work on systems with native AFS clients and *will not*
|
||||
* work through the NFS translator.
|
||||
*/
|
||||
|
||||
#ifndef KOPENAFS_H
|
||||
#define KOPENAFS_H 1
|
||||
|
||||
/* Get the VIOC* constants and struct ViceIoctl. */
|
||||
#include <afs/vioc.h>
|
||||
|
||||
/*
|
||||
* Initialization function. Returns true if AFS is available on the system
|
||||
* and false otherwise. Should be called before any of the other functions,
|
||||
* and if it returns false, the other functions should not be called.
|
||||
*/
|
||||
int k_hasafs(void);
|
||||
|
||||
/*
|
||||
* Create a new PAG and put the current process in it. Returns 0 on success,
|
||||
* non-zero on system call failure. Equivalent to lsetpag().
|
||||
*/
|
||||
int k_setpag(void);
|
||||
|
||||
/*
|
||||
* Remove the tokens in the current PAG. Returns 0 on success, non-zero on
|
||||
* system call failure.
|
||||
*/
|
||||
int k_unlog(void);
|
||||
|
||||
/*
|
||||
* Perform an arbitrary pioctl system call with the specified arguments.
|
||||
* Returns 0 on success, non-zero on system call failure. Equivalent to
|
||||
* lpioctl().
|
||||
*/
|
||||
int k_pioctl(char *path, int cmd, struct ViceIoctl *cmarg, int follow);
|
||||
|
||||
#endif /* KOPENAFS_H */
|
13
src/kopenafs/mapfile
Normal file
13
src/kopenafs/mapfile
Normal file
@ -0,0 +1,13 @@
|
||||
# Export map for libkopenafs, used on Linux and Solaris to restrict
|
||||
# exports from the shared libraries to just the public ABI. Add symbol
|
||||
# versioning while we're at it, just in case.
|
||||
|
||||
KOPENAFS_1.0 {
|
||||
global:
|
||||
k_hasafs;
|
||||
k_setpag;
|
||||
k_unlog;
|
||||
k_pioctl;
|
||||
local:
|
||||
*;
|
||||
};
|
33
src/kopenafs/test-setpag.c
Normal file
33
src/kopenafs/test-setpag.c
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2000, International Business Machines Corporation and others.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* This software has been released under the terms of the IBM Public
|
||||
* License. For details, see the LICENSE file in the top-level source
|
||||
* directory or online at http://www.openafs.org/dl/license10.html
|
||||
*/
|
||||
|
||||
/*
|
||||
* Test the kopenafs setpag support.
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
int status;
|
||||
|
||||
if (k_hasafs()) {
|
||||
printf("Running k_setpag\n");
|
||||
status = k_setpag();
|
||||
printf("Status: %d, errno: %d\n", status, errno);
|
||||
if (argc > 1) {
|
||||
argv++;
|
||||
execvp(argv[0], argv);
|
||||
}
|
||||
} else {
|
||||
printf("AFS apparently not running\n");
|
||||
}
|
||||
}
|
29
src/kopenafs/test-unlog.c
Normal file
29
src/kopenafs/test-unlog.c
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright 2000, International Business Machines Corporation and others.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* This software has been released under the terms of the IBM Public
|
||||
* License. For details, see the LICENSE file in the top-level source
|
||||
* directory or online at http://www.openafs.org/dl/license10.html
|
||||
*/
|
||||
|
||||
/*
|
||||
* Test the kopenafs unlog support.
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
int status;
|
||||
|
||||
if (k_hasafs()) {
|
||||
printf("Running k_unlog\n");
|
||||
status = k_unlog();
|
||||
printf("Status: %d, errno: %d\n", status, errno);
|
||||
} else {
|
||||
printf("AFS apparently not running\n");
|
||||
}
|
||||
}
|
@ -72,7 +72,8 @@ SYSOBJS = \
|
||||
afssyscalls.o \
|
||||
rmtsysnet.o \
|
||||
glue.o \
|
||||
setpag.o
|
||||
setpag.o \
|
||||
pioctl.o
|
||||
|
||||
PTSERVEROBJS = \
|
||||
ptclient.o \
|
||||
@ -250,6 +251,9 @@ glue.o: ${SYS}/glue.c
|
||||
setpag.o: ${SYS}/setpag.c
|
||||
${CCRULE}
|
||||
|
||||
pioctl.o: ${SYS}/pioctl.c
|
||||
${CCRULE}
|
||||
|
||||
clean:
|
||||
$(RM) -f *.o *.a libafsauthent*
|
||||
|
||||
|
@ -27,13 +27,7 @@ LDFLAGS = ${SHLIB_LDFLAGS}
|
||||
INCLUDES=-I${TOP_OBJDIR}/src/config -I${TOP_INCDIR}
|
||||
CFLAGS = ${PAM_DBG} ${PAM_OPTMZ} ${INCLUDES} ${PAM_CFLAGS}
|
||||
|
||||
all: test_pam ${TOP_LIBDIR}/pam_afs.so.1 ${TOP_LIBDIR}/pam_afs.krb.so.1
|
||||
|
||||
${TOP_LIBDIR}/pam_afs.so.1: pam_afs.so.1
|
||||
${INSTALL_DATA} $? $@
|
||||
|
||||
${TOP_LIBDIR}/pam_afs.krb.so.1: pam_afs.krb.so.1
|
||||
${INSTALL_DATA} $? $@
|
||||
all: test_pam pam_afs.so.1 pam_afs.krb.so.1
|
||||
|
||||
afs_setcred.o: afs_setcred.c afs_pam_msg.h afs_message.h afs_util.h
|
||||
${CC} ${CFLAGS} -c ${srcdir}/afs_setcred.c -o afs_setcred.o
|
||||
|
@ -77,7 +77,8 @@ SYSOBJS = \
|
||||
afssyscalls.o \
|
||||
rmtsysnet.o \
|
||||
glue.o \
|
||||
setpag.o
|
||||
setpag.o \
|
||||
pioctl.o
|
||||
|
||||
PTSERVEROBJS = \
|
||||
ptclient.o \
|
||||
@ -276,5 +277,8 @@ glue.o: ${SYS}/glue.c
|
||||
setpag.o: ${SYS}/setpag.c
|
||||
${CCRULE}
|
||||
|
||||
pioctl.o: ${SYS}/pioctl.c
|
||||
${CCRULE}
|
||||
|
||||
clean:
|
||||
$(RM) -f *.o *.a libafsauthent*
|
||||
|
@ -19,7 +19,7 @@ CFLAGS=-I. -I${srcdir} ${DBUG} -I${TOP_OBJDIR}/src/config -I${TOP_INCDIR} ${XCF
|
||||
SFLAGS=-I${TOP_INCDIR}
|
||||
LIBS=libsys.a ${TOP_LIBDIR}/librx.a libsys.a ${TOP_LIBDIR}/liblwp.a ${TOP_LIBDIR}/util.a ${XLIBS}
|
||||
|
||||
OBJECTS= afssyscalls.o setpag.o glue.o syscall.o
|
||||
OBJECTS= afssyscalls.o setpag.o pioctl.o glue.o syscall.o
|
||||
SHLIBOBJS = picobj/setpag.o picobj/glue.o syscall.o
|
||||
RMTOBJS=rmtsysnet.o rmtsysc.o rmtsys.cs.o rmtsys.xdr.o rmtsys.ss.o rmtsyss.o
|
||||
|
||||
@ -124,6 +124,9 @@ glue.o: glue.c afssyscalls.h
|
||||
setpag.o: setpag.c afssyscalls.h
|
||||
${CCOBJ} ${CFLAGS} -c ${srcdir}/setpag.c
|
||||
|
||||
pioctl.o: pioctl.c afssyscalls.h
|
||||
${CCOBJ} ${CFLAGS} -c ${srcdir}/pioctl.c
|
||||
|
||||
rmtsysnet.o rmtsysc.o rmtsyss.o rmtsysd.o: rmtsys.h
|
||||
rmtsysd: AFS_component_version_number.o afs.exp afsl.exp
|
||||
|
||||
|
@ -59,7 +59,6 @@ static void check_iops(int index, char *fun, char *file, int line);
|
||||
#pragma weak xiinc = iinc
|
||||
#pragma weak xidec = idec
|
||||
#pragma weak xiopen = iopen
|
||||
#pragma weak xlpioctl = lpioctl
|
||||
#ifdef notdef
|
||||
#pragma weak xiread = iread
|
||||
#pragma weak xiwrite = iwrite
|
||||
@ -204,11 +203,6 @@ iwrite(int dev, int inode, int inode_p1, unsigned int offset, char *cbuf,
|
||||
}
|
||||
#endif /* notdef */
|
||||
|
||||
int
|
||||
lpioctl(char *path, int cmd, char *cmarg, int follow)
|
||||
{
|
||||
return (syscall(AFS_PIOCTL, path, cmd, cmarg, follow));
|
||||
}
|
||||
#else /* AFS_SGI_ENV */
|
||||
|
||||
#ifndef AFS_NAMEI_ENV
|
||||
@ -307,57 +301,6 @@ iwrite(int dev, int inode, int inode_p1, unsigned int offset, char *cbuf,
|
||||
|
||||
#endif /* AFS_NAMEI_ENV */
|
||||
|
||||
#if defined(AFS_DARWIN80_ENV)
|
||||
int ioctl_afs_syscall(long syscall, long param1, long param2, long param3,
|
||||
long param4, long param5, long param6, int *rval) {
|
||||
struct afssysargs syscall_data;
|
||||
int code;
|
||||
int fd = open(SYSCALL_DEV_FNAME, O_RDWR);
|
||||
if(fd < 0)
|
||||
return -1;
|
||||
|
||||
syscall_data.syscall = syscall;
|
||||
syscall_data.param1 = param1;
|
||||
syscall_data.param2 = param2;
|
||||
syscall_data.param3 = param3;
|
||||
syscall_data.param4 = param4;
|
||||
syscall_data.param5 = param5;
|
||||
syscall_data.param6 = param6;
|
||||
|
||||
code = ioctl(fd, VIOC_SYSCALL, &syscall_data);
|
||||
|
||||
close(fd);
|
||||
if (code)
|
||||
return code;
|
||||
*rval=syscall_data.retval;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
int
|
||||
lpioctl(char *path, int cmd, char *cmarg, int follow)
|
||||
{
|
||||
int errcode, rval;
|
||||
|
||||
#if defined(AFS_LINUX20_ENV)
|
||||
rval = proc_afs_syscall(AFSCALL_PIOCTL, (long)path, cmd, (long)cmarg,
|
||||
follow, &errcode);
|
||||
|
||||
if(rval)
|
||||
errcode = syscall(AFS_SYSCALL, AFSCALL_PIOCTL, path, cmd, cmarg,
|
||||
follow);
|
||||
#elif defined(AFS_DARWIN80_ENV)
|
||||
rval = ioctl_afs_syscall(AFSCALL_PIOCTL, (long)path, cmd, (long)cmarg,
|
||||
follow, 0, 0, &errcode);
|
||||
if (rval)
|
||||
errcode = rval;
|
||||
#else
|
||||
errcode = syscall(AFS_SYSCALL, AFSCALL_PIOCTL, path, cmd, cmarg, follow);
|
||||
#endif
|
||||
|
||||
return (errcode);
|
||||
}
|
||||
|
||||
#endif /* !AFS_SGI_ENV */
|
||||
#endif /* !AFS_AIX32_ENV */
|
||||
|
||||
|
@ -53,3 +53,30 @@ int proc_afs_syscall(long syscall, long param1, long param2, long param3,
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(AFS_DARWIN80_ENV)
|
||||
int ioctl_afs_syscall(long syscall, long param1, long param2, long param3,
|
||||
long param4, long param5, long param6, int *rval) {
|
||||
struct afssysargs syscall_data;
|
||||
int code;
|
||||
int fd = open(SYSCALL_DEV_FNAME, O_RDWR);
|
||||
if(fd < 0)
|
||||
return -1;
|
||||
|
||||
syscall_data.syscall = syscall;
|
||||
syscall_data.param1 = param1;
|
||||
syscall_data.param2 = param2;
|
||||
syscall_data.param3 = param3;
|
||||
syscall_data.param4 = param4;
|
||||
syscall_data.param5 = param5;
|
||||
syscall_data.param6 = param6;
|
||||
|
||||
code = ioctl(fd, VIOC_SYSCALL, &syscall_data);
|
||||
|
||||
close(fd);
|
||||
if (code)
|
||||
return code;
|
||||
*rval=syscall_data.retval;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
72
src/sys/pioctl.c
Normal file
72
src/sys/pioctl.c
Normal file
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright 2000, International Business Machines Corporation and others.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* This software has been released under the terms of the IBM Public
|
||||
* License. For details, see the LICENSE file in the top-level source
|
||||
* directory or online at http://www.openafs.org/dl/license10.html
|
||||
*/
|
||||
|
||||
/*
|
||||
* The lpioctl system call. (pioctl is handled by the rmtsys layer and turned
|
||||
* into either lpioctl or a remote call as appropriate.) It is kept separate
|
||||
* to allow for the creation of the libkopenafs shared library without
|
||||
* including the other system calls.
|
||||
*/
|
||||
|
||||
#include <afsconfig.h>
|
||||
#include <afs/param.h>
|
||||
|
||||
#include <afs/afs_args.h>
|
||||
#if defined(AFS_SUN_ENV) && !defined(AFS_SUN5_ENV)
|
||||
#include <unistd.h>
|
||||
#else
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
#include "afssyscalls.h"
|
||||
|
||||
#ifdef AFS_AIX32_ENV
|
||||
/*
|
||||
* in VRMIX, system calls look just like function calls, so we don't
|
||||
* need to do anything!
|
||||
*/
|
||||
|
||||
#else
|
||||
#if defined(AFS_SGI_ENV)
|
||||
|
||||
#pragma weak xlpioctl = lpioctl
|
||||
|
||||
int
|
||||
lpioctl(char *path, int cmd, char *cmarg, int follow)
|
||||
{
|
||||
return (syscall(AFS_PIOCTL, path, cmd, cmarg, follow));
|
||||
}
|
||||
|
||||
#else /* AFS_SGI_ENV */
|
||||
|
||||
int
|
||||
lpioctl(char *path, int cmd, char *cmarg, int follow)
|
||||
{
|
||||
int errcode, rval;
|
||||
|
||||
#if defined(AFS_LINUX20_ENV)
|
||||
rval = proc_afs_syscall(AFSCALL_PIOCTL, (long)path, cmd, (long)cmarg,
|
||||
follow, &errcode);
|
||||
|
||||
if(rval)
|
||||
errcode = syscall(AFS_SYSCALL, AFSCALL_PIOCTL, path, cmd, cmarg,
|
||||
follow);
|
||||
#elif defined(AFS_DARWIN80_ENV)
|
||||
rval = ioctl_afs_syscall(AFSCALL_PIOCTL, (long)path, cmd, (long)cmarg,
|
||||
follow, 0, 0, &errcode);
|
||||
if (rval)
|
||||
errcode = rval;
|
||||
#else
|
||||
errcode = syscall(AFS_SYSCALL, AFSCALL_PIOCTL, path, cmd, cmarg, follow);
|
||||
#endif
|
||||
|
||||
return (errcode);
|
||||
}
|
||||
|
||||
#endif /* !AFS_SGI_ENV */
|
||||
#endif /* !AFS_AIX32_ENV */
|
Loading…
Reference in New Issue
Block a user