mirror of
https://git.sr.ht/~crc_/retroforth
synced 2024-11-16 19:48:56 +01:00
new example: unix-does-user-exist.forth
FossilOrigin-Name: ae18d3be928709883496d7a686d2717b0d9d42625fadc543d43509d787883568
This commit is contained in:
parent
23a0d6af00
commit
604fd85578
2 changed files with 40 additions and 0 deletions
|
@ -39,6 +39,8 @@ July - September window for this release.
|
|||
- add mandelbrot.forth
|
||||
- add shell.forth
|
||||
- add sqlite3 wrapper
|
||||
- add unix-does-user-exist.forth
|
||||
- improved 99bottles.forth
|
||||
- corrected an issue in mail.forth
|
||||
- cleanup publish-examples.forth
|
||||
- publish-examples.forth now uses `retro-document` to generate glossaries
|
||||
|
|
38
example/unix-does-user-exist.forth
Normal file
38
example/unix-does-user-exist.forth
Normal file
|
@ -0,0 +1,38 @@
|
|||
This implements a word to determine if a user exists. This is done by
|
||||
parsing the results of `finger`.
|
||||
|
||||
~~~
|
||||
:pipe> (s-s) file:R unix:popen [ file:read-line ] [ unix:pclose ] bi ;
|
||||
|
||||
{{
|
||||
:command 'finger_%s_2>&1 s:format ;
|
||||
:parse ASCII:SPACE s:tokenize ;
|
||||
:login? #0 a:th fetch 'Login: s:eq? ;
|
||||
---reveal---
|
||||
:user:exists? (s-f)
|
||||
&Heap [ command pipe> parse login? ] v:preserve ;
|
||||
}}
|
||||
|
||||
'crc user:exists?
|
||||
'fakeuser user:exists?
|
||||
'root user:exists?
|
||||
~~~
|
||||
|
||||
A second way is to parse the `/etc/passwd` file.
|
||||
|
||||
~~~
|
||||
{{
|
||||
:setup (s-fs) FALSE swap ': s:append s:keep ;
|
||||
:match? (fss-fsf) over s:begins-with? ;
|
||||
:found (fs-fs) drop-pair TRUE s:empty s:keep ;
|
||||
:check (fss-fs) match? [ found ] if ;
|
||||
:seek (fs-fs) '/etc/passwd [ check ] file:for-each-line ;
|
||||
---reveal---
|
||||
:user:exists? (s-f)
|
||||
&Heap [ setup seek drop ] v:preserve ;
|
||||
}}
|
||||
|
||||
'crc user:exists?
|
||||
'fakeuser user:exists?
|
||||
'root user:exists?
|
||||
~~~
|
Loading…
Reference in a new issue