]> gitweb.factorcode.org Git - factor.git/commitdiff
Throw an error on certain combinators if a user/group does not exist
authorDoug Coleman <doug.coleman@gmail.com>
Thu, 17 Jun 2010 17:59:19 +0000 (12:59 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Thu, 17 Jun 2010 17:59:19 +0000 (12:59 -0500)
basis/unix/groups/groups-tests.factor
basis/unix/groups/groups.factor
basis/unix/users/users-tests.factor
basis/unix/users/users.factor

index eae202007760030b07eaecefba45a2ab09558930..7755be1d4df134f473204a87b3856a622f8c7f48 100644 (file)
@@ -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
index 7be124ced4c2f2568927259f4192d80e6c2eedcb..69c0ac0a00e3c76c5d0537abc88715793d0ce60e 100644 (file)
@@ -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* ;
+
 <PRIVATE
 
 : >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) ;
index f2059a1a8c51c7bb74b03abcb258b3d478b65169..786ea4726c3b52f00909509c2e13b65e24b0ef78 100644 (file)
@@ -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
index 0575538b87aa8cc256b0871c7254e0753ce1def9..f9d1c8561aa8f11b60d7f66c65f31737cb86c99d 100644 (file)
@@ -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 ] }