From 2e4f161e40a5b0998ee7a7936c89275c0a6e7b13 Mon Sep 17 00:00:00 2001 From: "John \"Elwin\" Edwards" Date: Sat, 1 Aug 2015 16:23:24 -0400 Subject: [PATCH] srogue: improve privilege handling. Setgid privileges are now dropped when not required. restore() is now less complex. --- srogue/main.c | 2 +- srogue/save.c | 46 ++-------------------------------------------- 2 files changed, 3 insertions(+), 45 deletions(-) diff --git a/srogue/main.c b/srogue/main.c index daf235f..a3d942f 100644 --- a/srogue/main.c +++ b/srogue/main.c @@ -121,7 +121,7 @@ char **envp; #endif if (!use_savedir) - md_droppriv(); + md_normaluser(); /* get home and options from environment */ diff --git a/srogue/save.c b/srogue/save.c index ce82666..e758cdc 100644 --- a/srogue/save.c +++ b/srogue/save.c @@ -131,17 +131,13 @@ game_err(int a) /* * dosave: - * Set UID back to user and save the game + * Save the game. UID/GID no longer get reset here. */ dosave() { FILE *savef; ignore(); - if (!use_savedir) - { - md_resetpriv(); - } umask(022); if (file_name[0] != '\0') { @@ -287,50 +283,12 @@ char *file, **envp; #endif if (!wizard) { -#if defined(HAVE_WORKING_FORK) - endwin(); - if (!use_savedir) - { - while((pid = fork()) < 0) - sleep(1); - - /* set id to unlink file */ - if(pid == 0) - { - md_resetpriv(); - unlink(file); - exit(0); - } - /* wait for unlink to finish */ - else - { - while(wait(&ret_status) != pid) - continue; - if (ret_status < 0) - { - printf("Cannot unlink file\n"); - return FALSE; - } - } - } - else - { - /* Don't drop privileges, they're needed - * for the unlink. */ - if (unlink(file) < 0) - { - printf("Cannot unlink file\n"); - return FALSE; - } - } -#else if (unlink(file) < 0) { + endwin(); printf("Cannot unlink file\n"); return FALSE; } -#endif - } if (him->s_hpt <= 0) {