1 /* Module API Definition */
2 
3 #ifndef LPM_API_H
4 #define LPM_API_H
5 
6 #include <stdio.h>
7 #include <time.h>
8 #ifndef WIN32
9 #include <sys/time.h>
10 #endif
11 
12 #define LPM_API_VERSION 1
13 
14 struct LPMAPI {
15 
16    /* Functions */
17    /* From alias.h */
18    int (*register_alias)(const char *alias, const char *real);
19    const char *(*lookup_alias)(const char *alias);
20 
21    /* From Cmdarg.h */
22    void (*add_cmdarg)(const char *arg, int params, char *pdesc, CmdArgFn fn);
23    void (*new_cmdargs)(void);
24    struct listserver_cmdarg * (*find_cmdarg)(const char *arg);
25    struct listserver_cmdarg * (*get_cmdargs)(void);
26 
27    /* From Command.h */
28    void (*new_commands)(void);
29    void (*add_command)(char *name, char *desc, char *syntax, char *altsyntax,
30                        char *adminsyntax, int flags, CmdFn cmd);
31    struct listserver_cmd * (*find_command)(char *name, int flags);
32    struct listserver_cmd * (*get_commands)(void);
33 
34    /* From Cookie.h */
35    void (*register_cookie)(char type, const char *expirevar, CookieFn create,
36                            CookieFn destroy);
37    int (*match_cookie)(const char *cookie, const char *match);
38    int (*request_cookie)(const char *filename, char *cookie,
39                          char type, const char *cookiedata);
40    int (*verify_cookie)(const char *filename, const char *cookie,
41                         char type, char *cookiedata);
42    int (*del_cookie)(const char *filename, const char *cookie);
43    void (*expire_all_cookies)(void);
44 
45    /* From Core.h */
46    int (*send_textfile)(const char *address, const char *textfile);
47    int (*flagged_send_textfile)(const char *fromaddy, const char *list,
48                                 const char *flag, const char *file,
49                                 const char *subject);
50    int (*blacklisted)(const char *address);
51    int (*match_reg)(const char *pattern, const char *match);
52    void (*log_printf)(int level, char *format, ...);
53    void (*result_printf)(char *format, ...);
54    void (*quote_command)();
55    void (*filesys_error)(const char *filename);
56    void (*internal_error)(const char *message);
57    void (*spit_status)(const char *statustext, ...);
58    void (*bounce_message)(void);
59    const char * (*resolve_error)(int error);
60    void (*nosuch)(const char *);
61    void (*make_moderated_post)(const char *);
62    void (*get_date)(char *buffer, int len, time_t now);
63 
64    /* From File.h */
65    void (*add_file)(const char *filename, const char *varname,
66                     const char *desc);
67    void (*new_files)(void);
68    struct list_file * (*find_file)(const char *filename);
69    struct list_file * (*get_files)(void);
70 
71    /* From Fileapi.h */
72    FILE * (*open_file)(const char *path, const char *mode);
73    int (*close_file)(FILE *stream);
74    FILE * (*open_exclusive)(const char *path, const char *mode);
75    FILE * (*open_shared)(const char *path, const char *mode);
76    int (*exists_file)(const char *path);
77    int (*exists_dir)(const char *path);
78    char * (*read_file)(char *buffer, int size, FILE *stream);
79    int (*write_file)(FILE *stream, const char *format, ...);
80    void (*rewind_file)(FILE *);
81    void (*truncate_file)(FILE *, int);
82    int (*unlink_file)(const char *);
83    int (*putc_file)(char outchar, FILE *stream);
84    int (*replace_file)(const char *src, const char *dest);
85    int (*walk_dir)(const char *path, char *buffer, LDIR *dir);
86    int (*next_dir)(LDIR dir, char *buffer);
87    int (*close_dir)(LDIR dir);
88    int (*mkdirs)(const char *path);
89    int (*flush_file)(FILE *stream);
90 
91    /* From Flag.h */
92    void (*new_flags)(void);
93    void (*add_flag)(const char *name, const char *desc, int admin);
94    struct listserver_flag * (*get_flag)(const char *name);
95    struct listserver_flag * (*get_flags)(void);
96 
97    /* From Forms.h */
98    int (*task_heading)(const char *toaddy);
99    void (*task_ending)(void);
100    int (*error_heading)(void);
101    void (*error_ending)(void);
102 
103    /* From Hooks.h */
104    void (*new_hooks)(void);
105    void (*add_hook)(const char *type, unsigned int priority, HookFn cmd);
106    int (*do_hooks)(const char *hooktype);
107    struct listserver_hook * (*get_hooks)(void);
108 
109    /* From List.h */
110    int (*set_context_list)(const char *list);
111    int (*read_conf)(const char *filename, int level);
112    int (*read_conf_parm)(const char *listname, const char *param, int level);
113    int (*list_valid)(const char *listname);
114    int (*list_read_conf)(void);
115 
116    /* From Modes.h */
117    void (*add_mode)(const char *mode, ModeFn fn);
118    void (*new_modes)(void);
119    struct listserver_mode * (*find_mode)(const char *mode);
120    struct listserver_mode * (*get_modes)(void);
121 
122    /* From Module.h */
123    void (*new_modules)(void);
124    void (*add_module)(const char *, const char *);
125    struct listserver_module * (*get_modules)(void);
126 
127    /* From Mystring.h */
128    int (*buffer_printf)(char *buffer, int length, char *format, ...);
129    char * (*lowerstr)(const char *);
130    char * (*upperstr)(const char *);
131    char * (*strcasestr)(const char *, const char *);
132    void (*strreplace)(char *, int, const char *, const char *, const char *);
133    void (*strcasereplace)(char *, int, const char *, const char *, const char *);
134    int (*address_match)(const char *, const char *);
135    int (*check_address)(const char *);
136    void (*trim)(char *);
137 
138 
139    /* From Parse.h */
140    int (*open_adminspit)(const char *filename);
141    FILE * (*get_adminspit)(void);
142    int (*handle_spit_admin)(const char *line);
143    int (*handle_spit_admin2)(const char *line);
144 
145    /* From Regexp.h */
146    regexp * (*regcomp)(char *exp);
147    int (*regexec)(regexp *prog, char *string);
148    void (*regsub)(regexp *prog, char *source, char *dest);
149 
150    /* From Smtp.h */
151    int (*smtp_start)(int notify);
152    int (*smtp_from)(const char *fromaddy);
153    int (*smtp_to)(const char *toaddy);
154    int (*smtp_body_start)(void);
155    int (*smtp_body_text)(const char *line);
156    int (*smtp_body_line)(const char *line);
157    int (*smtp_body_end)(void);
158    int (*smtp_end)(void);
159 
160    /* From Tolist.h */
161    void (*new_tolist)(void);
162    void (*nuke_tolist)(void);
163    void (*add_from_list_all)(const char *list);
164    void (*add_from_list_flagged)(const char *list, const char *flag);
165    void (*add_from_list_unflagged)(const char *list, const char *flag);
166    void (*remove_user_all)(const char *address);
167    void (*remove_flagged_all)(const char *flag);
168    void (*remove_flagged_all_prilist)(const char *flag, const char *prilist);
169    void (*remove_unflagged_all)(const char *flag);
170    void (*remove_unflagged_all_prilist)(const char *flag, const char *prilist);
171    void (*remove_list_flagged)(const char *list, const char *flag);
172    void (*remove_list_unflagged)(const char *list, const char *flag);
173    void (*sort_tolist)(void);
174    struct tolist * (*start_tolist)(void);
175    struct tolist * (*next_tolist)(void);
176    void (*finish_tolist)(void);
177    int (*send_to_tolist)(const char *fromaddy, const char *file,
178                          int do_ackpost, int do_echopost, int fullbounce);
179 
180    /* From unhtml.c */
181    int (*unhtml_file)(const char *file1, const char *file2);
182 
183    /* From Unmime.h */
184    void (*unmime_file)(const char *src, const char *dest);
185    void (*unquote_file)(const char *src, const char *dest);
186    void (*add_mime_handler)(const char *mimetype, int priority, MimeFn handler);
187    void (*mime_eat_header)(struct mime_header *);
188    struct mime_field *(*mime_getfield)(struct mime_header *, const char *);
189    const char *(*mime_fieldval)(struct mime_header *, const char *);
190    const char *(*mime_parameter)(struct mime_header *, const char *, const char *);
191 
192    /* From User.h */
193    int (*user_read)(FILE *userfile, struct list_user *user);
194    int (*user_find)(const char *listusers, const char *addy,
195                     struct list_user *user);
196    int (*user_find_list)(const char *list, const char *addy,
197                          struct list_user *user);
198    int (*user_add)(const char *listusers, const char *fromaddy);
199    int (*user_remove)(const char *listusers, const char *fromaddy);
200    int (*user_write)(const char *listusers, struct list_user *user);
201    int (*user_setflag)(struct list_user *user, const char *flag, int admin);
202    int (*user_unsetflag)(struct list_user *user, const char *flag, int admin);
203    int (*user_hasflag)(struct list_user *user, const char *flag);
204 
205    /* From Userstat.h */
206    int (*userstat_get_stat)(const char *list, const char *user, const char *key,
207                             char *val, int vallen);
208    int (*userstat_set_stat)(const char *list, const char *user, const char *key,
209                             const char *val);
210 
211    /* From Variables.h */
212    void (*register_var)(const char *varname, const char *defval,
213                         const char *section, const char *desc,
214                         const char *example, enum var_type type, int flags);
215    void (*set_var)(const char *varname, const char *varval, int level);
216    void (*clean_var)(const char *varname, int level);
217    void (*wipe_vars)(int level);
218    const char * (*get_var)(const char *varname);
219    void * (*get_data)(const char *varname);
220    int (*get_bool)(const char *varname);
221    int (*get_number)(const char *varname);
222    const char * (*get_string)(const char *varname);
223    int (*get_seconds)(const char *varname);
224    const char *(*get_cur_varval)(struct var_data *var);
225    struct var_data * (*start_varlist)(void);
226    struct var_data * (*next_varlist)(void);
227    void (*finish_varlist)(void);
228    void (*lock_var)(const char *varname);
229    void (*unlock_var)(const char *varname);
230 
231    /* Recent additions - at bottom to preserve binary API compatibility */
232    /* Binary compatible as of LPM definition for 07/13/1999 - 0.125a pre */
233 
234    /* Liscript additions */
235    int (*liscript_parse_line)(const char *inputline, char *buffer, int buflen);
236    int (*liscript_parse_file)(const char *file1, const char *file2);
237 
238    /* core.h addition */
239    int (*send_textfile_expand)(const char *address, const char *textfile);
240 
241    /* submodes. additions */
242    struct submode *(*get_submodes)(void);
243    const char *(*get_submode_flags)(const char *mode);
244    struct submode *(*get_submode)(const char *mode);
245 
246    /* New fileapi.h additions */
247    int (*getc_file)(FILE *stream);
248    int (*ungetc_file)(int putback, FILE *stream);
249 
250    /* unmime.h additions */
251    void (*unquote_string)(const char *orig, char *dest, int len);
252 
253    /* lcgi.h additions */
254    struct listserver_cgi_hook *(*get_cgi_hooks)(void);
255    struct listserver_cgi_hook *(*find_cgi_hook)(const char *name);
256    void (*add_cgi_hook)(const char *name, CgiHook function);
257    int (*cgi_unparse_template)(const char *name);
258 
259    /* more lcgi.h additions */
260    void (*add_cgi_mode)(const char *name, CgiMode function);
261    struct listserver_cgi_mode *(*find_cgi_mode)(const char *name);
262 
263    /* 0.126 config file writing/variable.h additions */
264    const char *(*get_cur_varval_level)(struct var_data *var, int level);
265    const char *(*get_cur_varval_level_default)(struct var_data *var, int level);
266    void (*write_configfile)(const char *filename, int level,
267                             const char *sortorder);
268    void (*write_configfile_section)(const char *filename, int level,
269                                     const char *section);
270    int (*check_duration)(const char *duration);
271    char *(*find_cookie)(const char *filename, char type, const char *partial);
272    int (*modify_cookie)(const char *filename, const char *cookie,
273                        const char *newdata);
274 
275    /* More 0.126a LCGI additions */
276    void (*add_cgi_tempvar)(const char *name, const char *val);
277    struct listserver_cgi_tempvar *(*get_cgi_tempvars)(void);
278 
279    /* Password additions for 0.126a */
280    void (*set_pass)(const char *user, const char *newpass);
281    int (*find_pass)(const char *user);
282    int (*check_pass)(const char *user, const char *pass);
283 
284    /* Cookie addition for 0.126a */
285    void (*expire_cookies)(const char *filename);
286 
287    /* list_directory for 0.126a */
288    char *(*list_directory)(const char *listname);
289    int (*listdir_file)(char *buffer, const char *list, const char *filename);
290    int (*walk_lists)(char *buf);
291    int (*next_lists)(char *buf);
292 
293    /* LCGI addition for 0.127a */
294    struct listserver_cgi_tempvar *(*find_cgi_tempvar)(const char *name);
295 
296    /* fileapi addition for 0.127a */
297    int (*append_file)(const char *dest, const char *source);
298 
299    /* core addition for 0.127a */
300    void (*result_append)(const char *filename);
301    int (*send_textfile_expand_append)(const char *address,
302                                       const char *filename,
303                                       int includequeue);
304 
305    /* 0.128a additions for funcparse.h */
306    void (*add_func)(const char *name, int nargs, const char *desc, FuncFn fn);
307    struct listserver_funcdef *(*find_func)(const char *name);
308    struct listserver_funcdef *(*get_funcs)(void);
309 
310    /* 0.129a additions */
311    void (*add_file_flagged)(const char *filename, const char *varname,
312                             const char *desc, int flags);
313 
314    void (*restrict_var)(const char *varname);
315    int  (*is_trusted)(const char *list);
316 
317    int  (*expand_append)(const char *mainfile, const char *liscript);
318 
319    void (*build_hostname)(char *buffer, int len);
320 
321    /* 1.0.0 additions */
322    const char *(*get_var_unexpanded)(const char *varname);
323    void (*requote_string)(const char *orig, char *dest, int len);
324 
325    /* More additions */
326    int (*public_file)(const char *filename);
327    int (*private_file)(const char *filename);
328 };
329 #endif
330