diff --git a/src/elogd.c b/src/elogd.c index 3de60182..e00af32e 100755 --- a/src/elogd.c +++ b/src/elogd.c @@ -398,7 +398,7 @@ void show_error(char *error); BOOL enum_user_line(LOGBOOK * lbs, int n, char *user, int size); int get_user_line(LOGBOOK * lbs, char *user, char *password, char *full_name, char *email, BOOL email_notify[1000], time_t * last_access); -int strbreak(char *str, char list[][NAME_LENGTH], int size, char *brk); +int strbreak(char *str, char list[][NAME_LENGTH], int size, char *brk, BOOL ignore_quotes); int execute_shell(LOGBOOK * lbs, int message_id, char attrib[MAX_N_ATTR][NAME_LENGTH], char att_file[MAX_ATTACHMENTS][256], char *sh_cmd); BOOL isparam(char *param); @@ -1990,7 +1990,8 @@ int recv_string(int sock, char *buffer, int buffer_size, int millisec) void compose_email_header(LOGBOOK * lbs, char *subject, char *from, char *to, char *url, char *mail_text, int size, int mail_encoding, - int n_attachments, char *multipart_boundary) + int n_attachments, char *multipart_boundary, int message_id, + int reply_id) { char buffer[256], charset[256], subject_enc[5000]; char buf[80], str[256]; @@ -2074,6 +2075,20 @@ void compose_email_header(LOGBOOK * lbs, char *subject, char *from, char *to, snprintf(mail_text + strlen(mail_text), size - strlen(mail_text) - 1, "Subject: %s\r\n", subject_enc); + if (strchr(from, '@')) { + strlcpy(str, strchr(from, '@')+1, sizeof(str)); + if (strchr(str, '>')) + *strchr(str, '>') = 0; + } else + strlcpy(str, "elog.org", sizeof(str)); + + if (message_id) + snprintf(mail_text + strlen(mail_text), size - strlen(mail_text) - 1, "Message-ID: <%s-%d@%s>\r\n", + lbs->name_enc, message_id, str); + if (reply_id) + snprintf(mail_text + strlen(mail_text), size - strlen(mail_text) - 1, "In-Reply-To: <%s-%d@%s>\r\n", + lbs->name_enc, reply_id, str); + if (url) snprintf(mail_text + strlen(mail_text), size - strlen(mail_text) - 1, "X-Elog-URL: %s\r\n", url); @@ -2277,7 +2292,7 @@ int sendmail(LOGBOOK * lbs, char *smtp_host, char *from, char *to, char *text, c goto smtp_error; /* break recipients into list */ - n = strbreak(to, list, 1024, ","); + n = strbreak(to, list, 1024, ",", FALSE); for (i = 0; i < n; i++) { if (list[i] == 0 || strchr(list[i], '@') == NULL) @@ -2730,8 +2745,8 @@ BOOL match_param(char *str, char *param, int conditional_only) if (strchr(pcond, '{')) *strchr(pcond, '{') = ' '; - npl = strbreak(pcond, plist, 10, ","); - ncl = strbreak(_condition, clist, 10, ","); + npl = strbreak(pcond, plist, 10, ",", FALSE); + ncl = strbreak(_condition, clist, 10, ",", FALSE); for (i = 0; i < ncl; i++) for (j = 0; j < npl; j++) @@ -2743,7 +2758,7 @@ BOOL match_param(char *str, char *param, int conditional_only) /* check and'ed conditions */ for (i = 0; i < npl; i++) if (strchr(plist[i], '&')) { - nand = strbreak(plist[i], alist, 10, "&"); + nand = strbreak(plist[i], alist, 10, "&", FALSE); for (j = 0; j < nand; j++) { for (k = 0; k < ncl; k++) if (stricmp(clist[k], alist[j]) == 0) @@ -4678,11 +4693,11 @@ int el_submit(LOGBOOK * lbs, int message_id, BOOL bedit, close(fh); /* if reply, mark original message */ + reply_id = atoi(in_reply_to); + if (mark_original && in_reply_to[0] && !bedit && atoi(in_reply_to) > 0) { char date[80], attr[MAX_N_ATTR][NAME_LENGTH], enc[80], att[MAX_ATTACHMENTS][256], - reply_to[MAX_REPLY_TO * 10], lock[256]; - - reply_id = atoi(in_reply_to); + reply_to[MAX_REPLY_TO * 10], in_reply_to[MAX_REPLY_TO * 10], lock[256]; /* retrieve original message */ size = TEXT_SIZE + 100; @@ -4969,13 +4984,13 @@ This routine corrects that. */ in_reply_to, reply_to, (void *) att_file, encoding, locked_by); /* go through in_reply_to list */ - n = strbreak(in_reply_to, list, MAX_N_ATTR, ","); + n = strbreak(in_reply_to, list, MAX_N_ATTR, ",", FALSE); for (i = 0; i < n; i++) { size = TEXT_SIZE; el_retrieve(lbs, atoi(list[i]), date, attr_list, (void *) attrib, lbs->n_attr, text, &size, in_reply_to, reply_to, (void *) att_file, encoding, locked_by); - n1 = strbreak(reply_to, list1, MAX_N_ATTR, ","); + n1 = strbreak(reply_to, list1, MAX_N_ATTR, ",", FALSE); reply_to[0] = 0; for (i1 = 0; i1 < n1; i1++) { /* replace old ID by new ID */ @@ -4996,13 +5011,13 @@ This routine corrects that. */ in_reply_to, reply_to, (void *) att_file, encoding, locked_by); /* go through reply_to list */ - n = strbreak(reply_to, list, MAX_N_ATTR, ","); + n = strbreak(reply_to, list, MAX_N_ATTR, ",", FALSE); for (i = 0; i < n; i++) { size = sizeof(text); el_retrieve(lbs, atoi(list[i]), date, attr_list, (void *) attrib, lbs->n_attr, text, &size, in_reply_to, reply_to, (void *) att_file, encoding, locked_by); - n1 = strbreak(in_reply_to, list1, MAX_N_ATTR, ","); + n1 = strbreak(in_reply_to, list1, MAX_N_ATTR, ",", FALSE); in_reply_to[0] = 0; for (i1 = 0; i1 < n1; i1++) { /* replace old ID by new ID */ @@ -5058,7 +5073,7 @@ int el_move_message_thread(LOGBOOK * lbs, int message_id) /* move all replies recursively */ if (getcfg(lbs->name, "Resubmit replies", str, sizeof(str)) && atoi(str) == 1) { if (reply_to[0]) { - n = strbreak(reply_to, list, MAX_N_ATTR, ","); + n = strbreak(reply_to, list, MAX_N_ATTR, ",", FALSE); for (i = 0; i < n; i++) el_move_message_thread(lbs, atoi(list[i])); } @@ -6664,7 +6679,7 @@ void redirect(LOGBOOK * lbs, char *rel_path) /*------------------------------------------------------------------*/ -int strbreak(char *str, char list[][NAME_LENGTH], int size, char *brk) +int strbreak(char *str, char list[][NAME_LENGTH], int size, char *brk, BOOL ignore_quotes) /* break comma-separated list into char array, stripping leading and trailing blanks */ { @@ -6680,7 +6695,7 @@ and trailing blanks */ p++; for (i = 0; *p && i < size; i++) { - if (*p == '"') { + if (*p == '"' && !ignore_quotes) { p++; j = 0; memset(list[i], 0, NAME_LENGTH); @@ -6712,8 +6727,10 @@ and trailing blanks */ strlcpy(list[i], p, NAME_LENGTH); for (j = 0; j < (int) strlen(list[i]); j++) - if (strchr(brk, list[i][j])) + if (strchr(brk, list[i][j])) { list[i][j] = 0; + break; + } p += strlen(list[i]); while (*p == ' ') @@ -6752,37 +6769,37 @@ and attr_flags arrays */ /* get attribute list */ memset(attr_list, 0, sizeof(attr_list)); - n = strbreak(list, attr_list, MAX_N_ATTR, ","); + n = strbreak(list, attr_list, MAX_N_ATTR, ",", FALSE); /* get options lists for attributes */ memset(attr_options, 0, sizeof(attr_options)); for (i = 0; i < n; i++) { sprintf(str, "Options %s", attr_list[i]); if (getcfg(logbook, str, list, sizeof(list))) - strbreak(list, attr_options[i], MAX_N_LIST, ","); + strbreak(list, attr_options[i], MAX_N_LIST, ",", FALSE); sprintf(str, "MOptions %s", attr_list[i]); if (getcfg(logbook, str, list, sizeof(list))) { - strbreak(list, attr_options[i], MAX_N_LIST, ","); + strbreak(list, attr_options[i], MAX_N_LIST, ",", FALSE); attr_flags[i] |= AF_MULTI; } sprintf(str, "ROptions %s", attr_list[i]); if (getcfg(logbook, str, list, sizeof(list))) { - strbreak(list, attr_options[i], MAX_N_LIST, ","); + strbreak(list, attr_options[i], MAX_N_LIST, ",", FALSE); attr_flags[i] |= AF_RADIO; } sprintf(str, "IOptions %s", attr_list[i]); if (getcfg(logbook, str, list, sizeof(list))) { - strbreak(list, attr_options[i], MAX_N_LIST, ","); + strbreak(list, attr_options[i], MAX_N_LIST, ",", FALSE); attr_flags[i] |= AF_ICON; } } /* check if attribute required */ getcfg(logbook, "Required Attributes", list, sizeof(list)); - m = strbreak(list, tmp_list, MAX_N_ATTR, ","); + m = strbreak(list, tmp_list, MAX_N_ATTR, ",", FALSE); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) if (strieq(attr_list[j], tmp_list[i])) @@ -6791,7 +6808,7 @@ and attr_flags arrays */ /* check if locked attribute */ getcfg(logbook, "Locked Attributes", list, sizeof(list)); - m = strbreak(list, tmp_list, MAX_N_ATTR, ","); + m = strbreak(list, tmp_list, MAX_N_ATTR, ",", FALSE); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) if (strieq(attr_list[j], tmp_list[i])) @@ -6800,7 +6817,7 @@ and attr_flags arrays */ /* check if fixed attribute for Edit */ getcfg(logbook, "Fixed Attributes Edit", list, sizeof(list)); - m = strbreak(list, tmp_list, MAX_N_ATTR, ","); + m = strbreak(list, tmp_list, MAX_N_ATTR, ",", FALSE); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) if (strieq(attr_list[j], tmp_list[i])) @@ -6809,7 +6826,7 @@ and attr_flags arrays */ /* check if fixed attribute for Reply */ getcfg(logbook, "Fixed Attributes Reply", list, sizeof(list)); - m = strbreak(list, tmp_list, MAX_N_ATTR, ","); + m = strbreak(list, tmp_list, MAX_N_ATTR, ",", FALSE); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) if (strieq(attr_list[j], tmp_list[i])) @@ -6818,7 +6835,7 @@ and attr_flags arrays */ /* check for extendable options */ getcfg(logbook, "Extendable Options", list, sizeof(list)); - m = strbreak(list, tmp_list, MAX_N_ATTR, ","); + m = strbreak(list, tmp_list, MAX_N_ATTR, ",", FALSE); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) if (strieq(attr_list[j], tmp_list[i])) @@ -6952,7 +6969,7 @@ void show_html_header(LOGBOOK * lbs, BOOL expires, char *title, BOOL close_head, strlcat(css, "default.css", sizeof(css)); if (strchr(css, ',')) { - n = strbreak(css, css_list, MAX_N_LIST, ","); + n = strbreak(css, css_list, MAX_N_LIST, ",", FALSE); for (i = 0; i < n; i++) { strlcpy(str, css_list[i], sizeof(str)); if (strchr(str, '&')) { @@ -7101,7 +7118,7 @@ LBLIST get_logbook_hierarchy(void) else strlcpy(root->member[n]->name, grpname + 10, 256); - m = strbreak(grpmembers, grplist, MAX_N_LIST, ","); + m = strbreak(grpmembers, grplist, MAX_N_LIST, ",", FALSE); root->member[n]->n_members = m; root->member[n]->member = xcalloc(sizeof(void *), m); @@ -7238,7 +7255,7 @@ void change_logbook_in_group(LOGBOOK * lbs, char *new_name) if (flag) { - n = strbreak(grpmembers, grplist, MAX_N_LIST, ","); + n = strbreak(grpmembers, grplist, MAX_N_LIST, ",", FALSE); for (j = 0; j < n; j++) { if (strieq(lbs->name, grplist[j])) { /* rename or remove logbook */ @@ -7274,7 +7291,7 @@ void add_logbook_to_group(LOGBOOK * lbs, char *new_name) if (flag) { - n = strbreak(grpmembers, grplist, MAX_N_LIST, ","); + n = strbreak(grpmembers, grplist, MAX_N_LIST, ",", FALSE); for (j = 0; j < n; j++) { if (strieq(lbs->name, grplist[j])) { /* rename or remove logbook */ @@ -8458,7 +8475,7 @@ void attrib_from_param(int n_attr, char attrib[MAX_N_ATTR][NAME_LENGTH]) for (i = 0; i < n_attr; i++) { strcpy(ua, attr_list[i]); btou(ua); - if (attr_flags[i] & (AF_MULTI | AF_MUSERLIST)) { + if (attr_flags[i] & (AF_MULTI | AF_MUSERLIST | AF_MUSEREMAIL)) { attrib[i][0] = 0; first = 1; for (j = 0; j < MAX_N_LIST; j++) { @@ -8581,7 +8598,8 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL att[MAX_ATTACHMENTS][256], encoding[80], slist[MAX_N_ATTR + 10][NAME_LENGTH], svalue[MAX_N_ATTR + 10][NAME_LENGTH], owner[256], locked_by[256], class_value[80], class_name[80], ua[NAME_LENGTH], mid[80], title[256], login_name[256], full_name[256], cookie[256], orig_author[256], - attr_moptions[MAX_N_LIST][NAME_LENGTH], ref[256], file_enc[256], tooltip[10000], enc_attr[NAME_LENGTH]; + attr_moptions[MAX_N_LIST][NAME_LENGTH], ref[256], file_enc[256], tooltip[10000], enc_attr[NAME_LENGTH], + user_email[256]; time_t now, ltime; char fl[8][NAME_LENGTH]; struct tm *pts; @@ -8911,7 +8929,7 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL /* remove attributes for replies */ if (breply) { getcfg(lbs->name, "Remove on reply", str, sizeof(str)); - n = strbreak(str, list, MAX_N_ATTR, ","); + n = strbreak(str, list, MAX_N_ATTR, ",", FALSE); for (i = 0; i < n; i++) for (j = 0; j < n_attr; j++) { if (strieq(attr_list[j], list[i])) @@ -9023,12 +9041,12 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL rsprintf(" return false;\n"); rsprintf(" }\n"); - } else if (attr_flags[i] & AF_MUSERLIST) { + } else if (attr_flags[i] & (AF_MUSERLIST | AF_MUSEREMAIL)) { rsprintf(" if (\n"); for (j = 0;; j++) { if (!enum_user_line(lbs, j, login_name, sizeof(login_name))) break; - get_user_line(lbs, login_name, NULL, full_name, NULL, NULL, NULL); + get_user_line(lbs, login_name, NULL, NULL, NULL, NULL, NULL); sprintf(str, "%s_%d", ua, j); rsprintf(" !document.form1.%s.checked", str); @@ -9323,7 +9341,7 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL format_flags[i] = 0; sprintf(str, "Format %s", attr_list[i]); if (getcfg(lbs->name, str, format, sizeof(format))) { - n = strbreak(format, fl, 8, ","); + n = strbreak(format, fl, 8, ",", FALSE); if (n > 0) format_flags[i] = atoi(fl[0]); } @@ -9333,7 +9351,7 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL /* generate list of attributes to show */ if (getcfg(lbs->name, "Show attributes edit", str, sizeof(str))) { - n_disp_attr = strbreak(str, list, MAX_N_ATTR, ","); + n_disp_attr = strbreak(str, list, MAX_N_ATTR, ",", FALSE); for (i = 0; i < n_disp_attr; i++) { for (j = 0; j < n_attr; j++) if (strieq(attr_list[j], list[i])) @@ -9364,7 +9382,7 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL sprintf(str, "Format %s", attr_list[index]); if (getcfg(lbs->name, str, format, sizeof(format))) { - n = strbreak(format, fl, 8, ","); + n = strbreak(format, fl, 8, ",", FALSE); if (n > 1) strlcpy(class_name, fl[1], sizeof(class_name)); if (n > 2) @@ -9450,6 +9468,18 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL if (strstr(attrib[index], full_name)) rsprintf("\n", str, full_name); } + } else if (attr_flags[index] & AF_MUSEREMAIL) { + + for (i = 0;; i++) { + if (!enum_user_line(lbs, i, login_name, sizeof(login_name))) + break; + get_user_line(lbs, login_name, NULL, NULL, user_email, NULL, NULL); + + sprintf(str, "%s_%d", ua, i); + + if (strstr(attrib[index], user_email)) + rsprintf("\n", str, user_email); + } } else if (attr_flags[index] & AF_ICON) { for (i = 0; i < MAX_N_LIST && attr_options[index][i][0]; i++) { sprintf(str, "%s_%d", ua, i); @@ -9538,7 +9568,7 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL /* display multiple check boxes with user names */ rsprintf("\n", title); - n_moptions = strbreak(attrib[index], attr_moptions, MAX_N_LIST, "|"); + n_moptions = strbreak(attrib[index], attr_moptions, MAX_N_LIST, "|", FALSE); for (i = 0;; i++) { if (!enum_user_line(lbs, i, login_name, sizeof(login_name))) break; @@ -9570,6 +9600,43 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL rsprintf("\n"); + } else if (attr_flags[index] & AF_MUSEREMAIL) { + + /* display multiple check boxes with user emails */ + rsprintf("\n", title); + + n_moptions = strbreak(attrib[index], attr_moptions, MAX_N_LIST, "|", FALSE); + for (i = 0;; i++) { + if (!enum_user_line(lbs, i, login_name, sizeof(login_name))) + break; + get_user_line(lbs, login_name, NULL, NULL, user_email, NULL, NULL); + + sprintf(str, "%s_%d", ua, i); + + rsprintf("\n"); + + for (j = 0; j < n_moptions; j++) + if (strcmp(attr_moptions[j], user_email) == 0) + break; + + if (j < n_moptions) + rsprintf + ("\n", + str, str, user_email); + else + rsprintf + ("\n", + str, str, user_email); + + rsprintf("\n", str, user_email); + rsprintf("\n"); + + if (format_flags[index] & AFF_MULTI_LINE) + rsprintf("
"); + } + + rsprintf("\n"); + } else if (attr_flags[index] & AF_USEREMAIL) { rsprintf("\n", title); @@ -9630,7 +9697,7 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL rsprintf(loc("Add new option here"), attr_list[index]); rsprintf(" : \n"); - if (attr_flags[index] & (AF_MULTI | AF_MUSERLIST)) + if (attr_flags[index] & (AF_MULTI | AF_MUSERLIST | AF_MUSEREMAIL)) rsprintf ("\n", input_maxlen, ua, attrib[index]); @@ -9647,7 +9714,7 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL /* display multiple check boxes */ rsprintf("\n", title); - n_moptions = strbreak(attrib[index], attr_moptions, MAX_N_LIST, "|"); + n_moptions = strbreak(attrib[index], attr_moptions, MAX_N_LIST, "|", FALSE); for (i = 0; i < MAX_N_LIST && attr_options[index][i][0]; i++) { /* display check box with optional tooltip */ @@ -9898,7 +9965,7 @@ void show_edit_form(LOGBOOK * lbs, int message_id, BOOL breply, BOOL bedit, BOOL if (!getcfg(lbs->name, "Fonts", str, sizeof(str))) strcpy(str, "Arial, Comic Sans MS, Courier New, Tahoma, Times New Roman, Verdana"); - n = strbreak(str, list, MAX_N_ATTR, ","); + n = strbreak(str, list, MAX_N_ATTR, ",", FALSE); for (i = 0; i < n; i++) rsprintf("\n", list[i], list[i]); @@ -10486,7 +10553,7 @@ void show_find_form(LOGBOOK * lbs) { int i, j; char str[NAME_LENGTH], mode[NAME_LENGTH], comment[NAME_LENGTH], option[NAME_LENGTH], - login_name[256], full_name[256]; + login_name[256], full_name[256], user_email[256]; /*---- header ----*/ @@ -10691,6 +10758,21 @@ void show_find_form(LOGBOOK * lbs) rsprintf("\n", str, full_name); } + } else if (attr_flags[i] & AF_MUSEREMAIL) { + + for (j = 0;; j++) { + if (!enum_user_line(lbs, j, login_name, sizeof(login_name))) + break; + get_user_line(lbs, login_name, NULL, NULL, user_email, NULL, NULL); + + sprintf(str, "%s_%d", attr_list[i], j); + + rsprintf("\n", + str, str, user_email); + + rsprintf("\n", str, user_email); + } + } else { rsprintf("\n", attr_list[i]); @@ -11157,7 +11239,7 @@ int change_config_line(LOGBOOK * lbs, char *option, char *old_value, char *new_v *strchr(line, '\r') = 0; if (strchr(line, '\n')) *strchr(line, '\n') = 0; - n = strbreak(line, list, MAX_N_LIST, ","); + n = strbreak(line, list, MAX_N_LIST, ",", FALSE); /* save tail */ p3 = strchr(p2, '\n'); @@ -11713,7 +11795,7 @@ int save_user_config(LOGBOOK * lbs, char *user, BOOL new_user, BOOL activate) mail_text[0] = 0; if (isparam("new_user_email") && isparam("new_user_name")) { compose_email_header(lbs, loc("Your ELOG account has been activated"), mail_from_name, - getparam("new_user_email"), NULL, mail_text, sizeof(mail_text), 1, 0, NULL); + getparam("new_user_email"), NULL, mail_text, sizeof(mail_text), 1, 0, NULL, 0, 0); strlcat(mail_text, "\r\n", sizeof(mail_text)); strlcat(mail_text, loc("Your ELOG account has been activated on host"), sizeof(mail_text)); @@ -11761,7 +11843,7 @@ int save_user_config(LOGBOOK * lbs, char *user, BOOL new_user, BOOL activate) mail_text[0] = 0; compose_email_header(lbs, subject, mail_from_name, email_addr, - NULL, mail_text, sizeof(mail_text), 1, 0, NULL); + NULL, mail_text, sizeof(mail_text), 1, 0, NULL, 0, 0); sprintf(mail_text + strlen(mail_text), "\r\n%s\r\n", str); if (lbs) @@ -12178,7 +12260,7 @@ void show_forgot_pwd_page(LOGBOOK * lbs) mail_text[0] = 0; compose_email_header(lbs, subject, mail_from_name, user_email, NULL, - mail_text, sizeof(mail_text), 1, 0, NULL); + mail_text, sizeof(mail_text), 1, 0, NULL, 0, 0); strlcat(mail_text, "\r\n", sizeof(mail_text)); sprintf(mail_text + strlen(mail_text), loc("A new password has been created for you on host %s"), @@ -13007,7 +13089,7 @@ void csv_import(LOGBOOK * lbs, char *csv, char *csvfile) break; memset(list, 0, MAX_N_ATTR * NAME_LENGTH); - n = strbreak(line, (char (*)[NAME_LENGTH]) list, MAX_N_ATTR, sep); + n = strbreak(line, (char (*)[NAME_LENGTH]) list, MAX_N_ATTR, sep, FALSE); if (n == MAX_N_ATTR) { sprintf(str, loc("Too many attributes in CSV file")); @@ -14362,7 +14444,7 @@ void synchronize_logbook(LOGBOOK * lbs, int mode, BOOL sync_all) return; } - nserver = strbreak(str, list, MAX_N_LIST, ","); + nserver = strbreak(str, list, MAX_N_LIST, ",", FALSE); for (index = 0; index < nserver; index++) { @@ -15993,7 +16075,7 @@ BOOL is_user_allowed(LOGBOOK * lbs, char *command) return FALSE; /* check if current user in list */ - n = strbreak(users, list, MAX_N_LIST, ","); + n = strbreak(users, list, MAX_N_LIST, ",", FALSE); for (i = 0; i < n; i++) if (strieq(list[i], getparam("unm"))) break; @@ -16018,7 +16100,7 @@ BOOL is_user_allowed(LOGBOOK * lbs, char *command) if (!isparam("unm")) return FALSE; - n = strbreak(users, list, MAX_N_LIST, ","); + n = strbreak(users, list, MAX_N_LIST, ",", FALSE); for (i = 0; i < n; i++) if (strieq(list[i], getparam("unm"))) return TRUE; @@ -16091,7 +16173,7 @@ BOOL is_command_allowed(LOGBOOK * lbs, char *command) } else { /* check for admin command */ - n = strbreak(menu_str, menu_item, MAX_N_LIST, ","); + n = strbreak(menu_str, menu_item, MAX_N_LIST, ",", FALSE); menu_str[0] = 0; for (i = 0; i < n; i++) { if (strcmp(menu_item[i], "Admin") == 0) { @@ -16190,13 +16272,13 @@ BOOL is_command_allowed(LOGBOOK * lbs, char *command) } /* check if command is present in the menu list */ else if (command[0]) { - n = strbreak(menu_str, menu_item, MAX_N_LIST, ","); + n = strbreak(menu_str, menu_item, MAX_N_LIST, ",", FALSE); for (i = 0; i < n; i++) if (strieq(command, menu_item[i]) || strieq(command, loc(menu_item[i]))) break; if (i == n) { - n = strbreak(other_str, menu_item, MAX_N_LIST, ","); + n = strbreak(other_str, menu_item, MAX_N_LIST, ",", FALSE); for (i = 0; i < n; i++) if (strieq(command, loc(menu_item[i]))) break; @@ -16412,7 +16494,7 @@ void show_page_filters(LOGBOOK * lbs, int n_msg, int page_n, BOOL mode_commands, if (getcfg(lbs->name, "Quick filter", str, sizeof(str))) { - n = strbreak(str, list, MAX_N_LIST, ","); + n = strbreak(str, list, MAX_N_LIST, ",", FALSE); if (getcfg(lbs->name, "Case sensitive search", str, sizeof(str)) && atoi(str)) rsprintf("\n"); @@ -16662,7 +16744,7 @@ void show_select_navigation(LOGBOOK * lbs) rsprintf("\n"); if (getcfg(lbs->name, "Move to", str, sizeof(str))) { - n_log = strbreak(str, lbk_list, MAX_N_LIST, ","); + n_log = strbreak(str, lbk_list, MAX_N_LIST, ",", FALSE); for (i = 0; i < n_log; i++) rsprintf("