]> eyrie.org Git - kerberos/remctl.git/blob - TODO
Ignore ignored attributes for Ruby
[kerberos/remctl.git] / TODO
1                             remctl To-Do List
2
3 Protocol:
4
5  * Add support for running commands as filters, passing standard input
6    asynchronously from the client.  This requires significant
7    re-engineering of the client loop and should wait for better
8    configuration since we don't want to do this with every command.  It
9    also introduces out-of-order responses and possible deadlocks to the
10    protocol.  docs/protocol-v4 has an initial draft.
11
12  * Add a capabilities command to the protocol so that the client can
13    retrieve the list of supported commands rather than assuming based on
14    the protocol version.
15
16  * Support locating remctl services via SRV records, probably
17    _remctl._tcp.<hostname>.  This will need linking with a resolver
18    library that allows SRV queries.  libresolv and res_search is probably
19    the best approach, since that should be portable to any system.
20
21  * Modify the server to not allow MESSAGE_COMMAND split in the middle of a
22    length element and require that commands be split in the middle or at
23    the end of argument data.
24
25 Server:
26
27  * Add a way of explicitly specifying the null command or subcommand in
28    the remctl configuration annd then permit it rather than returning a
29    syntax error.
30
31  * Maximum argument count, maximum data size in MESSAGE_COMMAND, and
32    inactivity timeouts for commands should be configurable parameters of
33    the server rather than hard-coded values.
34
35  * Support LDAP-based ACLs in addition to file system ACLs.
36    Probably need to support both entitlement and group-based ACLs.
37
38  * Add support for external ACL checking programs.  If the program exits
39    with a zero status, access is granted.  If it exits 1, access is not
40    granted but checking continues.  If it exits with any other exit
41    status, access is not granted and checking aborts.
42
43    Ideally, for writing generic ACL checking programs, the program should
44    get the type and service of the remctl command as well as any
45    arguments.  However, it would also be good to support passing other
46    arguments into the program as specified in the ACL file.
47
48  * Sort the files in a directory before processing them so that the order
49    is deterministic.  Affects both configuration (earlier entries override
50    later ones) and ACL rules in the presence of deny ACLs.
51
52  * Add a timeout for commands after which the server kills the command.
53
54  * The server should call gss_inquire_context to retrieve the mechanism
55    OID and then pass that in to calls to gssapi_error_string rather than
56    hard-coding the Kerberos v5 OID.
57
58  * Add option to mask all arguments.
59
60  * Track all the children spawned by remctld in stand-alone mode.  On
61    receipt of SIGTERM or SIGINT, send SIGUSR1 to all children.  In the
62    children, on receipt of SIGUSR1, exit as soon as the current command in
63    progress (if any) stops running.  (SIGTERM or SIGINT directly to a
64    child should kill it outright.)
65
66  * Support masking the argument following a particular string so that the
67    argument to a particular flag can be masked regardless of its location
68    on the command line.
69
70  * Add server support for persistent child processes that the server
71    communicates with over a UNIX domain socket.  The best protocol for
72    communication is probably FastCGI, since that will allow the child
73    processes to be written in a wide variety of languages and take
74    advantage of existing libraries.  This will probably require a new
75    implementation of the FastCGI server-side protocol.
76
77  * In long-running remctld processes, check for configuration file changes
78    and reload the configuration automatically.
79
80  * Consider dropping the client remctl connection when the client's
81    authentication credentials have expired.  Otherwise, remctld
82    potentially violates the security properties of the Kerberos protocol
83    by using authenticators beyond their stated lifetime.
84
85  * Move the core server protocol code into a library so that one can embed
86    a remctl server in other programs.
87
88  * Clean up the argv generation code for commands in the server.
89
90 Client:
91
92  * Implement file upload in the remctl client.
93
94  * Add readline support to the remctl client for multiple commands to the
95    same server in the same authenticated session.
96
97  * Add an option that prompts the user, with echo disabled, for a piece of
98    secure data, prompting twice to ensure both times match, and then sends
99    that as the last argument to the command.  This would be useful for
100    remctl interfaces to change passwords.
101
102  * Allow sending the empty command in the command-line client once the
103    server supports it.
104
105  * Allow multiple comma-separated hosts to be specified on the command
106    line, resulting in the remctl command being run on each host in turn.
107
108 Client library:
109
110  * The client should ideally not specify an OID for the authentication
111    mechanism and instead permit GSS-API to negotiate an appropriate
112    mechanism.  It should then call gss_inquire_context to retrieve the
113    mechanism OID and then pass that in to calls to gssapi_error_string
114    rather than hard-coding the Kerberos v5 OID.
115
116 Go library:
117
118  * Incorporate the Go library developed by Thomas Kula.
119
120 Perl library:
121
122  * Add Net::Remctl::Backend support for obtaining a Kerberos ticket from a
123    given keytab file before running a command.
124
125  * Add Net::Remctl::Backend support for creating a PAG and obtaining AFS
126    tokens before running a command.
127
128  * Add support for per-command help (possibly extracted from the POD
129    documentation with some additional markup) to implement the help server
130    configuration.
131
132 Python library:
133
134  * Revise for better Python coding style.
135
136  * Sort out type handling fully and stop being so aggressive about
137    supporting multiple ways to specify the commands, instead just
138    requiring an iterable of str or bytes.
139
140  * Add enums for streams and protocol error codes.
141
142  * Add proper mypy stubs to typeshed and to this package.
143
144  * Move API documentation to proper docstrings and use Sphinx to generate
145    the documentation.
146
147  * Fix or drop module version information.
148
149  * Use a named tuple for the return value of output().
150
151  * Use a dataclass for RemctlSimpleResult.
152
153  * Add a Python equivalent to Net::Remctl::Backend.
154
155 Ruby library:
156
157  * Revise for better Ruby coding style.
158
159 Rust library:
160
161  * Write one.
162
163 Language bindings:
164
165  * Incorporate the Go bindings for the client library.
166
167 Documentation:
168
169  * Remove the description of the version 1 remctl protocol from the
170    current protocol specification and put it in its own, separate
171    specification document.  Most people will no longer care how this
172    works.
173
174  * Submit the remctl protocol as an IETF Internet-Draft.
175
176  * Document conventions for the configuration in the remctld manual.
177
178  * Rewrite the documentation and protocol specification as a proper manual
179    and format it with Sphinx.
180
181 Portability layer:
182
183  * Refactor getopt to be easier to understand and less deeply nested.
184
185 Test suite:
186
187  * Fix tests on a host with only IPv6 addresses.  Right now, the test
188    suite assumes remctld will always bind to 127.0.0.1.  While fixing this
189    problem, it may be possible to also fix remctld binding to public IP
190    addresses while the test suite runs.
191
192  * Incorporate a program that can generate a Kerberos ticket cache from a
193    keytab and use that for running the Kerberos tests instead of requiring
194    the user to generate a keytab.
195
196  * Add tests to ensure that no child processes of the remctld server are
197    still running when the test command finishes for cases like
198    server/timeout or server/invalid where we've previously stranded child
199    processes for long periods.
200
201 Java implementation:
202
203  * Integrate the new Java client implementation.
204
205  * Integrate the Java build into the rest of the build system so that it
206    is enabled using an --enable-java flag similar to the bindings, finds
207    maven and a JAVA_HOME in configure, and does the JAR build in the main
208    Makefile using maven.
209
210  * Java cannot obtain tickets from a ticket cache created using the
211    k5.conf file included in the java directory using the current MIT
212    Kerberos on Debian.  It has to prompt for a password and get tickets
213    itself.  Figure out why and fix it.