diff options
author | Ted Unangst <tedu@cvs.openbsd.org> | 2015-11-24 02:51:51 +0000 |
---|---|---|
committer | Ted Unangst <tedu@cvs.openbsd.org> | 2015-11-24 02:51:51 +0000 |
commit | 1c6c7b3cd26aa93f4d699688b465f3b291b78127 (patch) | |
tree | 27497b58c3bfda49d2213f7c2e51d5fbe06d7b04 /games/canfield | |
parent | 8e349ca6007b9d66f862452358bc68c6d1edcf7b (diff) |
move score files to home directory and drop setgid. from Ricardo Mestre
Diffstat (limited to 'games/canfield')
-rw-r--r-- | games/canfield/canfield/Makefile | 11 | ||||
-rw-r--r-- | games/canfield/canfield/canfield.6 | 19 | ||||
-rw-r--r-- | games/canfield/canfield/canfield.c | 27 | ||||
-rw-r--r-- | games/canfield/canfield/pathnames.h | 36 | ||||
-rw-r--r-- | games/canfield/cfscores/Makefile | 3 | ||||
-rw-r--r-- | games/canfield/cfscores/cfscores.c | 53 |
6 files changed, 33 insertions, 116 deletions
diff --git a/games/canfield/canfield/Makefile b/games/canfield/canfield/Makefile index c848cb39caa..5d040573477 100644 --- a/games/canfield/canfield/Makefile +++ b/games/canfield/canfield/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.8 2002/05/31 03:46:35 pjanzen Exp $ +# $OpenBSD: Makefile,v 1.9 2015/11/24 02:51:50 tedu Exp $ # @(#)Makefile 8.1 (Berkeley) 5/31/93 PROG= canfield @@ -6,15 +6,6 @@ MAN= canfield.6 DPADD= ${LIBCURSES} LDADD= -lcurses MLINKS= canfield.6 cfscores.6 -BINMODE=2555 - -beforeinstall: - @if [ ! -f ${DESTDIR}/var/games/cfscores ]; then \ - ${INSTALL} ${INSTALL_COPY} -o ${BINOWN} -g ${BINGRP} -m 664 \ - /dev/null ${DESTDIR}/var/games/cfscores ; \ - else \ - true ; \ - fi .include "../../Makefile.inc" .include <bsd.prog.mk> diff --git a/games/canfield/canfield/canfield.6 b/games/canfield/canfield/canfield.6 index 7b98febaf24..5ba555ff0dc 100644 --- a/games/canfield/canfield/canfield.6 +++ b/games/canfield/canfield/canfield.6 @@ -1,4 +1,4 @@ -.\" $OpenBSD: canfield.6,v 1.9 2014/09/26 21:41:56 schwarze Exp $ +.\" $OpenBSD: canfield.6,v 1.10 2015/11/24 02:51:50 tedu Exp $ .\" $NetBSD: canfield.6,v 1.4 1995/03/21 15:08:30 cgd Exp $ .\" .\" Copyright (c) 1983, 1993 @@ -30,7 +30,7 @@ .\" .\" @(#)canfield.6 8.1 (Berkeley) 5/31/93 .\" -.Dd $Mdocdate: September 26 2014 $ +.Dd $Mdocdate: November 24 2015 $ .Dt CANFIELD 6 .Os .Sh NAME @@ -40,8 +40,6 @@ .Sh SYNOPSIS .Nm canfield .Nm cfscores -.Op Fl a -.Op Ar username .Sh DESCRIPTION If you have never played solitaire before, it is recommended that you consult a solitaire instruction book. @@ -101,23 +99,14 @@ that became visible since it was last turned on. Thus the maximum cost of information is $34. Playing time is charged at a rate of $1 per minute. .Pp -With no arguments, the program +The program .Nm cfscores prints out the current status of your canfield account. -If a -.Ar username -is specified, -it prints out the status of that user's canfield account. -If the -.Fl a -flag is specified, -it prints out the canfield accounts for all users that have -played the game since the database was set up. .Sh FILES .Bl -tag -width /usr/games/cfscores -compact .It Pa /usr/games/cfscores the score database printer -.It Pa /var/games/cfscores +.It Pa $HOME/cfscores the database of scores .El .Sh AUTHORS diff --git a/games/canfield/canfield/canfield.c b/games/canfield/canfield/canfield.c index 1daa6b1bcaf..fcd2186dbd8 100644 --- a/games/canfield/canfield/canfield.c +++ b/games/canfield/canfield/canfield.c @@ -1,4 +1,4 @@ -/* $OpenBSD: canfield.c,v 1.15 2015/11/05 23:16:44 tedu Exp $ */ +/* $OpenBSD: canfield.c,v 1.16 2015/11/24 02:51:50 tedu Exp $ */ /* $NetBSD: canfield.c,v 1.7 1995/05/13 07:28:35 jtc Exp $ */ /* @@ -46,6 +46,7 @@ #include <ctype.h> #include <curses.h> #include <fcntl.h> +#include <limits.h> #include <signal.h> #include <stdlib.h> #include <string.h> @@ -53,8 +54,6 @@ #include <time.h> #include <unistd.h> -#include "pathnames.h" - #define decksize 52 #define originrow 0 #define origincol 0 @@ -154,7 +153,6 @@ bool mtfdone, Cflag = FALSE; #define BETTINGBOX 2 #define NOBOX 3 int status = INSTRUCTIONBOX; -int uid; /* * Basic betting costs @@ -1379,7 +1377,7 @@ suspend(void) move(21, 0); refresh(); if (dbfd != -1) { - lseek(dbfd, uid * sizeof(struct betinfo), SEEK_SET); + lseek(dbfd, sizeof(struct betinfo), SEEK_SET); write(dbfd, (char *)&total, sizeof(total)); } kill(getpid(), SIGTSTP); @@ -1626,17 +1624,18 @@ void initall(void) { int i; + char scorepath[PATH_MAX]; time(&acctstart); initdeck(deck); - uid = getuid(); - if (uid < 0) - uid = 0; - dbfd = open(_PATH_SCORE, O_RDWR); - setegid(getgid()); + if (!getenv("HOME")) + return; + snprintf(scorepath, sizeof(scorepath), "%s/%s", getenv("HOME"), + "cfscores"); + dbfd = open(scorepath, O_RDWR | O_CREAT, 0644); if (dbfd < 0) return; - i = lseek(dbfd, uid * sizeof(struct betinfo), SEEK_SET); + i = lseek(dbfd, sizeof(struct betinfo), SEEK_SET); if (i < 0) { close(dbfd); dbfd = -1; @@ -1699,7 +1698,7 @@ cleanup(int dummy) status = NOBOX; updatebettinginfo(); if (dbfd != -1) { - lseek(dbfd, uid * sizeof(struct betinfo), SEEK_SET); + lseek(dbfd, sizeof(struct betinfo), SEEK_SET); write(dbfd, (char *)&total, sizeof(total)); close(dbfd); } @@ -1744,10 +1743,6 @@ main(int argc, char *argv[]) noecho(); initall(); - /* revoke privs */ - gid = getgid(); - setresgid(gid, gid, gid); - instruct(); makeboard(); for (;;) { diff --git a/games/canfield/canfield/pathnames.h b/games/canfield/canfield/pathnames.h deleted file mode 100644 index 1fd26619b18..00000000000 --- a/games/canfield/canfield/pathnames.h +++ /dev/null @@ -1,36 +0,0 @@ -/* $OpenBSD: pathnames.h,v 1.3 2003/06/03 03:01:39 millert Exp $ */ -/* $NetBSD: pathnames.h,v 1.3 1995/03/21 15:08:34 cgd Exp $ */ - -/*- - * Copyright (c) 1990, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)pathnames.h 8.1 (Berkeley) 5/31/93 - */ - -#define _PATH_SCORE "/var/games/cfscores" - diff --git a/games/canfield/cfscores/Makefile b/games/canfield/cfscores/Makefile index cc4ea4406d1..1f8756de629 100644 --- a/games/canfield/cfscores/Makefile +++ b/games/canfield/cfscores/Makefile @@ -1,10 +1,9 @@ -# $OpenBSD: Makefile,v 1.4 2002/05/31 03:46:35 pjanzen Exp $ +# $OpenBSD: Makefile,v 1.5 2015/11/24 02:51:50 tedu Exp $ # @(#)Makefile 8.1 (Berkeley) 5/31/93 PROG= cfscores CFLAGS+=-I${.CURDIR}/../canfield NOMAN= noman -BINMODE=2555 .include "../../Makefile.inc" .include <bsd.prog.mk> diff --git a/games/canfield/cfscores/cfscores.c b/games/canfield/cfscores/cfscores.c index 717c24d38e1..35ef49177f0 100644 --- a/games/canfield/cfscores/cfscores.c +++ b/games/canfield/cfscores/cfscores.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cfscores.c,v 1.15 2009/10/27 23:59:24 deraadt Exp $ */ +/* $OpenBSD: cfscores.c,v 1.16 2015/11/24 02:51:50 tedu Exp $ */ /* $NetBSD: cfscores.c,v 1.3 1995/03/21 15:08:37 cgd Exp $ */ /* @@ -33,12 +33,12 @@ #include <sys/types.h> #include <err.h> #include <fcntl.h> +#include <limits.h> #include <pwd.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> -#include "pathnames.h" struct betinfo { long hand; /* cost of dealing hand */ @@ -52,6 +52,7 @@ struct betinfo { }; int dbfd; +char scorepath[PATH_MAX]; void printuser(const struct passwd *, int); @@ -60,41 +61,19 @@ main(int argc, char *argv[]) { struct passwd *pw; uid_t uid; - gid_t gid; - - if (argc > 2) { - fprintf(stderr, "usage: cfscores [-a] [username]\n"); - exit(1); - } - dbfd = open(_PATH_SCORE, O_RDONLY); + + if (!getenv("HOME")) + return; + snprintf(scorepath, sizeof(scorepath), "%s/%s", getenv("HOME"), + "cfscores"); + dbfd = open(scorepath, O_RDONLY); if (dbfd < 0) - err(2, "%s", _PATH_SCORE); - - /* revoke privs */ - gid = getgid(); - setresgid(gid, gid, gid); + err(2, "%s", scorepath); setpwent(); - if (argc == 1) { - uid = getuid(); - pw = getpwuid(uid); - if (pw == 0) { - printf("You are not listed in the password file?!?\n"); - exit(2); - } - printuser(pw, 1); - exit(0); - } - if (strcmp(argv[1], "-a") == 0) { - while ((pw = getpwent()) != 0) - printuser(pw, 0); - exit(0); - } - pw = getpwnam(argv[1]); - if (pw == 0) { - printf("User %s unknown\n", argv[1]); - exit(3); - } + uid = getuid(); + pw = getpwuid(uid); + printuser(pw, 1); exit(0); } @@ -112,14 +91,14 @@ printuser(const struct passwd *pw, int printfail) printf("Bad uid %u\n", pw->pw_uid); return; } - i = lseek(dbfd, pw->pw_uid * sizeof(struct betinfo), SEEK_SET); + i = lseek(dbfd, sizeof(struct betinfo), SEEK_SET); if (i < 0) { - warn("lseek %s", _PATH_SCORE); + warn("lseek %s", scorepath); return; } i = read(dbfd, (char *)&total, sizeof(total)); if (i < 0) { - warn("lseek %s", _PATH_SCORE); + warn("lseek %s", scorepath); return; } if (i == 0 || total.hand == 0) { |