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