package ecaml

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file user.ml

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)
;;
OCaml

Innovation. Community. Security.