OSDN Git Service

Merge pull request #3569 from sikabane-works/release/3.0.0.88-alpha
[hengbandforosx/hengbandosx.git] / src / io / uid-checker.cpp
1 #include "io/uid-checker.h"
2 #include "system/angband.h"
3 #if defined(SET_UID) && defined(SAFE_SETUID) && defined(SAFE_SETUID_POSIX)
4 #include "main-unix/unix-user-ids.h"
5 #endif
6
7 /*!
8  * @brief ファイルのドロップパーミッションチェック / Check drop permissions
9  */
10 void safe_setuid_drop()
11 {
12 #if defined(SET_UID) && defined(SAFE_SETUID)
13 #ifdef SAFE_SETUID_POSIX
14     if (auto ret = setuid(getuid()); ret != 0) {
15         auto msg = _("setuid(): 正しく許可が取れません! エラーコード:%d", "setuid(): cannot set permissions correctly! Error code: %d");
16         quit_fmt(msg, ret);
17     }
18
19     if (auto ret = setgid(getgid()); ret != 0) {
20         auto msg = _("setgid(): 正しく許可が取れません! エラーコード:%d", "setgid(): cannot set permissions correctly! Error code: %d");
21         quit_fmt(msg, ret);
22     }
23 #else
24     if (auto ret = setreuid(geteuid(), getuid()); ret != 0) {
25         auto msg = _("setreuid(): 正しく許可が取れません! エラーコード:%d", "setreuid(): cannot set permissions correctly! Error code: %d");
26         quit_fmt(msg, ret);
27     }
28
29     if (auto ret = setregid(getegid(), getgid()); ret != 0) {
30         auto msg = _("setregid(): 正しく許可が取れません! エラーコード:%d", "setregid(): cannot set permissions correctly! Error code: %d");
31         quit_fmt(msg, ret);
32     }
33 #endif
34 #endif
35 }
36
37 /*!
38  * @brief ファイルのグラブパーミッションチェック / Check grab permissions
39  */
40 void safe_setuid_grab()
41 {
42 #if defined(SET_UID) && defined(SAFE_SETUID)
43 #ifdef SAFE_SETUID_POSIX
44     auto &ids = UnixUserIds::get_instance();
45     if (auto ret = setuid(ids.get_effective_user_id()); ret != 0) {
46         auto msg = _("setuid(): 正しく許可が取れません! エラーコード:%d", "setuid(): cannot set permissions correctly! Error code: %d");
47         quit_fmt(msg, ret);
48     }
49
50     if (auto ret = setgid(ids.get_effective_group_id()); ret != 0) {
51         auto msg = _("setgid(): 正しく許可が取れません! エラーコード:%d", "setgid(): cannot set permissions correctly! Error code: %d");
52         quit_fmt(msg, ret);
53     }
54 #else
55     if (auto ret = setreuid(geteuid(), getuid()); ret != 0) {
56         auto msg = _("setreuid(): 正しく許可が取れません! エラーコード:%d", "setreuid(): cannot set permissions correctly! Error code: %d");
57         quit_fmt(msg, ret);
58     }
59
60     if (auto ret = setregid(getegid(), getgid()); ret != 0) {
61         auto msg = _("setregid(): 正しく許可が取れません! エラーコード:%d", "setregid(): cannot set permissions correctly! Error code: %d");
62         quit_fmt(msg, ret);
63     }
64 #endif
65 #else
66 #endif
67 }