ibcs2_other.c revision 160191
118334Speter/*- 218334Speter * Copyright (c) 1995 Steven Wallace 390075Sobrien * All rights reserved. 490075Sobrien * 550397Sobrien * Redistribution and use in source and binary forms, with or without 618334Speter * modification, are permitted provided that the following conditions 7132718Skan * are met: 818334Speter * 1. Redistributions of source code must retain the above copyright 9132718Skan * notice, this list of conditions and the following disclaimer. 1018334Speter * 2. The name of the author may not be used to endorse or promote products 1118334Speter * derived from this software without specific prior written permission 1218334Speter * 1318334Speter * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 14132718Skan * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1518334Speter * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1618334Speter * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 1718334Speter * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 1818334Speter * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 1918334Speter * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 20132718Skan * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2118334Speter * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2218334Speter * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2318334Speter */ 2490075Sobrien 2518334Speter#include <sys/cdefs.h> 2690075Sobrien__FBSDID("$FreeBSD: head/sys/i386/ibcs2/ibcs2_other.c 160191 2006-07-08 20:05:04Z jhb $"); 2718334Speter 2890075Sobrien/* 2990075Sobrien * IBCS2 compatibility module. 3090075Sobrien */ 31132718Skan 3218334Speter#include "opt_spx_hack.h" 3318334Speter 3418334Speter#include <sys/param.h> 3518334Speter#include <sys/systm.h> 3618334Speter#include <sys/lock.h> 3718334Speter#include <sys/mutex.h> 3818334Speter#include <sys/syscallsubr.h> 3918334Speter#include <sys/sysproto.h> 4018334Speter#include <sys/un.h> 4118334Speter 4218334Speter#include <i386/ibcs2/ibcs2_types.h> 4318334Speter#include <i386/ibcs2/ibcs2_signal.h> 44132718Skan#include <i386/ibcs2/ibcs2_util.h> 4590075Sobrien#include <i386/ibcs2/ibcs2_proto.h> 4690075Sobrien 4790075Sobrien#define IBCS2_SECURE_GETLUID 1 4890075Sobrien#define IBCS2_SECURE_SETLUID 2 4918334Speter 5018334Speterint 5118334Speteribcs2_secure(struct thread *td, struct ibcs2_secure_args *uap) 5218334Speter{ 5318334Speter switch (uap->cmd) { 5418334Speter 5518334Speter case IBCS2_SECURE_GETLUID: /* get login uid */ 5618334Speter td->td_retval[0] = td->td_ucred->cr_uid; 5718334Speter return 0; 5818334Speter 5918334Speter case IBCS2_SECURE_SETLUID: /* set login uid */ 6018334Speter return EPERM; 6118334Speter 6250397Sobrien default: 6318334Speter printf("IBCS2: 'secure' cmd=%d not implemented\n", uap->cmd); 6418334Speter } 6518334Speter 6618334Speter return EINVAL; 6718334Speter} 6818334Speter 6918334Speterint 7018334Speteribcs2_lseek(struct thread *td, register struct ibcs2_lseek_args *uap) 7118334Speter{ 7218334Speter struct lseek_args largs; 73132718Skan int error; 74132718Skan 75132718Skan largs.fd = uap->fd; 7618334Speter largs.offset = uap->offset; 7718334Speter largs.whence = uap->whence; 7890075Sobrien error = lseek(td, &largs); 7918334Speter return (error); 8050397Sobrien} 8118334Speter 82132718Skan#ifdef SPX_HACK 8318334Speter#include <sys/socket.h> 8418334Speter#include <sys/un.h> 8518334Speter 8618334Speterint 8750397Sobrienspx_open(struct thread *td) 8890075Sobrien{ 8918334Speter struct socket_args sock; 9050397Sobrien struct sockaddr_un sun; 9118334Speter int fd, error; 9218334Speter 9318334Speter /* obtain a socket. */ 9418334Speter DPRINTF(("SPX: open socket\n")); 9550397Sobrien sock.domain = AF_UNIX; 9690075Sobrien sock.type = SOCK_STREAM; 9718334Speter sock.protocol = 0; 9850397Sobrien error = socket(td, &sock); 9918334Speter if (error) 10018334Speter return error; 10118334Speter fd = td->td_retval[0]; 10218334Speter 10318334Speter /* connect the socket to standard X socket */ 10418334Speter DPRINTF(("SPX: connect to /tmp/X11-unix/X0\n")); 10518334Speter sun.sun_family = AF_UNIX; 10618334Speter strcpy(sun.sun_path, "/tmp/.X11-unix/X0"); 10718334Speter sun.sun_len = sizeof(struct sockaddr_un) - sizeof(sun.sun_path) + 10818334Speter strlen(sun.sun_path) + 1; 10918334Speter 11018334Speter error = kern_connect(td, fd, (struct sockaddr *)&sun); 11118334Speter if (error) { 11218334Speter kern_close(td, fd); 11350397Sobrien return error; 11418334Speter } 11518334Speter td->td_retval[0] = fd; 11618334Speter return 0; 11718334Speter} 11818334Speter#endif /* SPX_HACK */ 11918334Speter