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()
|
activity()
|
||||||
{
|
{
|
||||||
msg("Daemons = %d : Memory Items = %d : Memory Used = %d",
|
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);
|
register char *space = ALLOC(size);
|
||||||
|
|
||||||
if (space == NULL) {
|
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);
|
fatal(prbuf);
|
||||||
}
|
}
|
||||||
total++;
|
total++;
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,6 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef BSD
|
#ifdef BSD
|
||||||
#define srand48(seed) srandom(seed)
|
|
||||||
#define lrand48() random()
|
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
@ -57,13 +55,8 @@ char **envp;
|
||||||
if (homedir == NULL)
|
if (homedir == NULL)
|
||||||
homedir = "";
|
homedir = "";
|
||||||
|
|
||||||
playuid = getuid();
|
playuid = md_getuid();
|
||||||
|
playgid = md_getgid();
|
||||||
if (setuid(playuid) < 0) {
|
|
||||||
printf("Cannot change to effective uid: %d\n", playuid);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
playgid = getgid();
|
|
||||||
|
|
||||||
/* check for print-score option */
|
/* check for print-score option */
|
||||||
#ifdef SCOREFILE
|
#ifdef SCOREFILE
|
||||||
|
|
@ -121,6 +114,9 @@ char **envp;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (!use_savedir)
|
||||||
|
md_droppriv();
|
||||||
|
|
||||||
/* get home and options from environment */
|
/* get home and options from environment */
|
||||||
|
|
||||||
if ((env = getenv("HOME")) != NULL)
|
if ((env = getenv("HOME")) != NULL)
|
||||||
|
|
@ -177,7 +173,7 @@ char **envp;
|
||||||
|
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
seed = dnum;
|
seed = dnum;
|
||||||
srand48(seed); /* init rnd number gen */
|
srandom(seed); /* init rnd number gen */
|
||||||
|
|
||||||
md_onsignal_exit(); /* just in case */
|
md_onsignal_exit(); /* just in case */
|
||||||
|
|
||||||
|
|
@ -358,7 +354,7 @@ int range;
|
||||||
if (range == 0)
|
if (range == 0)
|
||||||
wh = 0;
|
wh = 0;
|
||||||
else {
|
else {
|
||||||
wh = lrand48() % range;
|
wh = random() % range;
|
||||||
wh &= 0x7FFFFFFF;
|
wh &= 0x7FFFFFFF;
|
||||||
}
|
}
|
||||||
return wh;
|
return wh;
|
||||||
|
|
|
||||||
|
|
@ -413,6 +413,16 @@ md_getuid(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gid_t
|
||||||
|
md_getgid(void)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_GETGID
|
||||||
|
return( getgid() );
|
||||||
|
#else
|
||||||
|
return(42);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
pid_t
|
pid_t
|
||||||
md_getpid(void)
|
md_getpid(void)
|
||||||
{
|
{
|
||||||
|
|
@ -1509,3 +1519,51 @@ md_stop_checkout_timer(void)
|
||||||
|
|
||||||
#endif
|
#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_gethomedir(void);
|
||||||
char *md_getusername(void);
|
char *md_getusername(void);
|
||||||
uid_t md_getuid(void);
|
uid_t md_getuid(void);
|
||||||
|
gid_t md_getgid(void);
|
||||||
char *md_getpass(char *prompt);
|
char *md_getpass(char *prompt);
|
||||||
pid_t md_getpid(void);
|
pid_t md_getpid(void);
|
||||||
char *md_getrealname(uid_t uid);
|
char *md_getrealname(uid_t uid);
|
||||||
|
|
@ -67,6 +68,9 @@ void md_onsignal_autosave(void);
|
||||||
void md_onsignal_exit(void);
|
void md_onsignal_exit(void);
|
||||||
void md_onsignal_default(void);
|
void md_onsignal_default(void);
|
||||||
int md_issymlink(char *sp);
|
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);
|
char *xcrypt(const char *key, const char *setting);
|
||||||
|
|
||||||
#define reg register /* register abbr. */
|
#define reg register /* register abbr. */
|
||||||
|
|
|
||||||
|
|
@ -26,10 +26,6 @@
|
||||||
#include "rogue.h"
|
#include "rogue.h"
|
||||||
#include "rogue.ext"
|
#include "rogue.ext"
|
||||||
|
|
||||||
#ifdef BSD
|
|
||||||
#define srand48(seed) srandom(seed)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
EXTCHAR version[];
|
EXTCHAR version[];
|
||||||
EXTCHAR *ctime();
|
EXTCHAR *ctime();
|
||||||
|
|
||||||
|
|
@ -144,8 +140,7 @@ dosave()
|
||||||
ignore();
|
ignore();
|
||||||
if (!use_savedir)
|
if (!use_savedir)
|
||||||
{
|
{
|
||||||
setuid(playuid);
|
md_resetpriv();
|
||||||
setgid(playgid);
|
|
||||||
}
|
}
|
||||||
umask(022);
|
umask(022);
|
||||||
|
|
||||||
|
|
@ -302,8 +297,7 @@ char *file, **envp;
|
||||||
/* set id to unlink file */
|
/* set id to unlink file */
|
||||||
if(pid == 0)
|
if(pid == 0)
|
||||||
{
|
{
|
||||||
setuid(playuid);
|
md_resetpriv();
|
||||||
setgid(playgid);
|
|
||||||
unlink(file);
|
unlink(file);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
@ -350,6 +344,6 @@ char *file, **envp;
|
||||||
strcpy(file_name, file);
|
strcpy(file_name, file);
|
||||||
setup();
|
setup();
|
||||||
restscr(cw);
|
restscr(cw);
|
||||||
srand48(getpid());
|
srandom(getpid());
|
||||||
playit();
|
playit();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue