summaryrefslogtreecommitdiff
path: root/README_IPC.md
blob: b9d754a0128cc23635820da834baeef553c31a27 (plain)
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
59
About the Inter Process Communication Protocol
==============================================

JWebmail needs to read a users mail box in maildir format.
JWebmail runs under its own user also called jwebmail.
The mailbox has rights of its own user or there is
a special user for all mailboxes. To gain access there is a setuid program
called qmail-authuser that checks acces rights and starts another program.
This program is called `extractor`.

Version 1
---------

Previously all arguments where passed by command line arguments and json
was returned.
Binary data was sent after a json header and a newline.

Version 2
---------

Now protobuf is used for message interchange.

Currently a process in spawned for every command.
The method is given as a process argument and the arguments are a single
message on stdin which is close afterwards. The response is a single protobuf
message on stdout after which the process exits.

Version 3
---------

In the future one process is spawned for every jwebmail request.
For this the method name must be dynamic.

I propose the following protocol:

    request
      32 bit big endian unsigned integer
      ascii string (method name)
      32 bit big endian unsigned integer
      protobuf message

    response
      32 bit big endian unsigned integer
      protobuf message

On end the request file descriptor is closed.
An error may close stdout early.

Exit codes
----------

- 1 qma
- 2 qma
- 3 err response
- 4 user error
- 5 issue switching to user
- 6 operation not supported
- 110 qma
- 111 qma