From 27af7ffe500e04966618952311c417a8818c9beb Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Thu, 17 Jun 2010 12:59:19 -0500 Subject: [PATCH] Throw an error on certain combinators if a user/group does not exist --- basis/unix/groups/groups-tests.factor | 1 + basis/unix/groups/groups.factor | 13 +++++++++---- basis/unix/users/users-tests.factor | 1 + basis/unix/users/users.factor | 13 +++++++++---- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/basis/unix/groups/groups-tests.factor b/basis/unix/groups/groups-tests.factor index eae2020077..7755be1d4d 100644 --- a/basis/unix/groups/groups-tests.factor +++ b/basis/unix/groups/groups-tests.factor @@ -27,3 +27,4 @@ IN: unix.groups.tests [ "888888888888888" ] [ 888888888888888 group-name ] unit-test [ f ] [ "please-oh-please-don't-have-a-group-named-this123lalala" group-struct ] unit-test +[ "please-oh-please-don't-have-a-group-named-this123lalala" ?group-id ] must-fail diff --git a/basis/unix/groups/groups.factor b/basis/unix/groups/groups.factor index 7be124ced4..69c0ac0a00 100644 --- a/basis/unix/groups/groups.factor +++ b/basis/unix/groups/groups.factor @@ -61,6 +61,11 @@ PRIVATE> : group-id ( string -- id/f ) group-struct dup [ gr_gid>> ] when ; +ERROR: no-group string ; + +: ?group-id ( string -- id ) + dup group-struct [ nip gr_gid>> ] [ no-group ] if* ; + groups ( byte-array n -- groups ) @@ -122,14 +127,14 @@ GENERIC: set-effective-group ( obj -- ) PRIVATE> -M: string set-real-group ( string -- ) - group-id (set-real-group) ; - M: integer set-real-group ( id -- ) (set-real-group) ; +M: string set-real-group ( string -- ) + ?group-id (set-real-group) ; + M: integer set-effective-group ( id -- ) (set-effective-group) ; M: string set-effective-group ( string -- ) - group-id (set-effective-group) ; + ?group-id (set-effective-group) ; diff --git a/basis/unix/users/users-tests.factor b/basis/unix/users/users-tests.factor index f2059a1a8c..786ea4726c 100644 --- a/basis/unix/users/users-tests.factor +++ b/basis/unix/users/users-tests.factor @@ -27,3 +27,4 @@ IN: unix.users.tests [ f ] [ 89898989898989898989898989898 user-passwd ] unit-test [ f ] [ "thisusershouldnotexistabcdefg12345asdfasdfasdfasdfasdfasdfasdf" user-id ] unit-test +[ "thisusershouldnotexistabcdefg12345asdfasdfasdfasdfasdfasdfasdf" ?user-id ] must-fail diff --git a/basis/unix/users/users.factor b/basis/unix/users/users.factor index 0575538b87..f9d1c8561a 100644 --- a/basis/unix/users/users.factor +++ b/basis/unix/users/users.factor @@ -64,6 +64,11 @@ M: string user-passwd ( string -- passwd/f ) : user-id ( string -- id/f ) user-passwd dup [ uid>> ] when ; +ERROR: no-user string ; + +: ?user-id ( string -- id/f ) + dup user-passwd [ nip uid>> ] [ no-user ] if* ; + : real-user-id ( -- id ) unix.ffi:getuid ; inline @@ -100,17 +105,17 @@ GENERIC: set-effective-user ( string/id -- ) PRIVATE> -M: string set-real-user ( string -- ) - user-id (set-real-user) ; - M: integer set-real-user ( id -- ) (set-real-user) ; +M: string set-real-user ( string -- ) + ?user-id (set-real-user) ; + M: integer set-effective-user ( id -- ) (set-effective-user) ; M: string set-effective-user ( string -- ) - user-id (set-effective-user) ; + ?user-id (set-effective-user) ; os { { [ dup bsd? ] [ drop "unix.users.bsd" require ] }