From 05a37d9e4281d249bae964d81fa7950a53ac3538 Mon Sep 17 00:00:00 2001 From: Stefan Ritt Date: Mon, 17 Feb 2003 15:08:53 +0000 Subject: [PATCH] Incresed attribute value size to 1000 Bytes SVN revision: 398 --- src/elogd.c | 201 ++++++++++++++++++++++++++-------------------------- 1 file changed, 102 insertions(+), 99 deletions(-) diff --git a/src/elogd.c b/src/elogd.c index 546f428b..1d34383f 100755 --- a/src/elogd.c +++ b/src/elogd.c @@ -6,6 +6,9 @@ Contents: Web server program for Electronic Logbook ELOG $Log$ + Revision 1.15 2003/02/17 15:08:53 midas + Incresed attribute value size to 1000 Bytes + Revision 1.14 2003/02/16 13:29:02 midas Added option 'Reply string' @@ -621,22 +624,23 @@ typedef int INT; #define TELL(fh) lseek(fh, 0, SEEK_CUR) -#define NAME_LENGTH 256 -#define SUCCESS 1 +#define NAME_LENGTH 500 -#define EL_SUCCESS 1 -#define EL_FIRST_MSG 2 -#define EL_LAST_MSG 3 -#define EL_NO_MSG 4 -#define EL_FILE_ERROR 5 -#define EL_UPGRADE 6 -#define EL_EMPTY 7 -#define EL_MEM_ERROR 8 +#define SUCCESS 1 -#define EL_FIRST 1 -#define EL_LAST 2 -#define EL_NEXT 3 -#define EL_PREV 4 +#define EL_SUCCESS 1 +#define EL_FIRST_MSG 2 +#define EL_LAST_MSG 3 +#define EL_NO_MSG 4 +#define EL_FILE_ERROR 5 +#define EL_UPGRADE 6 +#define EL_EMPTY 7 +#define EL_MEM_ERROR 8 + +#define EL_FIRST 1 +#define EL_LAST 2 +#define EL_NEXT 3 +#define EL_PREV 4 #define WEB_BUFFER_SIZE 2000000 @@ -660,14 +664,12 @@ char theme_name[80]; #define MAX_ATTACHMENTS 20 #define MAX_N_LIST 100 #define MAX_N_ATTR 50 -#define VALUE_SIZE 256 -#define PARAM_LENGTH 256 #define CMD_SIZE 10000 #define TEXT_SIZE 100000 #define MAX_PATH_LENGTH 256 -char _param[MAX_PARAM][PARAM_LENGTH]; -char _value[MAX_PARAM][VALUE_SIZE]; +char _param[MAX_PARAM][NAME_LENGTH]; +char _value[MAX_PARAM][NAME_LENGTH]; char _mtext[TEXT_SIZE]; char _cmdline[CMD_SIZE]; char *_attachment_buffer; @@ -901,7 +903,7 @@ void strsubst(char *string, char name[][NAME_LENGTH], char value[][NAME_LENGTH], /* subsitute "$name" with value corresponding to name */ { int i, j; -char tmp[1000], str[256], uattr[256], *ps, *pt, *p; +char tmp[1000], str[NAME_LENGTH], uattr[NAME_LENGTH], *ps, *pt, *p; pt = tmp; ps = string; @@ -999,7 +1001,7 @@ void url_encode(char *ps, int size) Encode the given string in-place by adding %XX escapes \********************************************************************/ { -char *pd, *p, str[256]; +char *pd, *p, str[NAME_LENGTH]; pd = str; p = ps; @@ -1144,9 +1146,9 @@ INT sendmail(char *smtp_host, char *from, char *to, char *subject, char *text, B { struct sockaddr_in bind_addr; struct hostent *phe; -int i, n, s, offset; +int i, n, s, offset, strsize; char buf[80]; -char str[TEXT_SIZE+1000]; +char *str; time_t now; struct tm *ts; char list[1024][NAME_LENGTH]; @@ -1175,27 +1177,30 @@ char list[1024][NAME_LENGTH]; return -1; } - recv_string(s, str, sizeof(str), 10000); + strsize = TEXT_SIZE+1000; + str = malloc(strsize); + + recv_string(s, str, strsize, 10000); if (verbose) puts(str); /* drain server messages */ do { str[0] = 0; - recv_string(s, str, sizeof(str), 300); + recv_string(s, str, strsize, 300); if (verbose) puts(str); } while (str[0]); - snprintf(str, sizeof(str) - 1, "HELO %s\r\n", host_name); + snprintf(str, strsize - 1, "HELO %s\r\n", host_name); send(s, str, strlen(str), 0); if (verbose) puts(str); - recv_string(s, str, sizeof(str), 3000); + recv_string(s, str, strsize, 3000); if (verbose) puts(str); - snprintf(str, sizeof(str) - 1, "MAIL FROM: <%s>\r\n", from); + snprintf(str, strsize - 1, "MAIL FROM: <%s>\r\n", from); send(s, str, strlen(str), 0); if (verbose) puts(str); - recv_string(s, str, sizeof(str), 3000); + recv_string(s, str, strsize, 3000); if (verbose) puts(str); /* break recipients into list */ @@ -1203,32 +1208,32 @@ char list[1024][NAME_LENGTH]; for (i=0 ; i\r\n", list[i]); + snprintf(str, strsize - 1, "RCPT TO: <%s>\r\n", list[i]); send(s, str, strlen(str), 0); if (verbose) puts(str); - recv_string(s, str, sizeof(str), 3000); + recv_string(s, str, strsize, 3000); if (verbose) puts(str); } - snprintf(str, sizeof(str) - 1, "DATA\r\n"); + snprintf(str, strsize - 1, "DATA\r\n"); send(s, str, strlen(str), 0); if (verbose) puts(str); - recv_string(s, str, sizeof(str), 3000); + recv_string(s, str, strsize, 3000); if (verbose) puts(str); if (email_to) - snprintf(str, sizeof(str) - 1, "To: %s\r\n", to); + snprintf(str, strsize - 1, "To: %s\r\n", to); else - snprintf(str, sizeof(str) - 1, "To: ELOG user\r\n"); + snprintf(str, strsize - 1, "To: ELOG user\r\n"); send(s, str, strlen(str), 0); if (verbose) puts(str); - snprintf(str, sizeof(str) - 1, "From: %s\r\nSubject: %s\r\n", from, subject); + snprintf(str, strsize - 1, "From: %s\r\nSubject: %s\r\n", from, subject); send(s, str, strlen(str), 0); if (verbose) puts(str); - snprintf(str, sizeof(str) - 1, "Content-Type: text/plain\r\n"); + snprintf(str, strsize - 1, "Content-Type: text/plain\r\n"); send(s, str, strlen(str), 0); if (verbose) puts(str); @@ -1238,24 +1243,25 @@ char list[1024][NAME_LENGTH]; offset = (-(int)timezone); if (ts->tm_isdst) offset += 3600; - snprintf(str, sizeof(str) - 1, "Date: %s %+03d%02d\r\n\r\n", buf, + snprintf(str, strsize - 1, "Date: %s %+03d%02d\r\n\r\n", buf, (int) (offset/3600), (int) ((abs((int)offset)/60) % 60)); send(s, str, strlen(str), 0); if (verbose) puts(str); - snprintf(str, sizeof(str) - 1, "%s\r\n.\r\n", text); + snprintf(str, strsize - 1, "%s\r\n.\r\n", text); send(s, str, strlen(str), 0); if (verbose) puts(str); - recv_string(s, str, sizeof(str), 3000); + recv_string(s, str, strsize, 3000); if (verbose) puts(str); - snprintf(str, sizeof(str) - 1, "QUIT\r\n"); + snprintf(str, strsize - 1, "QUIT\r\n"); send(s, str, strlen(str), 0); if (verbose) puts(str); - recv_string(s, str, sizeof(str), 3000); + recv_string(s, str, strsize, 3000); if (verbose) puts(str); closesocket(s); + free(str); return 1; } @@ -1850,7 +1856,7 @@ int eli_compare(const void *e1, const void *e2) int el_build_index(LOGBOOK *lbs, BOOL rebuild) /* scan all ??????a.log files and build an index table in eli[] */ { -char *file_list, str[256], date[256], dir[256], file_name[256], *buffer, *p, +char *file_list, str[256], date[256], dir[256], file_name[MAX_PATH_LENGTH], *buffer, *p, in_reply_to[80]; int index, n, length; int i, fh; @@ -2261,7 +2267,7 @@ INT el_retrieve(LOGBOOK *lbs, char attrib[MAX_N_ATTR][NAME_LENGTH], int n_attr, char *text, int *textsize, char *in_reply_to, char *reply_to, - char attachment[MAX_ATTACHMENTS][256], + char attachment[MAX_ATTACHMENTS][MAX_PATH_LENGTH], char *encoding) /********************************************************************\ @@ -2296,7 +2302,7 @@ INT el_retrieve(LOGBOOK *lbs, \********************************************************************/ { int i, index, size, fh; -char str[256], file_name[256], *p; +char str[NAME_LENGTH], file_name[256], *p; char message[TEXT_SIZE+1000], attachment_all[64*MAX_ATTACHMENTS]; if (message_id == 0) @@ -2445,7 +2451,7 @@ char message[TEXT_SIZE+1000], attachment_all[64*MAX_ATTACHMENTS]; int el_submit_attachment(LOGBOOK *lbs, char *afilename, char *buffer, int buffer_size, char *full_name) { -char file_name[256], dir[256], str[256], *p; +char file_name[MAX_PATH_LENGTH], dir[MAX_PATH_LENGTH], str[MAX_PATH_LENGTH], *p; int fh; time_t now; struct tm tms; @@ -2500,7 +2506,7 @@ struct tm tms; void el_delete_attachment(LOGBOOK *lbs, char *file_name) { -char str[256]; +char str[MAX_PATH_LENGTH]; strlcpy(str, lbs->data_dir, sizeof(str)); strlcat(str, file_name, sizeof(str)); @@ -2550,8 +2556,7 @@ int el_submit(LOGBOOK *lbs, int message_id, { INT n, i, j, size, fh, index, tail_size, orig_size, delta, reply_id; struct tm tms; -char file_name[256], dir[256], str[256], - rep1[256], rep2[256]; +char file_name[256], dir[256], str[NAME_LENGTH]; time_t now, ltime; char message[TEXT_SIZE+100], *p, *buffer; BOOL bedit; @@ -2560,7 +2565,6 @@ BOOL bedit; strcpy(dir, lbs->data_dir); bedit = (message_id > 0); - rep1[0] = rep2[0] = 0; if (bedit) { @@ -2857,7 +2861,7 @@ int size, status; /*------------------------------------------------------------------*/ INT el_delete_message(LOGBOOK *lbs, int message_id, BOOL delete_attachments, - char attachment[MAX_ATTACHMENTS][256], BOOL delete_bw_ref, + char attachment[MAX_ATTACHMENTS][MAX_PATH_LENGTH], BOOL delete_bw_ref, BOOL delete_reply_to) /********************************************************************\ @@ -2882,7 +2886,7 @@ INT el_delete_message(LOGBOOK *lbs, int message_id, BOOL delete_attachments, \********************************************************************/ { INT i, index, n, size, fh, tail_size; -char str[256], file_name[256], reply_to[80], in_reply_to[256]; +char str[MAX_PATH_LENGTH], file_name[MAX_PATH_LENGTH], reply_to[80], in_reply_to[256]; char *buffer, *p; char message[TEXT_SIZE+1000], attachment_all[64*MAX_ATTACHMENTS]; @@ -3391,23 +3395,23 @@ char str[10000]; if (i= PARAM_LENGTH) + if (strlen(param) >= NAME_LENGTH) { sprintf(str, "Error: Parameter name too big (%d bytes).\n", strlen(param)); show_error(str); return 0; } - strlcpy(_param[i], param, PARAM_LENGTH); + strlcpy(_param[i], param, NAME_LENGTH); - if (strlen(value) >= VALUE_SIZE) + if (strlen(value) >= NAME_LENGTH) { - sprintf(str, "Error: Parameter value for parameter %s too big (%d bytes). Please increase VALUE_SIZE and recompile elogd\n", param, strlen(value)); + sprintf(str, "Error: Parameter value for parameter %s too big (%d bytes). Please increase NAME_LENGTH and recompile elogd\n", param, strlen(value)); show_error(str); return 0; } - strlcpy(_value[i], value, VALUE_SIZE); + strlcpy(_value[i], value, NAME_LENGTH); } else { @@ -3463,8 +3467,8 @@ int i; { for ( ; iname); + url_encode(str, sizeof(str)); + rsprintf(" path=%s%s;", str, lbs->name_enc); } else - rsprintf(" path=/%s;", lbs->name); + rsprintf(" path=/%s;", lbs->name_enc); } exp = atof(expiration); @@ -3692,7 +3698,7 @@ int scan_attributes(char *logbook) /* scan configuration file for attributes and fill attr_list, attr_options and attr_flags arrays */ { -char list[10000], str[256], tmp_list[MAX_N_ATTR][NAME_LENGTH]; +char list[10000], str[NAME_LENGTH], tmp_list[MAX_N_ATTR][NAME_LENGTH]; int i, j, n, m; if (getcfg(logbook, "Attributes", list)) @@ -4211,7 +4217,7 @@ BOOL global; void send_file_direct(char *file_name) { int fh, i, length; -char str[256]; +char str[MAX_PATH_LENGTH]; time_t now; struct tm *gmt; @@ -4337,7 +4343,7 @@ int build_subst_list(LOGBOOK *lbs, char list[][NAME_LENGTH], char value[][NAME_LENGTH], char attrib[][NAME_LENGTH]) { int i; -char str[256], format[256]; +char str[NAME_LENGTH], format[256]; time_t now; struct tm *ts; @@ -4750,16 +4756,12 @@ time_t now; sprintf(str, "Subst on edit %s", attr_list[index]); if (getcfg(lbs->name, str, preset)) { - /* check if already second reply */ - if (orig_tag[0] == 0) - { - i = build_subst_list(lbs, slist, svalue, attrib); - strsubst(preset, slist, svalue, i); - if (strncmp(preset, "
", 4) == 0) - strcpy(attrib[index], preset+4); - else - strcpy(attrib[index], preset); - } + i = build_subst_list(lbs, slist, svalue, attrib); + strsubst(preset, slist, svalue, i); + if (strncmp(preset, "
", 4) == 0) + strcpy(attrib[index], preset+4); + else + strcpy(attrib[index], preset); } } } @@ -5277,7 +5279,7 @@ time_t now; void show_find_form(LOGBOOK *lbs) { int i, j; -char str[256], mode[256]; +char str[NAME_LENGTH], mode[256]; /*---- header ----*/ @@ -5467,7 +5469,7 @@ void show_admin_page(LOGBOOK *lbs) { int fh, length; char *buffer; -char str[256]; +char str[NAME_LENGTH]; /*---- header ----*/ @@ -6255,11 +6257,7 @@ int show_download_page(LOGBOOK *lbs, char *path) char file_name[256]; int index, message_id, fh, i, size; char message[TEXT_SIZE+1000], *p; -/* -char str[256]; -time_t now; -struct tm *gmt; -*/ + message_id = atoi(path); for (index = 0 ; index < *lbs->n_el_index ; index++) @@ -6337,12 +6335,12 @@ void display_line(LOGBOOK *lbs, int message_id, int number, char *mode, int n_attr_disp, char disp_attr[MAX_N_ATTR+4][NAME_LENGTH], char attrib[MAX_N_ATTR][NAME_LENGTH], int n_attr, char *text, - char attachment[MAX_ATTACHMENTS][256], char *encoding, + char attachment[MAX_ATTACHMENTS][MAX_PATH_LENGTH], char *encoding, BOOL select, int *n_display) { -char str[256], ref[256], *nowrap, sclass[80], format[256], file_name[256]; +char str[NAME_LENGTH], ref[256], *nowrap, sclass[80], format[256], file_name[MAX_PATH_LENGTH]; char slist[MAX_N_ATTR+10][NAME_LENGTH], svalue[MAX_N_ATTR+10][NAME_LENGTH]; -char display[256], attr_icon[80]; +char display[NAME_LENGTH], attr_icon[80]; int i, j, i_line, index, colspan; BOOL skip_comma; FILE *f; @@ -6794,7 +6792,7 @@ void display_reply(LOGBOOK *lbs, int message_id, int printable, int expand, int int n_attr_disp, char disp_attr[MAX_N_ATTR+4][NAME_LENGTH], int level) { char date[80], *text, in_reply_to[80], reply_to[256], encoding[80], - attachment[MAX_ATTACHMENTS][NAME_LENGTH], attrib[MAX_N_ATTR][NAME_LENGTH]; + attachment[MAX_ATTACHMENTS][MAX_PATH_LENGTH], attrib[MAX_N_ATTR][NAME_LENGTH]; int status, size; char *p; @@ -7103,7 +7101,7 @@ void show_page_filters(LOGBOOK *lbs, int n_msg, int page_n, int n_page, BOOL top BOOL threaded) { int cur_exp, n, i, j, index; -char ref[256], str[256]; +char ref[256], str[NAME_LENGTH]; char list[MAX_N_LIST][NAME_LENGTH]; rsprintf("\n"); @@ -7353,7 +7351,7 @@ char ref[256]; void show_select_navigation(LOGBOOK *lbs) { int i, n_log; -char str[256]; +char str[NAME_LENGTH]; char lbk_list[MAX_N_LIST][NAME_LENGTH]; rsprintf("\n"); @@ -7459,8 +7457,8 @@ int current_year, current_month, current_day, printable, n_logbook, n_display in_reply_to_id; char date[80], attrib[MAX_N_ATTR][NAME_LENGTH], disp_attr[MAX_N_ATTR+4][NAME_LENGTH], list[10000], text[TEXT_SIZE], text1[TEXT_SIZE], text2[TEXT_SIZE], - in_reply_to[80], reply_to[256], attachment[MAX_ATTACHMENTS][256], encoding[80]; -char str[256], ref[256], img[80]; + in_reply_to[80], reply_to[256], attachment[MAX_ATTACHMENTS][MAX_PATH_LENGTH], encoding[80]; +char str[NAME_LENGTH], ref[256], img[80]; char mode[80]; char menu_str[1000], menu_item[MAX_N_LIST][NAME_LENGTH]; char *p , *pt, *pt1, *pt2; @@ -8527,7 +8525,7 @@ int compose_mail(LOGBOOK *lbs, char *mail_to, int message_id, char attrib[MAX_N_ char *mail_param, int old_mail) { int i, j, n; -char str[256], mail_from[256], mail_text[TEXT_SIZE+1000], smtp_host[256], subject[256]; +char str[NAME_LENGTH+100], mail_from[256], *mail_text, smtp_host[256], subject[256]; char slist[MAX_N_ATTR+10][NAME_LENGTH], svalue[MAX_N_ATTR+10][NAME_LENGTH]; char list[MAX_PARAM][NAME_LENGTH]; @@ -8545,6 +8543,8 @@ char list[MAX_PARAM][NAME_LENGTH]; else sprintf(mail_from, "ELog@%s", host_name); + mail_text = malloc(TEXT_SIZE+1000); + if (old_mail) sprintf(mail_text, loc("A old entry has been updated on %s"), host_name); else @@ -8629,6 +8629,8 @@ char list[MAX_PARAM][NAME_LENGTH]; } } + free(mail_text); + return 1; } @@ -8636,9 +8638,9 @@ char list[MAX_PARAM][NAME_LENGTH]; void submit_elog(LOGBOOK *lbs) { -char str[256], file_name[256], error[1000], date[80], +char str[1000], file_name[256], error[1000], date[80], mail_list[MAX_N_LIST][NAME_LENGTH], list[10000], - attrib[MAX_N_ATTR][NAME_LENGTH], subst_str[256], in_reply_to[80], + attrib[MAX_N_ATTR][NAME_LENGTH], subst_str[MAX_PATH_LENGTH], in_reply_to[80], reply_to[256], user[256], user_email[256], email_notify[256]; char mail_param[1000], *mail_to; char att_file[MAX_ATTACHMENTS][256]; @@ -8919,9 +8921,9 @@ int i, j, n, missing, first, index, suppress, message_id, resubmit_orig, mail void copy_to(LOGBOOK *lbs, int src_id, char *dest_logbook, int move) { int size, i, n, n_done, index, status, fh, source_id, message_id; -char str[256], file_name[256], attrib[MAX_N_ATTR][NAME_LENGTH]; +char str[256], file_name[MAX_PATH_LENGTH], attrib[MAX_N_ATTR][NAME_LENGTH]; char date[80], text[TEXT_SIZE], msg_str[32], in_reply_to[80], reply_to[256], - attachment[MAX_ATTACHMENTS][256], encoding[80], *buffer; + attachment[MAX_ATTACHMENTS][MAX_PATH_LENGTH], encoding[80], *buffer; LOGBOOK *lbs_dest; for (i=0 ; lb_list[i].name[0] ; i++) @@ -9086,7 +9088,7 @@ int size, i, j, n, n_log, status, fh, length, message_error, index; int message_id, orig_message_id; char str[1000], ref[256], file_name[256], attrib[MAX_N_ATTR][NAME_LENGTH]; char date[80], text[TEXT_SIZE], menu_str[1000], cmd[256], cmd_enc[256], - orig_tag[80], reply_tag[256], attachment[MAX_ATTACHMENTS][256], encoding[80], att[256], lattr[256]; + orig_tag[80], reply_tag[256], attachment[MAX_ATTACHMENTS][MAX_PATH_LENGTH], encoding[80], att[256], lattr[256]; char menu_item[MAX_N_LIST][NAME_LENGTH], format[80], admin_user[80], slist[MAX_N_ATTR+10][NAME_LENGTH], svalue[MAX_N_ATTR+10][NAME_LENGTH], *p; char lbk_list[MAX_N_LIST][NAME_LENGTH]; @@ -10178,7 +10180,7 @@ void interprete(char *lbook, char *path) { int i, j, n, index, lb_index, message_id; char exp[80]; -char str[256], enc_pwd[80], file_name[256], command[80], ref[256]; +char str[NAME_LENGTH], enc_pwd[80], file_name[256], command[80], ref[256]; char enc_path[256], dec_path[256], logbook[256], logbook_enc[256]; char *experiment, *value, *group, css[256]; BOOL global; @@ -10935,7 +10937,8 @@ char *p, *pitem; void decode_post(LOGBOOK *lbs, char *string, char *boundary, int length) { int n_att; -char *pinit, *p, *ptmp, file_name[256], full_name[256], str[256], line[256], item[256]; +char *pinit, *p, *ptmp, file_name[256], full_name[256], + str[NAME_LENGTH], line[NAME_LENGTH], item[NAME_LENGTH]; n_att = 0;