diff --git a/src/elogd.c b/src/elogd.c index 3dc2962c..d593cff6 100755 --- a/src/elogd.c +++ b/src/elogd.c @@ -6,6 +6,9 @@ Contents: Web server program for Electronic Logbook ELOG $Log$ + Revision 1.53 2003/03/26 10:15:21 midas + Only ownwer can delete entry if 'restrict edit = 1' + Revision 1.52 2003/03/25 19:55:15 midas Sort threaded list correctly if replies are resubmitted @@ -674,7 +677,7 @@ \********************************************************************/ /* Version of ELOG */ -#define VERSION "2.3.3" +#define VERSION "2.3.4" #include #include @@ -1741,33 +1744,49 @@ int i; char *locbuffer = NULL; char **porig, **ptrans; +time_t locfile_mtime = 0; /* localization support */ char *loc(char *orig) { -char language[256], file_name[256], *p; -int fh, length, n; -static char old_language[256]; +char language[256], file_name[256], *p; +int fh, length, n; +struct stat cfg_stat; getcfg("global", "Language", language); - if (!equal_ustring(language, old_language)) + /* force re-read configuration file if changed */ + strlcpy(file_name, resource_dir, sizeof(file_name)); + strlcat(file_name, "eloglang.", sizeof(file_name)); + strlcat(file_name, language, sizeof(file_name)); + + if (stat(file_name, &cfg_stat) == 0) { - if (equal_ustring(language, "english") || - language[0] == 0) + if (locfile_mtime < cfg_stat.st_mtime) { + locfile_mtime = cfg_stat.st_mtime; + if (locbuffer) { free(locbuffer); locbuffer = NULL; } } - else - { - strlcpy(file_name, resource_dir, sizeof(file_name)); - strlcat(file_name, "eloglang.", sizeof(file_name)); - strlcat(file_name, language, sizeof(file_name)); + } + if (equal_ustring(language, "english") || + language[0] == 0) + { + if (locbuffer) + { + free(locbuffer); + locbuffer = NULL; + } + } + else + { + if (locbuffer == NULL) + { fh = open(file_name, O_RDONLY | O_BINARY); if (fh < 0) return orig; @@ -1838,8 +1857,6 @@ static char old_language[256]; porig[n] = NULL; ptrans[n] = NULL; } - - strcpy(old_language, language); } if (!locbuffer) @@ -4780,11 +4797,11 @@ int i, fh, wrong_pwd, size; if (!getcfg(lbs->name, "Admin user", str) || !strstr(str, getparam("unm")) != 0) { - rsprintf("%s:\n", loc("Old Password")); + rsprintf("%s:\n", loc("Old password")); rsprintf("\n"); } - rsprintf("%s:\n", loc("New Password")); + rsprintf("%s:\n", loc("New password")); rsprintf("\n"); rsprintf("%s:\n", loc("Retype new password")); @@ -4826,6 +4843,55 @@ char str[80], date[80], attrib[MAX_N_ATTR][NAME_LENGTH], /*------------------------------------------------------------------*/ +BOOL is_author(LOGBOOK *lbs, char attrib[MAX_N_ATTR][NAME_LENGTH], char *owner) +{ +char str[1000], preset[1000]; +int i; + + /* search attribute which contains short_name of author */ + for (i=0 ; in_attr ; i++) + { + sprintf(str, "Preset %s", attr_list[i]); + if (getcfg(lbs->name, str, preset)) + { + if (strstr(preset, "$short_name")) + { + if (strstr(attrib[i], getparam("unm")) == NULL) + { + strcpy(owner, attrib[i]); + return FALSE; + } + else + break; + } + } + } + + if (i == lbs->n_attr) + { + /* if not found, search attribute which contains full_name of author */ + for (i=0 ; in_attr ; i++) + { + sprintf(str, "Preset %s", attr_list[i]); + if (getcfg(lbs->name, str, preset)) + { + if (strstr(preset, "$long_name")) + { + if (strstr(attrib[i], getparam("full_name")) == NULL) + { + strcpy(owner, attrib[i]); + return FALSE; + } + } + } + } + } + + return TRUE; +} + +/*------------------------------------------------------------------*/ + void show_edit_form(LOGBOOK *lbs, int message_id, BOOL breply, BOOL bedit, BOOL bupload) { int i, j, n, index, size, width, height, fh, length, first; @@ -4833,7 +4899,8 @@ char str[1000], preset[1000], *p, star[80], comment[10000], reply_string[256]; char list[MAX_N_ATTR][NAME_LENGTH], file_name[256], *buffer, format[256]; char date[80], attrib[MAX_N_ATTR][NAME_LENGTH], text[TEXT_SIZE], orig_tag[80], reply_tag[80], att[MAX_ATTACHMENTS][256], encoding[80], - slist[MAX_N_ATTR+10][NAME_LENGTH], svalue[MAX_N_ATTR+10][NAME_LENGTH]; + slist[MAX_N_ATTR+10][NAME_LENGTH], svalue[MAX_N_ATTR+10][NAME_LENGTH], + owner[256]; time_t now; for (i=0 ; iname, "Restrict edit", str) && atoi(str) == 1) { - /* search attribute which contains short_name of author */ - for (i=0 ; in_attr ; i++) + if (!is_author(lbs, attrib, owner)) { - sprintf(str, "Preset %s", attr_list[i]); - if (getcfg(lbs->name, str, preset)) - { - if (strstr(preset, "$short_name")) - { - if (strstr(attrib[i], getparam("unm")) == NULL) - { - sprintf(str, loc("Only user %s can edit this entry"), attrib[i]); - show_error(str); - return; - } - else - break; - } - } - } - - if (i == lbs->n_attr) - { - /* if not found, search attribute which contains full_name of author */ - for (i=0 ; in_attr ; i++) - { - sprintf(str, "Preset %s", attr_list[i]); - if (getcfg(lbs->name, str, preset)) - { - if (strstr(preset, "$long_name")) - { - if (strstr(attrib[i], getparam("full_name")) == NULL) - { - sprintf(str, loc("Only user %s can edit this entry"), attrib[i]); - show_error(str); - return; - } - } - } - } + sprintf(str, loc("Only user %s can edit this entry"), owner); + show_error(str); + return; } } @@ -5788,8 +5821,8 @@ char str[NAME_LENGTH]; } else { - cols = 80; - rows = 40; + cols = 120; + rows = 30; } rsprintf("