srogue: add and use more md_* portable functions.
Privileges and memory usage checks are now more portable.
This commit is contained in:
parent
791df4324f
commit
b9cc9cf3a7
6 changed files with 74 additions and 22 deletions
|
|
@ -173,5 +173,5 @@ do_fuses()
|
|||
activity()
|
||||
{
|
||||
msg("Daemons = %d : Memory Items = %d : Memory Used = %d",
|
||||
demoncnt,total,sbrk(0));
|
||||
demoncnt,total,md_memused());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ int size;
|
|||
register char *space = ALLOC(size);
|
||||
|
||||
if (space == NULL) {
|
||||
sprintf(prbuf,"Rogue ran out of memory (%d).",sbrk(0));
|
||||
sprintf(prbuf,"Rogue ran out of memory (%d).", md_memused());
|
||||
fatal(prbuf);
|
||||
}
|
||||
total++;
|
||||
|
|
|
|||
|
|
@ -29,8 +29,6 @@
|
|||
#endif
|
||||
|
||||
#ifdef BSD
|
||||
#define srand48(seed) srandom(seed)
|
||||
#define lrand48() random()
|
||||
#include <sys/time.h>
|
||||
#endif
|
||||
|
||||
|
|
@ -57,13 +55,8 @@ char **envp;
|
|||
if (homedir == NULL)
|
||||
homedir = "";
|
||||
|
||||
playuid = getuid();
|
||||
|
||||
if (setuid(playuid) < 0) {
|
||||
printf("Cannot change to effective uid: %d\n", playuid);
|
||||
exit(1);
|
||||
}
|
||||
playgid = getgid();
|
||||
playuid = md_getuid();
|
||||
playgid = md_getgid();
|
||||
|
||||
/* check for print-score option */
|
||||
#ifdef SCOREFILE
|
||||
|
|
@ -121,6 +114,9 @@ char **envp;
|
|||
}
|
||||
#endif
|
||||
|
||||
if (!use_savedir)
|
||||
md_droppriv();
|
||||
|
||||
/* get home and options from environment */
|
||||
|
||||
if ((env = getenv("HOME")) != NULL)
|
||||
|
|
@ -177,7 +173,7 @@ char **envp;
|
|||
|
||||
fflush(stdout);
|
||||
seed = dnum;
|
||||
srand48(seed); /* init rnd number gen */
|
||||
srandom(seed); /* init rnd number gen */
|
||||
|
||||
md_onsignal_exit(); /* just in case */
|
||||
|
||||
|
|
@ -358,7 +354,7 @@ int range;
|
|||
if (range == 0)
|
||||
wh = 0;
|
||||
else {
|
||||
wh = lrand48() % range;
|
||||
wh = random() % range;
|
||||
wh &= 0x7FFFFFFF;
|
||||
}
|
||||
return wh;
|
||||
|
|
|
|||
|
|
@ -413,6 +413,16 @@ md_getuid(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
gid_t
|
||||
md_getgid(void)
|
||||
{
|
||||
#ifdef HAVE_GETGID
|
||||
return( getgid() );
|
||||
#else
|
||||
return(42);
|
||||
#endif
|
||||
}
|
||||
|
||||
pid_t
|
||||
md_getpid(void)
|
||||
{
|
||||
|
|
@ -1509,3 +1519,51 @@ md_stop_checkout_timer(void)
|
|||
|
||||
#endif
|
||||
|
||||
long
|
||||
md_memused(void)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
MEMORYSTATUS stat;
|
||||
|
||||
GlobalMemoryStatus(&stat);
|
||||
|
||||
return((long)stat.dwTotalPageFile);
|
||||
#else
|
||||
return( (long)sbrk(0) );
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
md_droppriv(void)
|
||||
{
|
||||
#if defined(HAVE_GETUID)
|
||||
uid_t realuid = getuid();
|
||||
|
||||
#if defined(HAVE_SETRESUID)
|
||||
if (setresuid(-1, realuid, realuid) != 0) {
|
||||
#elif defined (HAVE_SETREUID)
|
||||
if (setreuid(realuid, realuid) != 0) {
|
||||
#elif defined (HAVE_SETUID)
|
||||
if (setuid(realuid) != 0) {
|
||||
#else
|
||||
if (0) {
|
||||
#endif
|
||||
printf("Cannot change to effective uid: %d\n", realuid);
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
extern uid_t playuid;
|
||||
extern gid_t playgid;
|
||||
|
||||
void
|
||||
md_resetpriv(void)
|
||||
{
|
||||
#if defined (HAVE_SETUID)
|
||||
setuid(playuid);
|
||||
#endif
|
||||
#if defined (HAVE_SETGID)
|
||||
setgid(playgid);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ int md_erasechar(void);
|
|||
char *md_gethomedir(void);
|
||||
char *md_getusername(void);
|
||||
uid_t md_getuid(void);
|
||||
gid_t md_getgid(void);
|
||||
char *md_getpass(char *prompt);
|
||||
pid_t md_getpid(void);
|
||||
char *md_getrealname(uid_t uid);
|
||||
|
|
@ -67,6 +68,9 @@ void md_onsignal_autosave(void);
|
|||
void md_onsignal_exit(void);
|
||||
void md_onsignal_default(void);
|
||||
int md_issymlink(char *sp);
|
||||
long md_memused(void);
|
||||
void md_droppriv(void);
|
||||
void md_resetpriv(void);
|
||||
char *xcrypt(const char *key, const char *setting);
|
||||
|
||||
#define reg register /* register abbr. */
|
||||
|
|
|
|||
|
|
@ -26,10 +26,6 @@
|
|||
#include "rogue.h"
|
||||
#include "rogue.ext"
|
||||
|
||||
#ifdef BSD
|
||||
#define srand48(seed) srandom(seed)
|
||||
#endif
|
||||
|
||||
EXTCHAR version[];
|
||||
EXTCHAR *ctime();
|
||||
|
||||
|
|
@ -144,8 +140,7 @@ dosave()
|
|||
ignore();
|
||||
if (!use_savedir)
|
||||
{
|
||||
setuid(playuid);
|
||||
setgid(playgid);
|
||||
md_resetpriv();
|
||||
}
|
||||
umask(022);
|
||||
|
||||
|
|
@ -302,8 +297,7 @@ char *file, **envp;
|
|||
/* set id to unlink file */
|
||||
if(pid == 0)
|
||||
{
|
||||
setuid(playuid);
|
||||
setgid(playgid);
|
||||
md_resetpriv();
|
||||
unlink(file);
|
||||
exit(0);
|
||||
}
|
||||
|
|
@ -350,6 +344,6 @@ char *file, **envp;
|
|||
strcpy(file_name, file);
|
||||
setup();
|
||||
restscr(cw);
|
||||
srand48(getpid());
|
||||
srandom(getpid());
|
||||
playit();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue