Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sudo-project
GitHub Repository: sudo-project/sudo
Path: blob/main/src/solaris.c
1532 views
1
/*
2
* SPDX-License-Identifier: ISC
3
*
4
* Copyright (c) 2009-2015 Todd C. Miller <[email protected]>
5
*
6
* Permission to use, copy, modify, and distribute this software for any
7
* purpose with or without fee is hereby granted, provided that the above
8
* copyright notice and this permission notice appear in all copies.
9
*
10
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
*/
18
19
#include <config.h>
20
21
#ifdef HAVE_PROJECT_H
22
# include <project.h>
23
# include <sys/task.h>
24
# include <errno.h>
25
# include <pwd.h>
26
#endif
27
28
#include <sudo.h>
29
#include <sudo_dso.h>
30
31
int
32
os_init(int argc, char *argv[], char *envp[])
33
{
34
/*
35
* Solaris 11 is unable to load the per-locale shared objects
36
* without this. We must keep the handle open for it to work.
37
* This bug was fixed in Solaris 11 Update 1.
38
*/
39
void *handle = sudo_dso_load("/usr/lib/locale/common/methods_unicode.so.3",
40
SUDO_DSO_LAZY|SUDO_DSO_GLOBAL);
41
(void)&handle;
42
43
return os_init_common(argc, argv, envp);
44
}
45
46
#ifdef HAVE_PROJECT_H
47
void
48
set_project(struct passwd *pw)
49
{
50
struct project proj;
51
char buf[PROJECT_BUFSZ];
52
int errval;
53
debug_decl(set_project, SUDO_DEBUG_UTIL);
54
55
/*
56
* Collect the default project for the user and settaskid
57
*/
58
setprojent();
59
if (getdefaultproj(pw->pw_name, &proj, buf, sizeof(buf)) != NULL) {
60
errval = setproject(proj.pj_name, pw->pw_name, TASK_NORMAL);
61
switch(errval) {
62
case 0:
63
break;
64
case SETPROJ_ERR_TASK:
65
switch (errno) {
66
case EAGAIN:
67
sudo_warnx("%s", U_("resource control limit has been reached"));
68
break;
69
case ESRCH:
70
sudo_warnx(U_("user \"%s\" is not a member of project \"%s\""),
71
pw->pw_name, proj.pj_name);
72
break;
73
case EACCES:
74
sudo_warnx("%s", U_("the invoking task is final"));
75
break;
76
default:
77
sudo_warnx(U_("could not join project \"%s\""), proj.pj_name);
78
break;
79
}
80
break;
81
case SETPROJ_ERR_POOL:
82
switch (errno) {
83
case EACCES:
84
sudo_warnx(U_("no resource pool accepting default bindings "
85
"exists for project \"%s\""), proj.pj_name);
86
break;
87
case ESRCH:
88
sudo_warnx(U_("specified resource pool does not exist for "
89
"project \"%s\""), proj.pj_name);
90
break;
91
default:
92
sudo_warnx(U_("could not bind to default resource pool for "
93
"project \"%s\""), proj.pj_name);
94
break;
95
}
96
break;
97
default:
98
if (errval <= 0) {
99
sudo_warnx(U_("setproject failed for project \"%s\""), proj.pj_name);
100
} else {
101
sudo_warnx(U_("warning, resource control assignment failed for "
102
"project \"%s\""), proj.pj_name);
103
}
104
break;
105
}
106
} else {
107
sudo_warn("getdefaultproj");
108
}
109
endprojent();
110
debug_return;
111
}
112
#endif /* HAVE_PROJECT_H */
113
114