diff options
-rw-r--r-- | contrib/opie/opieinfo.c | 26 | ||||
-rw-r--r-- | usr.bin/opieinfo/Makefile | 1 |
2 files changed, 17 insertions, 10 deletions
diff --git a/contrib/opie/opieinfo.c b/contrib/opie/opieinfo.c index d667a9a..a5d0d57 100644 --- a/contrib/opie/opieinfo.c +++ b/contrib/opie/opieinfo.c @@ -29,6 +29,9 @@ License Agreement applies to this software. Modified at NRL for OPIE 2.0. Written at Bellcore for the S/Key Version 1 software distribution (keyinfo) + +$FreeBSD$ + */ #include "opie_cfg.h" @@ -36,9 +39,6 @@ License Agreement applies to this software. #if HAVE_UNISTD_H #include <unistd.h> #endif /* HAVE_UNISTD_H */ -#if HAVE_PWD_H -#include <pwd.h> -#endif /* HAVE_PWD_H */ #include "opie.h" /* extern char *optarg; */ @@ -46,12 +46,14 @@ extern int errno, optind; static char *getusername FUNCTION_NOARGS { - struct passwd *p = getpwuid(getuid()); - - if (!p) - return getlogin(); + char *login; - return p->pw_name; + login = getlogin(); + if (login == NULL) { + fprintf(stderr, "Cannot find login name\n"); + exit(1); + } + return login; } int main FUNCTION((argc, argv), int argc AND char *argv[]) @@ -71,9 +73,13 @@ int main FUNCTION((argc, argv), int argc AND char *argv[]) } } - if (optind < argc) + if (optind < argc) { + if (getuid() != 0) { + fprintf(stderr, "Only superuser may get another user's keys\n"); + exit(1); + } username = argv[optind]; - else + } else username = getusername(); if ((i = opielookup(&opie, username)) && (i != 2)) { diff --git a/usr.bin/opieinfo/Makefile b/usr.bin/opieinfo/Makefile index dab590f..1826595 100644 --- a/usr.bin/opieinfo/Makefile +++ b/usr.bin/opieinfo/Makefile @@ -8,6 +8,7 @@ CFLAGS+=-I${OPIE_DIST} DPADD= ${LIBOPIE} ${LIBMD} LDADD= -lopie -lmd +BINMODE=4555 .PATH: ${OPIE_DIST} |