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