|
Michael Thomas |
cc5a4cd |
diff -Naur --exclude '*.swp' bsd-games-2.17/phantasia/gamesupport.c bsd-games-2.17.new/phantasia/gamesupport.c
|
|
Michael Thomas |
cc5a4cd |
--- bsd-games-2.17/phantasia/gamesupport.c 2006-04-27 22:51:04.000000000 -0700
|
|
Michael Thomas |
cc5a4cd |
+++ bsd-games-2.17.new/phantasia/gamesupport.c 2006-04-27 21:01:11.000000000 -0700
|
|
Michael Thomas |
cc5a4cd |
@@ -518,7 +518,10 @@
|
|
Michael Thomas |
cc5a4cd |
long loc = 0L; /* location in scoreboard file */
|
|
Michael Thomas |
cc5a4cd |
bool found = FALSE; /* set if we found an entry for this login */
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
- if ((fp = fopen(_PATH_SCORE, "r+")) != NULL) {
|
|
Michael Thomas |
cc5a4cd |
+ SET_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
+ fp = fopen(_PATH_SCORE, "r+");
|
|
Michael Thomas |
cc5a4cd |
+ DROP_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
+ if (fp != NULL) {
|
|
Michael Thomas |
cc5a4cd |
while (fread((char *) &sbuf, SZ_SCORESTRUCT, 1, fp) == 1)
|
|
Michael Thomas |
cc5a4cd |
if (strcmp(Player.p_login, sbuf.sb_login) == 0) {
|
|
Michael Thomas |
cc5a4cd |
found = TRUE;
|
|
Michael Thomas |
cc5a4cd |
diff -Naur --exclude '*.swp' bsd-games-2.17/phantasia/interplayer.c bsd-games-2.17.new/phantasia/interplayer.c
|
|
Michael Thomas |
cc5a4cd |
--- bsd-games-2.17/phantasia/interplayer.c 2006-04-27 22:51:04.000000000 -0700
|
|
Michael Thomas |
cc5a4cd |
+++ bsd-games-2.17.new/phantasia/interplayer.c 2006-04-27 21:01:45.000000000 -0700
|
|
Michael Thomas |
cc5a4cd |
@@ -640,14 +640,18 @@
|
|
Michael Thomas |
cc5a4cd |
mvaddstr(4, 0, "You have become king!\n");
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
/* let everyone else know */
|
|
Michael Thomas |
cc5a4cd |
+ SET_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
fp = fopen(_PATH_MESS, "w");
|
|
Michael Thomas |
cc5a4cd |
+ DROP_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
fprintf(fp, "All hail the new king!");
|
|
Michael Thomas |
cc5a4cd |
fclose(fp);
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
/* clear all energy voids; retain location of holy grail */
|
|
Michael Thomas |
cc5a4cd |
fseek(Energyvoidfp, 0L, SEEK_SET);
|
|
Michael Thomas |
cc5a4cd |
fread((char *) &Enrgyvoid, SZ_VOIDSTRUCT, 1, Energyvoidfp);
|
|
Michael Thomas |
cc5a4cd |
+ SET_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
fp = fopen(_PATH_VOID, "w");
|
|
Michael Thomas |
cc5a4cd |
+ DROP_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
fwrite((char *) &Enrgyvoid, SZ_VOIDSTRUCT, 1, fp);
|
|
Michael Thomas |
cc5a4cd |
fclose(fp);
|
|
Michael Thomas |
cc5a4cd |
}
|
|
Michael Thomas |
cc5a4cd |
@@ -716,7 +720,10 @@
|
|
Michael Thomas |
cc5a4cd |
break;
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
case '5': /* collect accumulated taxes */
|
|
Michael Thomas |
cc5a4cd |
- if ((fp = fopen(_PATH_GOLD, "r+")) != NULL)
|
|
Michael Thomas |
cc5a4cd |
+ SET_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
+ fp = fopen(_PATH_GOLD, "r+");
|
|
Michael Thomas |
cc5a4cd |
+ DROP_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
+ if (fp != NULL)
|
|
Michael Thomas |
cc5a4cd |
/* collect taxes */
|
|
Michael Thomas |
cc5a4cd |
{
|
|
Michael Thomas |
cc5a4cd |
fread((char *) &temp1, sizeof(double), 1, fp);
|
|
Michael Thomas |
cc5a4cd |
diff -Naur --exclude '*.swp' bsd-games-2.17/phantasia/macros.h bsd-games-2.17.new/phantasia/macros.h
|
|
Michael Thomas |
cc5a4cd |
--- bsd-games-2.17/phantasia/macros.h 1997-07-17 09:42:20.000000000 -0700
|
|
Michael Thomas |
cc5a4cd |
+++ bsd-games-2.17.new/phantasia/macros.h 2006-04-27 22:49:40.000000000 -0700
|
|
Michael Thomas |
cc5a4cd |
@@ -4,6 +4,10 @@
|
|
Michael Thomas |
cc5a4cd |
* macros.h - macro definitions for Phantasia
|
|
Michael Thomas |
cc5a4cd |
*/
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
+/* setgid macros */
|
|
Michael Thomas |
cc5a4cd |
+#define SET_PRIV_GID setgid(phant_gid)
|
|
Michael Thomas |
cc5a4cd |
+#define DROP_PRIV_GID setgid(getgid())
|
|
Michael Thomas |
cc5a4cd |
+
|
|
Michael Thomas |
cc5a4cd |
#define ROLL(BASE,INTERVAL) floor((BASE) + (INTERVAL) * drandom())
|
|
Michael Thomas |
cc5a4cd |
#define SGN(X) ((X) < 0 ? -1 : 1)
|
|
Michael Thomas |
cc5a4cd |
#define CIRCLE(X, Y) floor(distance(X, 0.0, Y, 0.0) / 125.0 + 1)
|
|
Michael Thomas |
cc5a4cd |
diff -Naur --exclude '*.swp' bsd-games-2.17/phantasia/main.c bsd-games-2.17.new/phantasia/main.c
|
|
Michael Thomas |
cc5a4cd |
--- bsd-games-2.17/phantasia/main.c 2006-04-27 22:51:04.000000000 -0700
|
|
Michael Thomas |
cc5a4cd |
+++ bsd-games-2.17.new/phantasia/main.c 2006-04-27 21:00:46.000000000 -0700
|
|
Michael Thomas |
cc5a4cd |
@@ -61,6 +61,9 @@
|
|
Michael Thomas |
cc5a4cd |
#undef bool
|
|
Michael Thomas |
cc5a4cd |
#include <curses.h>
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
+
|
|
Michael Thomas |
cc5a4cd |
+gid_t phant_gid;
|
|
Michael Thomas |
cc5a4cd |
+
|
|
Michael Thomas |
cc5a4cd |
int main(int, char **);
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
int
|
|
Michael Thomas |
cc5a4cd |
@@ -74,6 +77,9 @@
|
|
Michael Thomas |
cc5a4cd |
time_t seconds; /* for time of day */
|
|
Michael Thomas |
cc5a4cd |
double dtemp; /* for temporary calculations */
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
+ phant_gid = getegid();
|
|
Michael Thomas |
cc5a4cd |
+ DROP_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
+
|
|
Michael Thomas |
cc5a4cd |
initialstate(); /* init globals */
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
/* process arguments */
|
|
Michael Thomas |
cc5a4cd |
@@ -290,22 +296,28 @@
|
|
Michael Thomas |
cc5a4cd |
Login = getpwuid(getuid())->pw_name;
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
/* open some files */
|
|
Michael Thomas |
cc5a4cd |
+ SET_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
if ((Playersfp = fopen(_PATH_PEOPLE, "r+")) == NULL)
|
|
Michael Thomas |
cc5a4cd |
error(_PATH_PEOPLE);
|
|
Michael Thomas |
cc5a4cd |
+ DROP_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
/* NOTREACHED */
|
|
Michael Thomas |
cc5a4cd |
if (fileno(Playersfp) < 3)
|
|
Michael Thomas |
cc5a4cd |
exit(1);
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
+ SET_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
if ((Monstfp = fopen(_PATH_MONST, "r+")) == NULL)
|
|
Michael Thomas |
cc5a4cd |
error(_PATH_MONST);
|
|
Michael Thomas |
cc5a4cd |
+ DROP_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
/* NOTREACHED */
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
if ((Messagefp = fopen(_PATH_MESS, "r")) == NULL)
|
|
Michael Thomas |
cc5a4cd |
error(_PATH_MESS);
|
|
Michael Thomas |
cc5a4cd |
/* NOTREACHED */
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
+ SET_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
if ((Energyvoidfp = fopen(_PATH_VOID, "r+")) == NULL)
|
|
Michael Thomas |
cc5a4cd |
error(_PATH_VOID);
|
|
Michael Thomas |
cc5a4cd |
+ DROP_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
if (fstat(fileno(Energyvoidfp), &sb) == -1)
|
|
Michael Thomas |
cc5a4cd |
error("stat");
|
|
Michael Thomas |
cc5a4cd |
if (sb.st_size == 0) {
|
|
Michael Thomas |
cc5a4cd |
@@ -508,7 +520,9 @@
|
|
Michael Thomas |
cc5a4cd |
getstring(Databuf, SZ_DATABUF);
|
|
Michael Thomas |
cc5a4cd |
/* we open the file for writing to erase any data which is
|
|
Michael Thomas |
cc5a4cd |
* already there */
|
|
Michael Thomas |
cc5a4cd |
+ SET_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
fp = fopen(_PATH_MESS, "w");
|
|
Michael Thomas |
cc5a4cd |
+ DROP_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
if (Databuf[0] != '\0')
|
|
Michael Thomas |
cc5a4cd |
fprintf(fp, "%s: %s", Player.p_name, Databuf);
|
|
Michael Thomas |
cc5a4cd |
fclose(fp);
|
|
Michael Thomas |
cc5a4cd |
diff -Naur --exclude '*.swp' bsd-games-2.17/phantasia/misc.c bsd-games-2.17.new/phantasia/misc.c
|
|
Michael Thomas |
cc5a4cd |
--- bsd-games-2.17/phantasia/misc.c 2006-04-27 22:51:04.000000000 -0700
|
|
Michael Thomas |
cc5a4cd |
+++ bsd-games-2.17.new/phantasia/misc.c 2006-04-27 21:02:34.000000000 -0700
|
|
Michael Thomas |
cc5a4cd |
@@ -651,14 +651,18 @@
|
|
Michael Thomas |
cc5a4cd |
enterscore(); /* update score board */
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
/* put info in last dead file */
|
|
Michael Thomas |
cc5a4cd |
+ SET_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
fp = fopen(_PATH_LASTDEAD, "w");
|
|
Michael Thomas |
cc5a4cd |
+ DROP_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
fprintf(fp, "%s (%s, run by %s, level %.0f, killed by %s)",
|
|
Michael Thomas |
cc5a4cd |
Player.p_name, descrtype(&Player, TRUE),
|
|
Michael Thomas |
cc5a4cd |
Player.p_login, Player.p_level, how);
|
|
Michael Thomas |
cc5a4cd |
fclose(fp);
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
/* let other players know */
|
|
Michael Thomas |
cc5a4cd |
+ SET_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
fp = fopen(_PATH_MESS, "w");
|
|
Michael Thomas |
cc5a4cd |
+ DROP_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
fprintf(fp, "%s was killed by %s.", Player.p_name, how);
|
|
Michael Thomas |
cc5a4cd |
fclose(fp);
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
@@ -1060,7 +1064,10 @@
|
|
Michael Thomas |
cc5a4cd |
}
|
|
Michael Thomas |
cc5a4cd |
Player.p_gold -= taxes;
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
- if ((fp = fopen(_PATH_GOLD, "r+")) != NULL)
|
|
Michael Thomas |
cc5a4cd |
+ SET_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
+ fp = fopen(_PATH_GOLD, "r+");
|
|
Michael Thomas |
cc5a4cd |
+ DROP_PRIV_GID;
|
|
Michael Thomas |
cc5a4cd |
+ if (fp != NULL)
|
|
Michael Thomas |
cc5a4cd |
/* update taxes */
|
|
Michael Thomas |
cc5a4cd |
{
|
|
Michael Thomas |
cc5a4cd |
dtemp = 0.0;
|
|
Michael Thomas |
cc5a4cd |
diff -Naur --exclude '*.swp' bsd-games-2.17/phantasia/phantglobs.h bsd-games-2.17.new/phantasia/phantglobs.h
|
|
Michael Thomas |
cc5a4cd |
--- bsd-games-2.17/phantasia/phantglobs.h 2006-04-27 22:51:04.000000000 -0700
|
|
Michael Thomas |
cc5a4cd |
+++ bsd-games-2.17.new/phantasia/phantglobs.h 2006-04-27 20:25:34.000000000 -0700
|
|
Michael Thomas |
cc5a4cd |
@@ -4,6 +4,7 @@
|
|
Michael Thomas |
cc5a4cd |
* phantglobs.h - global declarations for Phantasia
|
|
Michael Thomas |
cc5a4cd |
*/
|
|
Michael Thomas |
cc5a4cd |
|
|
Michael Thomas |
cc5a4cd |
+extern gid_t phant_gid; /* gid under which the game runs */
|
|
Michael Thomas |
cc5a4cd |
extern double Circle; /* which circle player is in */
|
|
Michael Thomas |
cc5a4cd |
extern double Shield; /* force field thrown up in monster battle */
|
|
Michael Thomas |
cc5a4cd |
|