ibcs2_other.c revision 30994
1190207Srpaulo/* 275115Sfenner * Copyright (c) 1995 Steven Wallace 375115Sfenner * All rights reserved. 475115Sfenner * 575115Sfenner * Redistribution and use in source and binary forms, with or without 675115Sfenner * modification, are permitted provided that the following conditions 775115Sfenner * are met: 875115Sfenner * 1. Redistributions of source code must retain the above copyright 975115Sfenner * notice, this list of conditions and the following disclaimer. 1075115Sfenner * 2. The name of the author may not be used to endorse or promote products 1175115Sfenner * derived from this software without specific prior written permission 1275115Sfenner * 1375115Sfenner * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1475115Sfenner * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1575115Sfenner * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1675115Sfenner * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 1775115Sfenner * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 1875115Sfenner * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 1975115Sfenner * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2075115Sfenner * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2175115Sfenner * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2275115Sfenner * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2375115Sfenner * 2475115Sfenner * $Id: ibcs2_other.c,v 1.7 1997/08/25 21:57:55 bde Exp $ 2575115Sfenner */ 2675115Sfenner 2775115Sfenner/* 2875115Sfenner * IBCS2 compatibility module. 2975115Sfenner */ 3075115Sfenner 3175115Sfenner#include <sys/param.h> 3275115Sfenner#include <sys/systm.h> 3375115Sfenner#include <sys/sysproto.h> 3475115Sfenner 3575115Sfenner#include <i386/ibcs2/ibcs2_types.h> 3675115Sfenner#include <i386/ibcs2/ibcs2_signal.h> 3775115Sfenner#include <i386/ibcs2/ibcs2_util.h> 3875115Sfenner#include <i386/ibcs2/ibcs2_proto.h> 3975115Sfenner 4075115Sfenner#define IBCS2_SECURE_GETLUID 1 4175115Sfenner#define IBCS2_SECURE_SETLUID 2 4275115Sfenner 4375115Sfennerint 4475115Sfenneribcs2_secure(struct proc *p, struct ibcs2_secure_args *uap) 4575115Sfenner{ 4675115Sfenner switch (uap->cmd) { 4775115Sfenner 4875115Sfenner case IBCS2_SECURE_GETLUID: /* get login uid */ 4975115Sfenner p->p_retval[0] = p->p_ucred->cr_uid; 5075115Sfenner return 0; 5175115Sfenner 5275115Sfenner case IBCS2_SECURE_SETLUID: /* set login uid */ 5375115Sfenner return EPERM; 5475115Sfenner 5575115Sfenner default: 5675115Sfenner printf("IBCS2: 'secure' cmd=%d not implemented\n", uap->cmd); 5775115Sfenner } 5875115Sfenner 5975115Sfenner return EINVAL; 60} 61 62int 63ibcs2_lseek(struct proc *p, register struct ibcs2_lseek_args *uap) 64{ 65 struct lseek_args largs; 66 int error; 67 68 largs.fd = uap->fd; 69 largs.offset = uap->offset; 70 largs.whence = uap->whence; 71 error = lseek(p, &largs); 72 return (error); 73} 74 75#ifdef SPX_HACK 76#include <sys/socket.h> 77#include <sys/un.h> 78 79int 80spx_open(struct proc *p, void *uap) 81{ 82 struct socket_args sock; 83 struct connect_args conn; 84 struct sockaddr_un *Xaddr; 85 int fd, error; 86 caddr_t sg = stackgap_init(); 87 88 /* obtain a socket. */ 89 DPRINTF(("SPX: open socket\n")); 90 sock.domain = AF_UNIX; 91 sock.type = SOCK_STREAM; 92 sock.protocol = 0; 93 error = socket(p, &sock); 94 if (error) 95 return error; 96 97 /* connect the socket to standard X socket */ 98 DPRINTF(("SPX: connect to /tmp/X11-unix/X0\n")); 99 Xaddr = stackgap_alloc(&sg, sizeof(struct sockaddr_un)); 100 Xaddr->sun_family = AF_UNIX; 101 Xaddr->sun_len = sizeof(struct sockaddr_un) - sizeof(Xaddr->sun_path) + 102 strlen(Xaddr->sun_path) + 1; 103 copyout("/tmp/.X11-unix/X0", Xaddr->sun_path, 18); 104 105 conn.s = fd = p->p_retval[0]; 106 conn.name = (caddr_t)Xaddr; 107 conn.namelen = sizeof(struct sockaddr_un); 108 error = connect(p, &conn); 109 if (error) { 110 struct close_args cl; 111 cl.fd = fd; 112 close(p, &cl); 113 return error; 114 } 115 p->p_retval[0] = fd; 116 return 0; 117} 118#endif /* SPX_HACK */ 119