1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
open! Core_kernel
open! Import
module Q = struct
include Q
let group_gid = "group-gid" |> Symbol.intern
and group_real_gid = "group-real-gid" |> Symbol.intern
and system_groups = "system-groups" |> Symbol.intern
and system_users = "system-users" |> Symbol.intern
and user_full_name = "user-full-name" |> Symbol.intern
and user_login_name = "user-login-name" |> Symbol.intern
and user_real_login_name = "user-real-login-name" |> Symbol.intern
and user_real_uid = "user-real-uid" |> Symbol.intern
and user_uid = "user-uid" |> Symbol.intern
end
let login_name () = Symbol.funcall0 Q.user_login_name |> Value.to_utf8_bytes_exn
let real_login_name () =
Symbol.funcall0 Q.user_real_login_name |> Value.to_utf8_bytes_exn
;;
let system_user_names () =
Symbol.funcall0 Q.system_users |> Value.Type.(list string).of_value_exn
;;
let system_group_names () =
Symbol.funcall0 Q.system_groups |> Value.Type.(list string).of_value_exn
;;
let full_name () = Symbol.funcall0 Q.user_full_name |> Value.to_utf8_bytes_exn
let nullary_int q () = Symbol.funcall0 q |> Value.to_int_exn
let uid = nullary_int Q.user_uid
let real_uid = nullary_int Q.user_real_uid
let gid = nullary_int Q.group_gid
let real_gid = nullary_int Q.group_real_gid
let initialize () =
Defun.defun_raw
("ecaml-test-user-module" |> Symbol.intern)
[%here]
~interactive:""
~args:[]
(fun _ ->
Echo_area.message_s
[%message
""
(login_name () : string)
(real_login_name () : string)
(uid () : int)
(real_uid () : int)
(gid () : int)
(real_gid () : int)
(system_user_names () : string list)
(system_group_names () : string list)];
Value.nil)
;;