From b511081509d72961ed6a0b67f2748e99eadb280a Mon Sep 17 00:00:00 2001 From: Hourier Date: Mon, 24 Feb 2020 00:36:23 +0900 Subject: [PATCH] =?utf8?q?[Refactor]=20#39962=20files.c=20=E3=81=8B?= =?utf8?q?=E3=82=89uid-checker.c/h=20=E3=82=92=E5=88=86=E9=9B=A2=20/=20Sep?= =?utf8?q?arated=20uid-checker.c/h=20from=20files.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Hengband_vcs2017/Hengband/Hengband.vcxproj | 2 + Hengband_vcs2017/Hengband/Hengband.vcxproj.filters | 6 ++ src/core.c | 1 + src/files.c | 67 +------------------- src/files.h | 3 - src/floor-save.c | 1 + src/init.c | 1 + src/load.c | 1 + src/main.c | 1 + src/save.c | 1 + src/scores.c | 1 + src/uid-checker.c | 71 ++++++++++++++++++++++ src/uid-checker.h | 4 ++ 13 files changed, 91 insertions(+), 69 deletions(-) create mode 100644 src/uid-checker.c create mode 100644 src/uid-checker.h diff --git a/Hengband_vcs2017/Hengband/Hengband.vcxproj b/Hengband_vcs2017/Hengband/Hengband.vcxproj index 9de95fb99..b2fa638a4 100644 --- a/Hengband_vcs2017/Hengband/Hengband.vcxproj +++ b/Hengband_vcs2017/Hengband/Hengband.vcxproj @@ -278,6 +278,7 @@ + @@ -322,6 +323,7 @@ + diff --git a/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters b/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters index 721d565f2..67f73e6a3 100644 --- a/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters +++ b/Hengband_vcs2017/Hengband/Hengband.vcxproj.filters @@ -415,6 +415,9 @@ view + + io + @@ -812,6 +815,9 @@ view + + io + diff --git a/src/core.c b/src/core.c index 7415fad35..a9b57c66f 100644 --- a/src/core.c +++ b/src/core.c @@ -83,6 +83,7 @@ #include "view-mainwindow.h" #include "dungeon-file.h" +#include "uid-checker.h" #include "files.h" #include "scores.h" #include "autopick.h" diff --git a/src/files.c b/src/files.c index 49368c9b5..1a1b33644 100644 --- a/src/files.c +++ b/src/files.c @@ -17,6 +17,7 @@ #include "signal-handlers.h" #include "view/display-util.h" #include "view/status-first-page.h" +#include "uid-checker.h" #include "util.h" #include "files.h" #include "core.h" @@ -90,72 +91,6 @@ concptr ANGBAND_DIR_XTRA; //!< Various extra files (binary) These files are rare char savefile[1024]; char savefile_base[40]; - /*! - * @brief ファイルのドロップパーミッションチェック / Hack -- drop permissions - */ -void safe_setuid_drop(void) -{ - -#ifdef SET_UID -# ifdef SAFE_SETUID -# ifdef SAFE_SETUID_POSIX - - if (setuid(getuid()) != 0) - { - quit(_("setuid(): 正しく許可が取れません!", "setuid(): cannot set permissions correctly!")); - } - if (setgid(getgid()) != 0) - { - quit(_("setgid(): 正しく許可が取れません!", "setgid(): cannot set permissions correctly!")); - } -# else - if (setreuid(geteuid(), getuid()) != 0) - { - quit(_("setreuid(): 正しく許可が取れません!", "setreuid(): cannot set permissions correctly!")); - } - if (setregid(getegid(), getgid()) != 0) - { - quit(_("setregid(): 正しく許可が取れません!", "setregid(): cannot set permissions correctly!")); - } -# endif -# endif -#endif - -} - - -/*! - * @brief ファイルのグラブパーミッションチェック / Hack -- grab permissions - */ -void safe_setuid_grab(void) -{ -#ifdef SET_UID -# ifdef SAFE_SETUID -# ifdef SAFE_SETUID_POSIX - - if (setuid(p_ptr->player_egid) != 0) - { - quit(_("setuid(): 正しく許可が取れません!", "setuid(): cannot set permissions correctly!")); - } - if (setgid(p_ptr->player_egid) != 0) - { - quit(_("setgid(): 正しく許可が取れません!", "setgid(): cannot set permissions correctly!")); - } -# else - if (setreuid(geteuid(), getuid()) != 0) - { - quit(_("setreuid(): 正しく許可が取れません!", "setreuid(): cannot set permissions correctly!")); - } - if (setregid(getegid(), getgid()) != 0) - { - quit(_("setregid(): 正しく許可が取れません!", "setregid(): cannot set permissions correctly!")); - } -# endif /* SAFE_SETUID_POSIX */ -# endif /* SAFE_SETUID */ -#endif /* SET_UID */ -} - - /*! * @brief 各種データテキストをトークン単位に分解する / Extract the first few "tokens" from a buffer * @param buf データテキストの参照ポインタ diff --git a/src/files.h b/src/files.h index b4173db8f..d4b68c4b5 100644 --- a/src/files.h +++ b/src/files.h @@ -19,9 +19,6 @@ extern concptr ANGBAND_DIR_SAVE; extern concptr ANGBAND_DIR_USER; extern concptr ANGBAND_DIR_XTRA; -/* files.c */ -extern void safe_setuid_drop(void); -extern void safe_setuid_grab(void); extern s16b tokenize(char *buf, s16b num, char **tokens, BIT_FLAGS mode); extern void display_player(player_type *creature_ptr, int mode); extern errr make_character_dump(player_type *creature_ptr, FILE *fff); diff --git a/src/floor-save.c b/src/floor-save.c index 0203766c0..ae30a0570 100644 --- a/src/floor-save.c +++ b/src/floor-save.c @@ -33,6 +33,7 @@ #include "object-hook.h" #include "cmd-pet.h" #include "cmd-basic.h" +#include "uid-checker.h" #include "files.h" #include "player-effects.h" #include "player-class.h" diff --git a/src/init.c b/src/init.c index 7aa1f6163..286499c98 100644 --- a/src/init.c +++ b/src/init.c @@ -32,6 +32,7 @@ #include "angband.h" #include "util.h" +#include "uid-checker.h" #include "files.h" #include "core.h" #include "term.h" diff --git a/src/load.c b/src/load.c index 0117054e9..ba9274583 100644 --- a/src/load.c +++ b/src/load.c @@ -70,6 +70,7 @@ #include "cmd-pet.h" #include "dungeon-file.h" +#include "uid-checker.h" #include "files.h" #include "player-skill.h" #include "player-class.h" diff --git a/src/main.c b/src/main.c index 2aa07379b..d013b02b5 100644 --- a/src/main.c +++ b/src/main.c @@ -10,6 +10,7 @@ #include "angband.h" #include "core.h" +#include "uid-checker.h" #include "files.h" #include "inet.h" #include "init.h" diff --git a/src/save.c b/src/save.c index 4e6d8ce15..50d89f7df 100644 --- a/src/save.c +++ b/src/save.c @@ -28,6 +28,7 @@ #include "floor-events.h" #include "floor-save.h" #include "floor-town.h" +#include "uid-checker.h" #include "files.h" #include "world.h" #include "objectkind.h" diff --git a/src/scores.c b/src/scores.c index d083be9c0..c532a2a85 100644 --- a/src/scores.c +++ b/src/scores.c @@ -22,6 +22,7 @@ #include "player-class.h" #include "player-personality.h" #include "player-sex.h" +#include "uid-checker.h" #include "files.h" #include "scores.h" #include "floor.h" diff --git a/src/uid-checker.c b/src/uid-checker.c new file mode 100644 index 000000000..9f3529239 --- /dev/null +++ b/src/uid-checker.c @@ -0,0 +1,71 @@ +#include "uid-checker.h" +#ifdef SET_UID +# ifdef SAFE_SETUID +# ifdef SAFE_SETUID_POSIX +# include "util.h" +# endif +# endif +#endif + +/*! + * @brief ƒtƒ@ƒCƒ‹‚̃hƒƒbƒvƒp[ƒ~ƒbƒVƒ‡ƒ“ƒ`ƒFƒbƒN / Hack -- drop permissions + */ +void safe_setuid_drop(void) +{ +#ifdef SET_UID +# ifdef SAFE_SETUID +# ifdef SAFE_SETUID_POSIX + + if (setuid(getuid()) != 0) + { + quit(_("setuid(): ³‚µ‚­‹–‰Â‚ªŽæ‚ê‚Ü‚¹‚ñI", "setuid(): cannot set permissions correctly!")); + } + if (setgid(getgid()) != 0) + { + quit(_("setgid(): ³‚µ‚­‹–‰Â‚ªŽæ‚ê‚Ü‚¹‚ñI", "setgid(): cannot set permissions correctly!")); + } +# else + if (setreuid(geteuid(), getuid()) != 0) + { + quit(_("setreuid(): ³‚µ‚­‹–‰Â‚ªŽæ‚ê‚Ü‚¹‚ñI", "setreuid(): cannot set permissions correctly!")); + } + if (setregid(getegid(), getgid()) != 0) + { + quit(_("setregid(): ³‚µ‚­‹–‰Â‚ªŽæ‚ê‚Ü‚¹‚ñI", "setregid(): cannot set permissions correctly!")); + } +# endif +# endif +#endif +} + + +/*! + * @brief ƒtƒ@ƒCƒ‹‚̃Oƒ‰ƒuƒp[ƒ~ƒbƒVƒ‡ƒ“ƒ`ƒFƒbƒN / Hack -- grab permissions + */ +void safe_setuid_grab(void) +{ +#ifdef SET_UID +# ifdef SAFE_SETUID +# ifdef SAFE_SETUID_POSIX + + if (setuid(p_ptr->player_egid) != 0) + { + quit(_("setuid(): ³‚µ‚­‹–‰Â‚ªŽæ‚ê‚Ü‚¹‚ñI", "setuid(): cannot set permissions correctly!")); + } + if (setgid(p_ptr->player_egid) != 0) + { + quit(_("setgid(): ³‚µ‚­‹–‰Â‚ªŽæ‚ê‚Ü‚¹‚ñI", "setgid(): cannot set permissions correctly!")); + } +# else + if (setreuid(geteuid(), getuid()) != 0) + { + quit(_("setreuid(): ³‚µ‚­‹–‰Â‚ªŽæ‚ê‚Ü‚¹‚ñI", "setreuid(): cannot set permissions correctly!")); + } + if (setregid(getegid(), getgid()) != 0) + { + quit(_("setregid(): ³‚µ‚­‹–‰Â‚ªŽæ‚ê‚Ü‚¹‚ñI", "setregid(): cannot set permissions correctly!")); + } +# endif +# endif +#endif +} diff --git a/src/uid-checker.h b/src/uid-checker.h new file mode 100644 index 000000000..c0df46822 --- /dev/null +++ b/src/uid-checker.h @@ -0,0 +1,4 @@ +#pragma once + +extern void safe_setuid_drop(void); +extern void safe_setuid_grab(void); -- 2.11.0