1bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman/*
2bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * Copyright (c) 2000 Denis Parker.  All rights reserved.
3bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * Copyright (c) 2000 Michael Stone.  All rights reserved.
4bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman *
5bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * Redistribution and use in source and binary forms, with or without
6bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * modification, are permitted provided that the following conditions
7bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * are met:
8bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 1. Redistributions of source code must retain the above copyright
9bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman *    notice, this list of conditions and the following disclaimer.
10bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * 2. Redistributions in binary form must reproduce the above copyright
11bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman *    notice, this list of conditions and the following disclaimer in the
12bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman *    documentation and/or other materials provided with the distribution.
13bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman *
14bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman */
25bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
26bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#include "includes.h"
27bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
28bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#if defined(WITH_IRIX_PROJECT) || \
29bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman    defined(WITH_IRIX_JOBS) || \
30bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman    defined(WITH_IRIX_ARRAY)
31bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
32bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#include <errno.h>
33bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#include <string.h>
34bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#include <unistd.h>
35bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
36bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifdef WITH_IRIX_PROJECT
37bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman# include <proj.h>
38bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif /* WITH_IRIX_PROJECT */
39bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifdef WITH_IRIX_JOBS
40bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman# include <sys/resource.h>
41bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif
42bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifdef WITH_IRIX_AUDIT
43bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman# include <sat.h>
44bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif /* WITH_IRIX_AUDIT */
45bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
46bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanvoid
47bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartmanirix_setusercontext(struct passwd *pw)
48bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman{
49bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifdef WITH_IRIX_PROJECT
50bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman        prid_t projid;
51bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif
52bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifdef WITH_IRIX_JOBS
53bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman        jid_t jid = 0;
54bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#elif defined(WITH_IRIX_ARRAY)
55bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman        int jid = 0;
56bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif
57bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
58bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifdef WITH_IRIX_JOBS
59bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman        jid = jlimit_startjob(pw->pw_name, pw->pw_uid, "interactive");
60bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman        if (jid == -1)
61bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman                fatal("Failed to create job container: %.100s",
62bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman                    strerror(errno));
63bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif /* WITH_IRIX_JOBS */
64bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifdef WITH_IRIX_ARRAY
65bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman        /* initialize array session */
66bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman        if (jid == 0  && newarraysess() != 0)
67bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman                fatal("Failed to set up new array session: %.100s",
68bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman                    strerror(errno));
69bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif /* WITH_IRIX_ARRAY */
70bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifdef WITH_IRIX_PROJECT
71bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman        /* initialize irix project info */
72bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman        if ((projid = getdfltprojuser(pw->pw_name)) == -1) {
73bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman                debug("Failed to get project id, using projid 0");
74bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman                projid = 0;
75bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman        }
76bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman        if (setprid(projid))
77bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman                fatal("Failed to initialize project %d for %s: %.100s",
78bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman                    (int)projid, pw->pw_name, strerror(errno));
79bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif /* WITH_IRIX_PROJECT */
80bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#ifdef WITH_IRIX_AUDIT
81bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman        if (sysconf(_SC_AUDIT)) {
82bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman                debug("Setting sat id to %d", (int) pw->pw_uid);
83bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman                if (satsetid(pw->pw_uid))
84bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman                        debug("error setting satid: %.100s", strerror(errno));
85bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman        }
86bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif /* WITH_IRIX_AUDIT */
87bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman}
88bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
89bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman
90bd77cf78387b72b7b3ea870459077672bf75c3b5Greg Hartman#endif /* defined(WITH_IRIX_PROJECT) || defined(WITH_IRIX_JOBS) || defined(WITH_IRIX_ARRAY) */
91