=================================================================== RCS file: /cvs2/dgamelaunch-openbsd/dgamelaunch.c,v retrieving revision 1.4 retrieving revision 1.7 diff -u -p -r1.4 -r1.7 --- dgamelaunch-openbsd/dgamelaunch.c 2021/03/15 14:49:34 1.4 +++ dgamelaunch-openbsd/dgamelaunch.c 2021/04/02 10:52:15 1.7 @@ -2163,6 +2163,11 @@ readfile (int nolock) b = n; /* pw field */ + /* OpenBSD's implementation stores the password in hashed form. + * crypt_checkpass takes care of validating the hashing so we + * don't have to ensure the password field has a valid length */ + +#ifndef(__OpenBSD__) while (*b != ':') { users[f_num]->password[(b - n)] = *b; @@ -2172,6 +2177,7 @@ readfile (int nolock) graceful_exit (102); } } +#endif /* advance to next field */ n = b + 1; @@ -2865,6 +2871,8 @@ main (int argc, char** argv) graceful_exit (3); } + + /* shed privs. this is done immediately after chroot. */ if (setgroups (1, &globalconfig.shed_gid) == -1) { @@ -2883,6 +2891,16 @@ main (int argc, char** argv) perror ("setuid"); graceful_exit (6); } + +#if defined(__OpenBSD__) + if ( pledge("stdio rpath wpath cpath fattr flock " + "tty proc exec ps", NULL )==-1 ) + { + perror("pledge"); + graceful_exit (301); + } +#endif + } if (globalconfig.locale) {