summaryrefslogtreecommitdiffhomepage
path: root/include/ntux/ntux.h
blob: 6b004766120103674a6fa549e73290db0dcf5f6d (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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#ifndef NTUX_H
#define NTUX_H

#include <stdint.h>

#include "ntux_api.h"

#ifdef __cplusplus
extern "C" {
#endif

/* pre-alpha */
#ifndef NTUX_APP
#ifndef NTUX_PRE_ALPHA
#error  libntux: pre-alpha: ABI is not final!
#error  to use the library, please pass -DNTUX_PRE_ALPHA to the compiler.
#endif
#endif

/* status codes */
#define NTUX_OK				0x00
#define NTUX_USAGE			0x01
#define NTUX_ERROR			0x02

/* driver flags */
#define NTUX_DRIVER_VERBOSITY_NONE	0x0000
#define NTUX_DRIVER_VERBOSITY_ERRORS	0x0001
#define NTUX_DRIVER_VERBOSITY_STATUS	0x0002
#define NTUX_DRIVER_VERBOSITY_USAGE	0x0004
#define NTUX_DRIVER_CLONE_VECTOR	0x0008

#define NTUX_DRIVER_VERSION		0x0010
#define NTUX_DRIVER_DRY_RUN		0x0020
#define NTUX_DRIVER_VERBOSE		0x0040
#define NTUX_DRIVER_SILENT		0x0080

#define NTUX_DRIVER_RECURSIVE		0x0100
#define NTUX_DRIVER_CHANGES		0x0200
#define NTUX_DRIVER_ROOTED		0x0400
#define NTUX_DRIVER_ROOTLESS		0x0800

#define NTUX_DRIVER_DUMP		0x1000

#define NTUX_DRIVER_RPATH		0X10000
#define NTUX_DRIVER_APATH		0X20000
#define NTUX_DRIVER_NPATH		0X40000
#define NTUX_DRIVER_DPATH		0X80000

#define NTUX_DRIVER_ANNOTATE_ALWAYS	0x10000000
#define NTUX_DRIVER_ANNOTATE_NEVER	0x20000000
#define NTUX_DRIVER_ANNOTATE_FULL	0x40000000

/* error flags */
#define NTUX_ERROR_TOP_LEVEL		0x0001
#define NTUX_ERROR_NESTED		0x0002
#define NTUX_ERROR_CHILD		0x0004
#define NTUX_ERROR_CUSTOM		0x0008
#define NTUX_ERROR_NATIVE		0x0010

enum ntux_custom_error {
	NTUX_ERR_FLOW_ERROR,
	NTUX_ERR_FLEE_ERROR,
	NTUX_ERR_LDSO_INIT,
	NTUX_ERR_NOT_IMPLEMENTED,
	NTUX_ERR_CONFLICTING_ARGUMENTS,
	NTUX_ERR_NON_POSIX_DESCRIPTOR,
};

enum ntux_cmd {
	NTUX_CMD_DEFAULT,
	NTUX_CMD_STAT,
	NTUX_CMD_SPAWN,
	NTUX_CMD_STRACE,
	NTUX_CMD_CHMOD,
	NTUX_CMD_ACEIT,
	NTUX_CMD_FSPATH,
	NTUX_CMD_BRIDGE,
	NTUX_CMD_CAP,
};

struct ntux_source_version {
	int		major;
	int		minor;
	int		revision;
	const char *	commit;
};

struct ntux_fd_ctx {
	int		fdin;
	int		fdout;
	int		fderr;
	int		fdlog;
	int		fdcwd;
	int		fddst;
};

struct ntux_error_info {
	const struct ntux_driver_ctx *	edctx;
	const struct ntux_unit_ctx *	euctx;
	const char *			eunit;
	int				esyscode;
	int				elibcode;
	const char *			efunction;
	int				eline;
	unsigned			eflags;
	void *				eany;
};

struct ntux_common_ctx {
	uint64_t			drvflags;
	uint64_t			actflags;
	uint64_t			fmtflags;
	enum ntux_cmd			cmd;
	int32_t				status;
	char **				sargv;
	char **				senvp;
	const char *			loader;
	const char *			logfile;
	const char *			refobj;
	const char *			strmode;
	const char *			owner;
	const char *			group;
	const char *			interp;
	const char *			optarg;
	uint32_t			sysmask[16];
	uint32_t			dbgmask[16];
	uint32_t			osmask [32];
};

struct ntux_driver_ctx {
	const char **			units;
	const char *			program;
	const char *			module;
	const struct ntux_common_ctx *	cctx;
	struct ntux_error_info **	errv;
	void *				any;
};

struct ntux_unit_ctx {
	const char * const *		path;
	void *				any;
};

/* driver api */
ntux_api int  ntux_get_driver_ctx       (char **, char **, uint32_t,
                                         const struct ntux_fd_ctx *,
                                         struct ntux_driver_ctx **);

ntux_api void ntux_free_driver_ctx      (struct ntux_driver_ctx *);

ntux_api int  ntux_get_driver_fdctx     (const struct ntux_driver_ctx *, struct ntux_fd_ctx *);
ntux_api int  ntux_set_driver_fdctx     (struct ntux_driver_ctx *, const struct ntux_fd_ctx *);

/* cmd api */
ntux_api int  ntux_cmd_aceit            (const struct ntux_driver_ctx *, const char *);
ntux_api int  ntux_cmd_chmod            (const struct ntux_driver_ctx *, const char *);
ntux_api int  ntux_cmd_fspath           (const struct ntux_driver_ctx *, const char *);
ntux_api int  ntux_cmd_stat             (const struct ntux_driver_ctx *, const char *);
ntux_api int  ntux_cmd_spawn            (const struct ntux_driver_ctx *);
ntux_api int  ntux_cmd_strace           (const struct ntux_driver_ctx *);
ntux_api int  ntux_cmd_bridge           (const struct ntux_driver_ctx *);

/* utility api */
ntux_api int  ntux_main                 (char **, char **, const struct ntux_fd_ctx *);

/* error trace api */
ntux_api int  ntux_output_error_vector  (const struct ntux_driver_ctx *);

/* package info */
ntux_api const struct ntux_source_version * ntux_source_version(void);

#ifdef __cplusplus
}
#endif

#endif