X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fwebcit.h;h=e9747c083943ac47b55b0e6b1a94741915a18de1;hb=abeb8adc38f9d55fcb6cb3d076f57239b0a9a4d5;hp=cd8fe7f0f16090f026b75572536ecda8a22a086a;hpb=cbc95cd352867b4e0f605f724173a76bde9ddafa;p=citadel.git diff --git a/webcit/webcit.h b/webcit/webcit.h index cd8fe7f0f..e9747c083 100644 --- a/webcit/webcit.h +++ b/webcit/webcit.h @@ -4,7 +4,6 @@ #include #endif - #ifdef HAVE_ICAL_H #ifdef HAVE_LIBICAL #define WEBCIT_WITH_CALENDAR_SERVICE 1 @@ -15,6 +14,14 @@ #include #endif +#ifdef HAVE_OPENSSL +/* Work around RedHat's b0rken OpenSSL includes */ +#define OPENSSL_NO_KRB5 +#include +#include +#include +#endif + #define CALENDAR_ROOM_NAME "Calendar" #define PRODID "-//Citadel//NONSGML Citadel Calendar//EN" @@ -25,11 +32,11 @@ #define SLEEPING 180 /* TCP connection timeout */ #define WEBCIT_TIMEOUT 900 /* WebCit session timeout */ #define PORT_NUM 2000 /* port number to listen on */ -#define SERVER "WebCit v5.00" /* who's in da house */ +#define SERVER "WebCit v6.10" /* who's in da house */ #define DEVELOPER_ID 0 #define CLIENT_ID 4 -#define CLIENT_VERSION 500 /* This version of WebCit */ -#define MINIMUM_CIT_VERSION 607 /* min required Citadel vers */ +#define CLIENT_VERSION 610 /* This version of WebCit */ +#define MINIMUM_CIT_VERSION 640 /* min required Citadel vers */ #define DEFAULT_HOST "localhost" /* Default Citadel server */ #define DEFAULT_PORT "504" #define LB (1) /* Internal escape chars */ @@ -37,10 +44,12 @@ #define QU (3) #define TARGET "webcit01" /* Target for inline URL's */ #define HOUSEKEEPING 15 /* Housekeeping frequency */ -#define INITIAL_WORKER_THREADS 5 +#define MIN_WORKER_THREADS 5 +#define MAX_WORKER_THREADS 250 #define LISTEN_QUEUE_LENGTH 100 /* listen() backlog queue */ #define USERCONFIGROOM "My Citadel Config" +#define DEFAULT_MAXMSGS 20 /* @@ -48,18 +57,18 @@ * * bucket one... */ -#define QR_PERMANENT 1 /* Room does not purge */ +#define QR_PERMANENT 1 /* Room does not purge */ #define QR_INUSE 2 /* Set if in use, clear if avail */ #define QR_PRIVATE 4 /* Set for any type of private room */ #define QR_PASSWORDED 8 /* Set if there's a password too */ #define QR_GUESSNAME 16 /* Set if it's a guessname room */ -#define QR_DIRECTORY 32 /* Directory room */ -#define QR_UPLOAD 64 /* Allowed to upload */ -#define QR_DOWNLOAD 128 /* Allowed to download */ -#define QR_VISDIR 256 /* Visible directory */ -#define QR_ANONONLY 512 /* Anonymous-Only room */ -#define QR_ANONOPT 1024 /* Anonymous-Option room */ -#define QR_NETWORK 2048 /* Shared network room */ +#define QR_DIRECTORY 32 /* Directory room */ +#define QR_UPLOAD 64 /* Allowed to upload */ +#define QR_DOWNLOAD 128 /* Allowed to download */ +#define QR_VISDIR 256 /* Visible directory */ +#define QR_ANONONLY 512 /* Anonymous-Only room */ +#define QR_ANONOPT 1024 /* Anonymous-Option room */ +#define QR_NETWORK 2048 /* Shared network room */ #define QR_PREFONLY 4096 /* Preferred status needed to enter */ #define QR_READONLY 8192 /* Aide status required to post */ #define QR_MAILBOX 16384 /* Set if this is a private mailbox */ @@ -71,10 +80,10 @@ #define QR2_SELFLIST 2 /* Self-service mailing list mgmt */ -#define UA_KNOWN 2 -#define UA_GOTOALLOWED 4 -#define UA_HASNEWMSGS 8 -#define UA_ZAPPED 16 +#define UA_KNOWN 2 +#define UA_GOTOALLOWED 4 +#define UA_HASNEWMSGS 8 +#define UA_ZAPPED 16 @@ -103,6 +112,7 @@ struct serv_info { char serv_sysadm[64]; char serv_moreprompt[SIZ]; int serv_ok_floors; + int serv_supports_ldap; }; @@ -112,7 +122,7 @@ struct serv_info { */ struct march { struct march *next; - char march_name[32]; + char march_name[128]; int march_floor; int march_order; }; @@ -124,7 +134,7 @@ struct march { struct roomlisting { struct roomlisting *lnext; struct roomlisting *rnext; - char rlname[64]; + char rlname[128]; unsigned rlflags; int rlfloor; int rlorder; @@ -161,13 +171,12 @@ struct wc_attachment { char *data; }; - /* * One of these is kept for each active Citadel session. * HTTP transactions are bound to one at a time. */ struct wcsession { - struct wcsession *next; /* Linked list */ + struct wcsession *next; /* Linked list */ int wc_session; /* WebCit session ID */ char wc_username[SIZ]; char wc_password[SIZ]; @@ -179,9 +188,11 @@ struct wcsession { int is_room_aide; int http_sock; int serv_sock; + int chat_sock; unsigned room_flags; int wc_view; int wc_default_view; + int wc_floor; char ugname[128]; long uglsn; int upload_length; @@ -193,48 +204,66 @@ struct wcsession { int need_regi; /* This user needs to register. */ int need_vali; /* New users require validation. */ char cs_inet_email[SIZ]; /* User's preferred Internet addr. */ - pthread_mutex_t SessionMutex; /* mutex for exclusive access */ - time_t lastreq; /* Timestamp of most recent HTTP */ + pthread_mutex_t SessionMutex; /* mutex for exclusive access */ + time_t lastreq; /* Timestamp of most recent HTTP */ int killthis; /* Nonzero == purge this session */ struct march *march; /* march mode room list */ char reply_to[SIZ]; /* reply-to address */ long msgarr[4096]; /* for read operations */ - int fake_frames; int is_wap; /* Client is a WAP gateway */ struct urlcontent *urlstrings; - int HaveExpressMessages; /* Nonzero if incoming msgs exist */ + int HaveInstantMessages; /* Nonzero if incoming msgs exist */ struct wcsubst *vars; char this_page[SIZ]; /* address of current page */ char http_host[SIZ]; /* HTTP Host: header */ char *preferences; -#ifdef HAVE_ICAL_H - icalcomponent **disp_cal; /* store calendar items for display */ - long *cal_msgnum; /* store calendar msgids for display */ +#ifdef WEBCIT_WITH_CALENDAR_SERVICE + struct disp_cal { + icalcomponent *cal; /* cal items for display */ + long cal_msgnum; /* cal msgids for display */ + } *disp_cal; int num_cal; #endif struct wc_attachment *first_attachment; char ImportantMessage[SIZ]; + char last_chat_user[SIZ]; + int ctdl_pid; /* Session ID on the Citadel server */ + char httpauth_user[SIZ]; /* only for GroupDAV sessions */ + char httpauth_pass[SIZ]; /* only for GroupDAV sessions */ + + size_t burst_len; + char *burst; + int gzip_ok; /* Nonzero if Accept-encoding: gzip */ }; -#define extract(dest,source,parmnum) extract_token(dest,source,parmnum,'|') #define num_parms(source) num_tokens(source, '|') +/* Per-session data */ #define WC ((struct wcsession *)pthread_getspecific(MyConKey)) extern pthread_key_t MyConKey; +/* Per-thread SSL context */ +#ifdef HAVE_OPENSSL +#define THREADSSL ((SSL *)pthread_getspecific(ThreadSSL)) +extern pthread_key_t ThreadSSL; +#endif + struct serv_info serv_info; extern char floorlist[128][SIZ]; extern char *axdefs[]; extern char *ctdlhost, *ctdlport; extern char *server_cookie; - -extern struct wcsubst *global_subst; - +extern int is_https; +extern int setup_wizard; +extern char wizard_filename[]; +void do_setup_wizard(void); void stuff_to_cookie(char *cookie, int session, char *user, char *pass, char *room); void cookie_to_stuff(char *cookie, int *session, - char *user, char *pass, char *room); + char *user, size_t user_len, + char *pass, size_t pass_len, + char *room, size_t room_len); void locate_host(char *, int); void become_logged_in(char *, char *, char *); void do_login(void); @@ -242,6 +271,7 @@ void display_login(char *mesg); void do_welcome(void); void do_logout(void); void display_main_menu(void); +void display_aide_menu(void); void display_advanced_menu(void); void slrp_highest(void); void gotonext(void); @@ -258,15 +288,25 @@ void serv_printf(const char *format,...); char *bstr(char *key); void urlesc(char *, char *); void urlescputs(char *); -void output_headers(int); +void jsesc(char *, char *); +void jsescputs(char *); +void output_headers( int do_httpheaders, + int do_htmlhead, + int do_room_banner, + int unset_cookies, + int refresh30, + int suppress_check, + int cache); void wprintf(const char *format,...); void output_static(char *what); -void stresc(char *target, char *strbuf, int nbsp); +void stresc(char *target, char *strbuf, int nbsp, int nolinebreaks); void escputs(char *strbuf); void url(char *buf); -void escputs1(char *strbuf, int nbsp); -long extract_long(char *source, long int parmnum); -int extract_int(char *source, int parmnum); +void escputs1(char *strbuf, int nbsp, int nolinebreaks); +void msgesc(char *target, char *strbuf); +void msgescputs(char *strbuf); +int extract_int(const char *source, int parmnum); +long extract_long(const char *source, int parmnum); void stripout(char *str, char leftboundary, char rightboundary); void dump_vars(void); void embed_main_menu(void); @@ -297,11 +337,12 @@ void display_editroom(void); void netedit(void); void editroom(void); void display_whok(void); +void do_invt_kick(void); void server_to_text(void); void save_edit(char *description, char *enter_cmd, int regoto); void display_edit(char *description, char *check_cmd, - char *read_cmd, char *save_cmd, int headers_type); -void gotoroom(char *gname, int display_name); + char *read_cmd, char *save_cmd, int with_room_banner); +void gotoroom(char *gname); void confirm_delete_room(void); void delete_room(void); void validate(void); @@ -330,7 +371,6 @@ void siteconfig(void); void display_generic(void); void do_generic(void); void display_menubar(int); -void embed_room_banner(char *); void smart_goto(char *); void worker_entry(void); void session_loop(struct httprequest *); @@ -339,6 +379,8 @@ void fmt_time(char *buf, time_t thetime); void httpdate(char *buf, time_t thetime); void end_webcit_session(void); void page_popup(void); +void chat_recv(void); +void chat_send(void); void http_redirect(char *); void clear_local_substs(void); void svprintf(char *keyname, int keytype, const char *format,...); @@ -347,7 +389,7 @@ void do_template(void *templatename); int lingering_close(int fd); char *memreadline(char *start, char *buf, int maxlen); int num_tokens (char *source, char tok); -void extract_token(char *dest, char *source, int parmnum, char separator); +void extract_token(char *dest, const char *source, int parmnum, char separator, int maxlen); void remove_token(char *source, int parmnum, char separator); char *load_mimepart(long msgnum, char *partnum); int pattern2(char *search, char *patn); @@ -356,21 +398,24 @@ void edit_vcard(void); void submit_vcard(void); void striplt(char *); void select_user_to_edit(char *message, char *preselect); -void display_edituser(char *who); +void delete_user(char *); +void display_edituser(char *who, int is_new); void create_user(void); void edituser(void); +void do_change_view(int); void change_view(void); void folders(void); void do_stuff_to_msgs(void); void load_preferences(void); void save_preferences(void); -void get_preference(char *key, char *value); +void get_preference(char *key, char *value, size_t value_len); void set_preference(char *key, char *value); void knrooms(void); int is_msg_in_mset(char *mset, long msgnum); char *safestrncpy(char *dest, const char *src, size_t n); void display_addressbook(long msgnum, char alpha); void offer_start_page(void); +void convenience_page(char *titlebarcolor, char *titlebarmsg, char *messagetext); void change_start_page(void); void output_html(void); void display_floorconfig(char *); @@ -384,16 +429,22 @@ ssize_t write(int fd, const void *buf, size_t count); void cal_process_attachment(char *part_source, long msgnum, char *cal_partnum); void display_calendar(long msgnum); void display_task(long msgnum); +void display_note(long msgnum); void do_calendar_view(void); +void do_tasks_view(void); void free_calendar_buffer(void); void calendar_summary_view(void); int load_msg_ptrs(char *servcmd); void CtdlEncodeBase64(char *dest, const char *source, size_t sourcelen); int CtdlDecodeBase64(char *dest, const char *source, size_t length); void free_attachments(struct wcsession *sess); +void set_room_policy(void); +void display_inetconf(void); +void save_inetconf(void); +void generate_uuid(char *); -#ifdef HAVE_ICAL_H +#ifdef WEBCIT_WITH_CALENDAR_SERVICE void display_edit_task(void); void save_task(void); void display_edit_event(void); @@ -402,7 +453,6 @@ void display_icaltimetype_as_webform(struct icaltimetype *, char *); struct icaltimetype icaltime_from_webform(char *prefix); void display_edit_individual_event(icalcomponent *supplied_vtodo, long msgnum); void save_individual_event(icalcomponent *supplied_vtodo, long msgnum); -void generate_new_uid(char *); void respond_to_request(void); void handle_rsvp(void); void ical_dezonify(icalcomponent *cal); @@ -425,3 +475,50 @@ void unescape_input(char *buf); void do_iconbar(void); void display_customize_iconbar(void); void commit_iconbar(void); +int CtdlDecodeQuotedPrintable(char *decoded, char *encoded, int sourcelen); +void spawn_another_worker_thread(void); + +void embed_room_banner(char *, int); +/* navbar types that can be passed to embed_room_banner */ +enum { + navbar_none, + navbar_default +}; + + +#ifdef HAVE_OPENSSL +void init_ssl(void); +void endtls(void); +void ssl_lock(int mode, int n, const char *file, int line); +int starttls(int sock); +extern SSL_CTX *ssl_ctx; +int client_read_ssl(char *buf, int bytes, int timeout); +void client_write_ssl(char *buf, int nbytes); +#endif + +#ifdef HAVE_ZLIB +#include +int ZEXPORT compress_gzip(Bytef * dest, uLongf * destLen, + const Bytef * source, uLong sourceLen, int level); +#endif + + +void begin_burst(void); +void end_burst(void); + +extern char *ascmonths[]; +void http_datestring(char *buf, size_t n, time_t xtime); + + +/* Views (from citadel.h) */ +#define VIEW_BBS 0 /* Traditional Citadel BBS view */ +#define VIEW_MAILBOX 1 /* Mailbox summary */ +#define VIEW_ADDRESSBOOK 2 /* Address book view */ +#define VIEW_CALENDAR 3 /* Calendar view */ +#define VIEW_TASKS 4 /* Tasks view */ +#define VIEW_NOTES 5 /* Notes view */ + + +/* These should be empty, but we have them for testing */ +#define DEFAULT_HTTPAUTH_USER "" +#define DEFAULT_HTTPAUTH_PASS ""