Some updates
This commit is contained in:
parent
66d13e78eb
commit
ea59f6ffa6
@ -4603,6 +4603,7 @@ v0.33.20 10-Feb-2002
|
|||||||
Added servicename filemgr to the filemgr services.
|
Added servicename filemgr to the filemgr services.
|
||||||
When adding or deleting a message area, several extra checks
|
When adding or deleting a message area, several extra checks
|
||||||
are done.
|
are done.
|
||||||
|
Layout for message area editor changed, more logical now.
|
||||||
|
|
||||||
mbfido:
|
mbfido:
|
||||||
In AreaMgr and FileMgr changed aka matching for area
|
In AreaMgr and FileMgr changed aka matching for area
|
||||||
|
@ -90,7 +90,7 @@ int create_msgarea(char *marea, faddr *p_from)
|
|||||||
}
|
}
|
||||||
fread(&msgshdr, sizeof(msgshdr), 1, mp);
|
fread(&msgshdr, sizeof(msgshdr), 1, mp);
|
||||||
offset = msgshdr.hdrsize + ((mgroup.StartArea -1) * (msgshdr.recsize + msgshdr.syssize));
|
offset = msgshdr.hdrsize + ((mgroup.StartArea -1) * (msgshdr.recsize + msgshdr.syssize));
|
||||||
if (fseek(mp, offset, SEEK_SET) == -1) {
|
if (fseek(mp, offset, SEEK_SET)) {
|
||||||
WriteError("$Can't seek in %s", temp);
|
WriteError("$Can't seek in %s", temp);
|
||||||
fclose(ap);
|
fclose(ap);
|
||||||
fclose(gp);
|
fclose(gp);
|
||||||
@ -115,6 +115,18 @@ int create_msgarea(char *marea, faddr *p_from)
|
|||||||
if (!rc) {
|
if (!rc) {
|
||||||
Syslog('m', "No free slot, append after last record");
|
Syslog('m', "No free slot, append after last record");
|
||||||
fseek(mp, 0, SEEK_END);
|
fseek(mp, 0, SEEK_END);
|
||||||
|
if (ftell(mp) < msgshdr.hdrsize + ((mgroup.StartArea -1) * (msgshdr.recsize + msgshdr.syssize))) {
|
||||||
|
Syslog('m', "Database too small, expanding...");
|
||||||
|
memset(&msgs, 0, sizeof(msgs));
|
||||||
|
memset(&System, 0, sizeof(System));
|
||||||
|
while (TRUE) {
|
||||||
|
fwrite(&msgs, sizeof(msgs), 1, mp);
|
||||||
|
for (i = 0; i < (msgshdr.syssize / sizeof(System)); i++)
|
||||||
|
fwrite(&System, sizeof(System), 1, mp);
|
||||||
|
if (ftell(mp) >= msgshdr.hdrsize + ((mgroup.StartArea -1) * (msgshdr.recsize + msgshdr.syssize)))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
rc = 1;
|
rc = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,6 +154,9 @@ int create_msgarea(char *marea, faddr *p_from)
|
|||||||
msgs.Ftncode = CHRS_DEFAULT_FTN;
|
msgs.Ftncode = CHRS_DEFAULT_FTN;
|
||||||
msgs.MaxArticles = CFG.maxarticles;
|
msgs.MaxArticles = CFG.maxarticles;
|
||||||
tag = tl(tag);
|
tag = tl(tag);
|
||||||
|
for (i = 0; i < strlen(tag); i++)
|
||||||
|
if (tag[i] == '.')
|
||||||
|
tag[i] = '/';
|
||||||
sprintf(msgs.Base, "%s/%s", mgroup.BasePath, tag);
|
sprintf(msgs.Base, "%s/%s", mgroup.BasePath, tag);
|
||||||
fwrite(&msgs, sizeof(msgs), 1, mp);
|
fwrite(&msgs, sizeof(msgs), 1, mp);
|
||||||
|
|
||||||
|
@ -568,13 +568,12 @@ int ftn2rfc(faddr *f, faddr *t, char *subj, char *origline, time_t mdate, int fl
|
|||||||
newsgroup = xstrcpy(msgs.Newsgroup);
|
newsgroup = xstrcpy(msgs.Newsgroup);
|
||||||
if (strlen(msgs.Distribution))
|
if (strlen(msgs.Distribution))
|
||||||
distribution = xstrcpy(msgs.Distribution);
|
distribution = xstrcpy(msgs.Distribution);
|
||||||
if (strlen(msgs.Moderator)) {
|
// if (strlen(msgs.Moderator)) {
|
||||||
moderator = xstrcpy(msgs.Moderator);
|
// moderator = xstrcpy(msgs.Moderator);
|
||||||
if (msgs.MsgKinds == USEMOD)
|
// if (msgs.MsgKinds == USEMOD)
|
||||||
modtype = 1;
|
// modtype = 1;
|
||||||
}
|
// }
|
||||||
Syslog('M', "newsgroup %s, distribution %s, moderator %s modtype %d",
|
Syslog('M', "newsgroup %s, distribution %s", printable(newsgroup, 0), printable(distribution, 0));
|
||||||
printable(newsgroup, 0), printable(distribution, 0), printable(moderator, 0), modtype);
|
|
||||||
newsmode = TRUE;
|
newsmode = TRUE;
|
||||||
if ((modtype == 1) && (!hdr((char *)"Approved",msg)) &&
|
if ((modtype == 1) && (!hdr((char *)"Approved",msg)) &&
|
||||||
(!hdr((char *)"RFC-Approved",kmsg)) && (!hdr((char *)"Approved",kmsg)))
|
(!hdr((char *)"RFC-Approved",kmsg)) && (!hdr((char *)"Approved",kmsg)))
|
||||||
|
@ -330,8 +330,8 @@ int rfc2ftn(FILE *fp, faddr *recipient)
|
|||||||
p++;
|
p++;
|
||||||
if ((q = strchr(p,'\n')))
|
if ((q = strchr(p,'\n')))
|
||||||
*q='\0';
|
*q='\0';
|
||||||
if (newsmode && strlen(msgs.Moderator) && (strcasestr(msgs.Moderator,p)))
|
// if (newsmode && strlen(msgs.Moderator) && (strcasestr(msgs.Moderator,p)))
|
||||||
removeapproved = TRUE;
|
// removeapproved = TRUE;
|
||||||
if (q)
|
if (q)
|
||||||
*q='\n';
|
*q='\n';
|
||||||
}
|
}
|
||||||
|
13
mbfido/tic.c
13
mbfido/tic.c
@ -185,9 +185,9 @@ int LoadTic(char *inb, char *tfn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Temp = calloc(PATH_MAX, sizeof(char));
|
Temp = calloc(PATH_MAX, sizeof(char));
|
||||||
Buf = calloc(257, sizeof(char));
|
Buf = calloc(PATH_MAX, sizeof(char));
|
||||||
|
|
||||||
while ((fgets(Buf, 255, tfp)) != NULL) {
|
while ((fgets(Buf, PATH_MAX -1, tfp)) != NULL) {
|
||||||
/*
|
/*
|
||||||
* Remove all garbage from the .TIC file.
|
* Remove all garbage from the .TIC file.
|
||||||
*/
|
*/
|
||||||
@ -200,7 +200,12 @@ int LoadTic(char *inb, char *tfn)
|
|||||||
}
|
}
|
||||||
Temp[j] = '\0';
|
Temp[j] = '\0';
|
||||||
|
|
||||||
// Syslog('f', "TIC: %s", Temp);
|
if (strlen(Temp) > 255) {
|
||||||
|
Syslog('+', "Truncating TIC line of %d characters", strlen(Temp));
|
||||||
|
Temp[255] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
Syslog('f', "TIC: %s", Temp);
|
||||||
if (strncasecmp(Temp, "hatch", 5) == 0) {
|
if (strncasecmp(Temp, "hatch", 5) == 0) {
|
||||||
TIC.TicIn.Hatch = TRUE;
|
TIC.TicIn.Hatch = TRUE;
|
||||||
|
|
||||||
@ -290,7 +295,7 @@ int LoadTic(char *inb, char *tfn)
|
|||||||
strncpy(TIC.TicIn.LDesc[TIC.TicIn.TotLDesc], Temp+6, 80);
|
strncpy(TIC.TicIn.LDesc[TIC.TicIn.TotLDesc], Temp+6, 80);
|
||||||
TIC.TicIn.TotLDesc++;
|
TIC.TicIn.TotLDesc++;
|
||||||
}
|
}
|
||||||
} else if (strncasecmp(Temp, "destination ", 12) != 0) {
|
} else if (strncasecmp(Temp, "destination ", 12) == 0) {
|
||||||
/*
|
/*
|
||||||
* Drop this one
|
* Drop this one
|
||||||
*/
|
*/
|
||||||
|
@ -623,6 +623,7 @@ int KeywordScan()
|
|||||||
Found = TRUE;
|
Found = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memset(&T, 0, sizeof(T));
|
||||||
T.Area = arecno;
|
T.Area = arecno;
|
||||||
T.Active = FALSE;
|
T.Active = FALSE;
|
||||||
T.Cost = file.Cost;
|
T.Cost = file.Cost;
|
||||||
@ -774,6 +775,7 @@ int FilenameScan()
|
|||||||
Found = TRUE;
|
Found = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memset(&T, 0, sizeof(T));
|
||||||
T.Area = arecno;
|
T.Area = arecno;
|
||||||
T.Active = FALSE;
|
T.Active = FALSE;
|
||||||
T.Cost = file.Cost;
|
T.Cost = file.Cost;
|
||||||
@ -921,6 +923,7 @@ int NewfileScan(int AskStart)
|
|||||||
Found = TRUE;
|
Found = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
memset(&T, 0, sizeof(T));
|
||||||
T.Area = arecno;
|
T.Area = arecno;
|
||||||
T.Active = FALSE;
|
T.Active = FALSE;
|
||||||
T.Cost = file.Cost;
|
T.Cost = file.Cost;
|
||||||
|
@ -602,32 +602,42 @@ char *edit_pth(int y, int x, int l, char *line, char *help)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void test_jam(char *base)
|
||||||
|
{
|
||||||
|
char *temp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check if the messagebase exists, if not, create it.
|
||||||
|
*/
|
||||||
|
if (base == NULL)
|
||||||
|
return;
|
||||||
|
if (strlen(base) == 0)
|
||||||
|
return;
|
||||||
|
temp = xstrcpy(base);
|
||||||
|
temp = xstrcat(temp, (char *)".jhr");
|
||||||
|
if (access(temp, W_OK)) {
|
||||||
|
if (mkdirs(base, 0770)) {
|
||||||
|
if (yes_no((char *)"Messagebase doesn't exist, create")) {
|
||||||
|
if (Msg_Open(base))
|
||||||
|
Msg_Close();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
errmsg((char *)"Can't create directory");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
char *edit_jam(int y, int x, int l, char *line, char *help)
|
char *edit_jam(int y, int x, int l, char *line, char *help)
|
||||||
{
|
{
|
||||||
static char s[256];
|
static char s[256];
|
||||||
char *temp;
|
|
||||||
|
|
||||||
showhelp(help);
|
showhelp(help);
|
||||||
memset((char *)s, 0, 256);
|
memset((char *)s, 0, 256);
|
||||||
strcpy(s, edit_field(y, x, l, 'X', line));
|
strcpy(s, edit_field(y, x, l, 'X', line));
|
||||||
|
test_jam(s);
|
||||||
/*
|
|
||||||
* Check if the messagebase exists, if not, create it.
|
|
||||||
*/
|
|
||||||
temp = xstrcpy(s);
|
|
||||||
temp = xstrcat(temp, (char *)".jhr");
|
|
||||||
if (access(temp, W_OK)) {
|
|
||||||
if (mkdirs(s, 0770)) {
|
|
||||||
if (yes_no((char *)"Messagebase doesn't exist, create")) {
|
|
||||||
if (Msg_Open(s))
|
|
||||||
Msg_Close();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
errmsg((char *)"Can't create directory");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free(temp);
|
|
||||||
|
|
||||||
set_color(WHITE, BLACK);
|
set_color(WHITE, BLACK);
|
||||||
show_str(y, x, l, s);
|
show_str(y, x, l, s);
|
||||||
return s;
|
return s;
|
||||||
|
@ -17,6 +17,7 @@ int select_tag(int);
|
|||||||
void show_str(int, int, int, char *);
|
void show_str(int, int, int, char *);
|
||||||
char *edit_str(int, int, int, char *, char *);
|
char *edit_str(int, int, int, char *, char *);
|
||||||
char *edit_pth(int, int, int, char *, char *);
|
char *edit_pth(int, int, int, char *, char *);
|
||||||
|
void test_jam(char *);
|
||||||
char *edit_jam(int, int, int, char *, char *);
|
char *edit_jam(int, int, int, char *, char *);
|
||||||
char *edit_ups(int, int, int, char *, char *);
|
char *edit_ups(int, int, int, char *, char *);
|
||||||
char *getboolean(int val);
|
char *getboolean(int val);
|
||||||
|
@ -498,18 +498,18 @@ void SetScreen()
|
|||||||
set_color(CYAN, BLACK);
|
set_color(CYAN, BLACK);
|
||||||
mvprintw( 6, 2, "1. Area Name");
|
mvprintw( 6, 2, "1. Area Name");
|
||||||
mvprintw( 7, 2, "2. FTN area");
|
mvprintw( 7, 2, "2. FTN area");
|
||||||
mvprintw( 8, 2, "3. Newsgroup");
|
mvprintw( 8, 2, "3. Group");
|
||||||
mvprintw( 9, 2, "4. Moderator");
|
mvprintw( 9, 2, "4. Newsgroup");
|
||||||
mvprintw(10, 2, "5. JAM base");
|
mvprintw(10, 2, "5. JAM base");
|
||||||
mvprintw(11, 2, "6. Origin");
|
mvprintw(11, 2, "6. Origin");
|
||||||
mvprintw(12, 2, "7. Fido Aka");
|
mvprintw(12, 2, "7. Fido Aka");
|
||||||
mvprintw(13, 2, "8. QWK name");
|
mvprintw(13, 2, "8. QWK name");
|
||||||
mvprintw(14, 2, "9. Group");
|
mvprintw(14, 2, "9. Distrib.");
|
||||||
mvprintw(15, 2, "10. Distrib.");
|
mvprintw(15, 2, "10. Area Type");
|
||||||
mvprintw(16, 2, "11. Area Type");
|
mvprintw(16, 2, "11. Msg Kinds");
|
||||||
mvprintw(17, 2, "12. Msg Kinds");
|
mvprintw(17, 2, "12. FTN chars");
|
||||||
mvprintw(18, 2, "13. FTN chars");
|
mvprintw(18, 2, "13. RFC chars");
|
||||||
mvprintw(19, 2, "14. RFC chars");
|
mvprintw(19, 2, "14. Active");
|
||||||
|
|
||||||
mvprintw(13,36, "15. Days Old");
|
mvprintw(13,36, "15. Days Old");
|
||||||
mvprintw(14,36, "16. Max. Msgs");
|
mvprintw(14,36, "16. Max. Msgs");
|
||||||
@ -521,22 +521,21 @@ void SetScreen()
|
|||||||
default: mvprintw(15,36, "17. N/A");
|
default: mvprintw(15,36, "17. N/A");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
mvprintw(16,36, "18. Active");
|
mvprintw(16,36, "18. Read Sec.");
|
||||||
mvprintw(17,36, "19. Read Sec.");
|
mvprintw(17,36, "19. Write Sec.");
|
||||||
mvprintw(18,36, "20. Write Sec.");
|
mvprintw(18,36, "20. Sysop Sec.");
|
||||||
mvprintw(19,36, "21. Sysop Sec.");
|
mvprintw(19,36, "21. User Del.");
|
||||||
|
|
||||||
mvprintw(12,60, "22. User Del.");
|
mvprintw(13,60, "22. Aliases");
|
||||||
mvprintw(13,60, "23. Aliases");
|
mvprintw(14,60, "23. Quotes");
|
||||||
mvprintw(14,60, "24. Quotes");
|
mvprintw(15,60, "24. Mandatory");
|
||||||
mvprintw(15,60, "25. Mandatory");
|
mvprintw(16,60, "25. UnSecure");
|
||||||
mvprintw(16,60, "26. UnSecure");
|
mvprintw(17,60, "26. OLR Default");
|
||||||
mvprintw(17,60, "27. OLR Default");
|
mvprintw(18,60, "27. OLR Forced");
|
||||||
mvprintw(18,60, "28. OLR Forced");
|
|
||||||
switch (msgs.Type) {
|
switch (msgs.Type) {
|
||||||
case ECHOMAIL:
|
case ECHOMAIL:
|
||||||
case NEWS:
|
case NEWS:
|
||||||
case LIST: mvprintw(19,60, "29. Connections");
|
case LIST: mvprintw(19,60, "28. Connections");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1030,18 +1029,18 @@ int EditMsgRec(int Area)
|
|||||||
set_color(WHITE, BLACK);
|
set_color(WHITE, BLACK);
|
||||||
show_str( 6,16,40, msgs.Name);
|
show_str( 6,16,40, msgs.Name);
|
||||||
show_str( 7,16,50, msgs.Tag);
|
show_str( 7,16,50, msgs.Tag);
|
||||||
show_str( 8,16,64, msgs.Newsgroup);
|
show_str( 8,16,12, msgs.Group);
|
||||||
show_str( 9,16,64, msgs.Moderator);
|
show_str( 9,16,64, msgs.Newsgroup);
|
||||||
show_str(10,16,64, msgs.Base);
|
show_str(10,16,64, msgs.Base);
|
||||||
show_str(11,16,64, msgs.Origin);
|
show_str(11,16,64, msgs.Origin);
|
||||||
show_aka(12,16, msgs.Aka);
|
show_aka(12,16, msgs.Aka);
|
||||||
show_str(13,16,13, msgs.QWKname);
|
show_str(13,16,13, msgs.QWKname);
|
||||||
show_str(14,16,12, msgs.Group);
|
show_str(14,16,16, msgs.Distribution);
|
||||||
show_str(15,16,16, msgs.Distribution);
|
show_msgtype(15,16, msgs.Type);
|
||||||
show_msgtype(16,16, msgs.Type);
|
show_msgkinds(16,16, msgs.MsgKinds);
|
||||||
show_msgkinds(17,16, msgs.MsgKinds);
|
show_str(17,16,16, printable(getchrs(msgs.Ftncode), 0));
|
||||||
show_str(18,16,16, printable(getchrs(msgs.Ftncode), 0));
|
show_str(18,16,16, printable(getchrs(msgs.Rfccode), 0));
|
||||||
show_str(19,16,16, printable(getchrs(msgs.Rfccode), 0));
|
show_bool(19,16, msgs.Active);
|
||||||
|
|
||||||
show_int( 13,52, msgs.DaysOld);
|
show_int( 13,52, msgs.DaysOld);
|
||||||
show_int( 14,52, msgs.MaxMsgs);
|
show_int( 14,52, msgs.MaxMsgs);
|
||||||
@ -1051,12 +1050,11 @@ int EditMsgRec(int Area)
|
|||||||
case NEWS: show_int( 15,52, msgs.MaxArticles);
|
case NEWS: show_int( 15,52, msgs.MaxArticles);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
show_bool(16,52, msgs.Active);
|
show_int( 16,52, msgs.RDSec.level);
|
||||||
show_int( 17,52, msgs.RDSec.level);
|
show_int( 17,52, msgs.WRSec.level);
|
||||||
show_int( 18,52, msgs.WRSec.level);
|
show_int( 18,52, msgs.SYSec.level);
|
||||||
show_int( 19,52, msgs.SYSec.level);
|
show_bool(19,52, msgs.UsrDelete);
|
||||||
|
|
||||||
show_bool(12,76, msgs.UsrDelete);
|
|
||||||
show_bool(13,76, msgs.Aliases);
|
show_bool(13,76, msgs.Aliases);
|
||||||
show_bool(14,76, msgs.Quotes);
|
show_bool(14,76, msgs.Quotes);
|
||||||
show_bool(15,76, msgs.Mandatory);
|
show_bool(15,76, msgs.Mandatory);
|
||||||
@ -1075,7 +1073,7 @@ int EditMsgRec(int Area)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(select_menu(29)) {
|
switch (select_menu(28)) {
|
||||||
case 0:
|
case 0:
|
||||||
crc1 = 0xffffffff;
|
crc1 = 0xffffffff;
|
||||||
crc1 = upd_crc32((char *)&msgs, crc1, msgshdr.recsize);
|
crc1 = upd_crc32((char *)&msgs, crc1, msgshdr.recsize);
|
||||||
@ -1084,6 +1082,8 @@ int EditMsgRec(int Area)
|
|||||||
fread(&System, sizeof(sysconnect), 1, tfil);
|
fread(&System, sizeof(sysconnect), 1, tfil);
|
||||||
crc1 = upd_crc32((char *)&System, crc1, sizeof(sysconnect));
|
crc1 = upd_crc32((char *)&System, crc1, sizeof(sysconnect));
|
||||||
}
|
}
|
||||||
|
if (msgs.Active)
|
||||||
|
test_jam(msgs.Base);
|
||||||
if ((MsgCrc != crc1) || (changed)) {
|
if ((MsgCrc != crc1) || (changed)) {
|
||||||
if (msgs.Active && !strlen(msgs.Base)) {
|
if (msgs.Active && !strlen(msgs.Base)) {
|
||||||
errmsg((char *)"JAM message base is not set");
|
errmsg((char *)"JAM message base is not set");
|
||||||
@ -1096,7 +1096,7 @@ int EditMsgRec(int Area)
|
|||||||
if (SaveMsgRec(Area, TRUE) == -1)
|
if (SaveMsgRec(Area, TRUE) == -1)
|
||||||
return -1;
|
return -1;
|
||||||
MsgUpdated = 1;
|
MsgUpdated = 1;
|
||||||
Syslog('+', "Saved record %d", Area);
|
Syslog('+', "Saved message area record %d", Area);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
IsDoing("Browsing Menu");
|
IsDoing("Browsing Menu");
|
||||||
@ -1108,57 +1108,63 @@ int EditMsgRec(int Area)
|
|||||||
strncpy(msgs.QWKname, msgs.Tag, 13);
|
strncpy(msgs.QWKname, msgs.Tag, 13);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3: E_STR( 8,16,64,msgs.Newsgroup, "The ^Newsgroup^ name of this area")
|
case 3: strcpy(msgs.Group, PickMGroup((char *)"9.2.3"));
|
||||||
case 4: E_STR( 9,16,64,msgs.Moderator, "The ^Moderator^ if this is a moderated area")
|
|
||||||
case 5: E_JAM( 10,16,64,msgs.Base, "The path to the ^JAM Message Base^")
|
|
||||||
case 6: E_STR( 11,16,64,msgs.Origin, "The ^Origin line^ to append to Echomail messages")
|
|
||||||
case 7: tmp = PickAka((char *)"9.2.7", TRUE);
|
|
||||||
if (tmp != -1)
|
|
||||||
msgs.Aka = CFG.aka[tmp];
|
|
||||||
SetScreen(); break;
|
|
||||||
case 8: E_UPS( 13,16,13,msgs.QWKname, "The name for ^QWK or Bluewave^ message packets")
|
|
||||||
case 9: strcpy(msgs.Group, PickMGroup((char *)"9.2.9"));
|
|
||||||
if (strlen(msgs.Group)) {
|
if (strlen(msgs.Group)) {
|
||||||
msgs.Aka = mgroup.UseAka;
|
msgs.Aka = mgroup.UseAka;
|
||||||
msgs.Active = TRUE;
|
msgs.Active = TRUE;
|
||||||
/*
|
/*
|
||||||
* If there is an uplink defined in the group,
|
* If there is an uplink defined in the group,
|
||||||
* and the first connected system is empty,
|
* and the first connected system is empty,
|
||||||
* copy the uplink as default connection.
|
* copy the uplink as default connection.
|
||||||
*/
|
*/
|
||||||
if (mgroup.UpLink.zone) {
|
if (mgroup.UpLink.zone) {
|
||||||
fseek(tfil, 0, SEEK_SET);
|
fseek(tfil, 0, SEEK_SET);
|
||||||
fread(&System, sizeof(sysconnect), 1, tfil);
|
fread(&System, sizeof(sysconnect), 1, tfil);
|
||||||
if (!System.aka.zone) {
|
if (!System.aka.zone) {
|
||||||
memset(&System, 0, sizeof(sysconnect));
|
memset(&System, 0, sizeof(sysconnect));
|
||||||
System.aka = mgroup.UpLink;
|
System.aka = mgroup.UpLink;
|
||||||
System.sendto = TRUE;
|
System.sendto = TRUE;
|
||||||
System.receivefrom = TRUE;
|
System.receivefrom = TRUE;
|
||||||
fseek(tfil, 0, SEEK_SET);
|
fseek(tfil, 0, SEEK_SET);
|
||||||
fwrite(&System, sizeof(sysconnect), 1, tfil);
|
fwrite(&System, sizeof(sysconnect), 1, tfil);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (!strlen(msgs.Base) && strlen(msgs.Tag)) {
|
||||||
|
/*
|
||||||
|
* Invent the place for the JAM message base.
|
||||||
|
*/
|
||||||
|
temp = calloc(PATH_MAX, sizeof(char));
|
||||||
|
sprintf(temp, "%s/%s", msgs.Group, msgs.Tag);
|
||||||
|
for (i = 0; i < strlen(temp); i++) {
|
||||||
|
if (isupper(temp[i]))
|
||||||
|
temp[i] = tolower(temp[i]);
|
||||||
|
/*
|
||||||
|
* If dots in the group or area tag, replace them
|
||||||
|
* with directory slashes to create a group tree.
|
||||||
|
*/
|
||||||
|
if (temp[i] == '.')
|
||||||
|
temp[i] = '/';
|
||||||
|
}
|
||||||
|
sprintf(msgs.Base, "%s/var/mail/%s", getenv("MBSE_ROOT"), temp);
|
||||||
|
free(temp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
SetScreen();
|
SetScreen();
|
||||||
break;
|
break;
|
||||||
case 10:E_STR( 15,16,16,msgs.Distribution, "The ^Distribution^ name if this is a newsgroup")
|
case 4: E_STR( 9,16,64,msgs.Newsgroup, "The ^Newsgroup^ name of this area")
|
||||||
case 11:msgs.Type = edit_msgtype(16,16, msgs.Type);
|
case 5: E_JAM( 10,16,64,msgs.Base, "The path to the ^JAM Message Base^")
|
||||||
|
case 6: E_STR( 11,16,64,msgs.Origin, "The ^Origin line^ to append to Echomail messages")
|
||||||
|
case 7: tmp = PickAka((char *)"9.2.7", TRUE);
|
||||||
|
if (tmp != -1)
|
||||||
|
msgs.Aka = CFG.aka[tmp];
|
||||||
|
SetScreen(); break;
|
||||||
|
case 8: E_UPS( 13,16,13,msgs.QWKname, "The name for ^QWK or Bluewave^ message packets")
|
||||||
|
case 9: E_STR( 14,16,16,msgs.Distribution, "The ^Distribution^ name if this is a newsgroup")
|
||||||
|
case 10:msgs.Type = edit_msgtype(15,16, msgs.Type);
|
||||||
SetScreen();
|
SetScreen();
|
||||||
break;
|
break;
|
||||||
case 12:msgs.MsgKinds = edit_msgkinds(17,16, msgs.MsgKinds); break;
|
case 11:msgs.MsgKinds = edit_msgkinds(16,16, msgs.MsgKinds); break;
|
||||||
|
case 14:Active = edit_bool(19,16, msgs.Active, (char *)"Is this area ^Active^");
|
||||||
case 15:E_INT( 13,52, msgs.DaysOld, "Maximum ^days^ to keep mail in this area")
|
|
||||||
case 16:E_INT( 14,52, msgs.MaxMsgs, "The ^maximum^ amount of messages in this area")
|
|
||||||
case 17:switch (msgs.Type) {
|
|
||||||
case ECHOMAIL: msgs.NetReply = edit_int(15,52,msgs.NetReply,
|
|
||||||
(char *)"The ^Area Number^ for netmail replies");
|
|
||||||
break;
|
|
||||||
case NEWS: msgs.MaxArticles = edit_int(15,52,msgs.MaxArticles,
|
|
||||||
(char *)"The ^maximum news articles^ to fetch");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 18:Active = edit_bool(16,52, msgs.Active, (char *)"Is this area ^Active^");
|
|
||||||
if (msgs.Active && !Active) {
|
if (msgs.Active && !Active) {
|
||||||
/*
|
/*
|
||||||
* Attempt to deactivate area, do some checks.
|
* Attempt to deactivate area, do some checks.
|
||||||
@ -1204,18 +1210,29 @@ int EditMsgRec(int Area)
|
|||||||
}
|
}
|
||||||
SetScreen();
|
SetScreen();
|
||||||
break;
|
break;
|
||||||
case 19:E_SEC( 17,52, msgs.RDSec, "9.2 EDIT READ SECURITY", SetScreen)
|
case 15:E_INT( 13,52, msgs.DaysOld, "Maximum ^days^ to keep mail in this area")
|
||||||
case 20:E_SEC( 18,52, msgs.WRSec, "9.2 EDIT WRITE SECURITY", SetScreen)
|
case 16:E_INT( 14,52, msgs.MaxMsgs, "The ^maximum^ amount of messages in this area")
|
||||||
case 21:E_SEC( 19,52, msgs.SYSec, "9.2 EDIT SYSOP SECURITY", SetScreen)
|
case 17:switch (msgs.Type) {
|
||||||
|
case ECHOMAIL: msgs.NetReply = edit_int(15,52,msgs.NetReply,
|
||||||
|
(char *)"The ^Area Number^ for netmail replies");
|
||||||
|
break;
|
||||||
|
case NEWS: msgs.MaxArticles = edit_int(15,52,msgs.MaxArticles,
|
||||||
|
(char *)"The ^maximum news articles^ to fetch");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 18:E_SEC( 16,52, msgs.RDSec, "9.2 EDIT READ SECURITY", SetScreen)
|
||||||
|
case 19:E_SEC( 17,52, msgs.WRSec, "9.2 EDIT WRITE SECURITY", SetScreen)
|
||||||
|
case 20:E_SEC( 18,52, msgs.SYSec, "9.2 EDIT SYSOP SECURITY", SetScreen)
|
||||||
|
case 21:E_BOOL(19,52, msgs.UsrDelete, "Allow users to ^Delete^ their messages")
|
||||||
|
|
||||||
case 22:E_BOOL(12,76, msgs.UsrDelete, "Allow users to ^Delete^ their messages")
|
case 22:E_BOOL(13,76, msgs.Aliases, "Allow ^aliases^ or real names only")
|
||||||
case 23:E_BOOL(13,76, msgs.Aliases, "Allow ^aliases^ or real names only")
|
case 23:E_BOOL(14,76, msgs.Quotes, "Add random ^quotes^ to new messages")
|
||||||
case 24:E_BOOL(14,76, msgs.Quotes, "Add random ^quotes^ to new messages")
|
case 24:E_BOOL(15,76, msgs.Mandatory, "Is this area ^mandatory^ for nodes")
|
||||||
case 25:E_BOOL(15,76, msgs.Mandatory, "Is this area ^mandatory^ for nodes")
|
case 25:E_BOOL(16,76, msgs.UnSecure, "Toss messages ^UnSecure^, ie: no originating check")
|
||||||
case 26:E_BOOL(16,76, msgs.UnSecure, "Toss messages ^UnSecure^, ie: no originating check")
|
case 26:E_BOOL(17,76, msgs.OLR_Default, "Area is ^default^ for ^offline^ users.")
|
||||||
case 27:E_BOOL(17,76, msgs.OLR_Default, "Area is ^default^ for ^offline^ users.")
|
case 27:E_BOOL(18,76, msgs.OLR_Forced, "Area is ^always on^ for ^offline^ users.")
|
||||||
case 28:E_BOOL(18,76, msgs.OLR_Forced, "Area is ^always on^ for ^offline^ users.")
|
case 28:switch (msgs.Type) {
|
||||||
case 29:switch (msgs.Type) {
|
|
||||||
case ECHOMAIL:
|
case ECHOMAIL:
|
||||||
case NEWS:
|
case NEWS:
|
||||||
case LIST: if (EditConnections(tfil))
|
case LIST: if (EditConnections(tfil))
|
||||||
@ -1632,7 +1649,6 @@ int mail_area_doc(FILE *fp, FILE *toc, int page)
|
|||||||
fprintf(fp, " Area tag %s\n", msgs.Tag);
|
fprintf(fp, " Area tag %s\n", msgs.Tag);
|
||||||
fprintf(fp, " Newsgroup name %s\n", msgs.Newsgroup);
|
fprintf(fp, " Newsgroup name %s\n", msgs.Newsgroup);
|
||||||
fprintf(fp, " Distribution %s\n", msgs.Distribution);
|
fprintf(fp, " Distribution %s\n", msgs.Distribution);
|
||||||
fprintf(fp, " Moderator %s\n", msgs.Moderator);
|
|
||||||
fprintf(fp, " JAM message base %s\n", msgs.Base);
|
fprintf(fp, " JAM message base %s\n", msgs.Base);
|
||||||
fprintf(fp, " Offline name %s\n", msgs.QWKname);
|
fprintf(fp, " Offline name %s\n", msgs.QWKname);
|
||||||
fprintf(fp, " Area type %s\n", getmsgtype(msgs.Type));
|
fprintf(fp, " Area type %s\n", getmsgtype(msgs.Type));
|
||||||
|
@ -105,6 +105,7 @@ int OpenMGroup(void)
|
|||||||
FILE *fin, *fout;
|
FILE *fin, *fout;
|
||||||
char fnin[PATH_MAX], fnout[PATH_MAX], temp[13];
|
char fnin[PATH_MAX], fnout[PATH_MAX], temp[13];
|
||||||
long oldsize;
|
long oldsize;
|
||||||
|
int i;
|
||||||
|
|
||||||
sprintf(fnin, "%s/etc/mgroups.data", getenv("MBSE_ROOT"));
|
sprintf(fnin, "%s/etc/mgroups.data", getenv("MBSE_ROOT"));
|
||||||
sprintf(fnout, "%s/etc/mgroups.temp", getenv("MBSE_ROOT"));
|
sprintf(fnout, "%s/etc/mgroups.temp", getenv("MBSE_ROOT"));
|
||||||
@ -142,10 +143,16 @@ int OpenMGroup(void)
|
|||||||
*/
|
*/
|
||||||
memset(&mgroup, 0, sizeof(mgroup));
|
memset(&mgroup, 0, sizeof(mgroup));
|
||||||
while (fread(&mgroup, oldsize, 1, fin) == 1) {
|
while (fread(&mgroup, oldsize, 1, fin) == 1) {
|
||||||
if (MGrpUpdated) {
|
if (MGrpUpdated && !strlen(mgroup.BasePath)) {
|
||||||
memset(&temp, 0, sizeof(temp));
|
memset(&temp, 0, sizeof(temp));
|
||||||
strcpy(temp, mgroup.Name);
|
strcpy(temp, mgroup.Name);
|
||||||
sprintf(mgroup.BasePath, "%s/var/mail/%s", getenv("MBSE_ROOT"), tl(temp));
|
for (i = 0; i < strlen(temp); i++) {
|
||||||
|
if (isupper(temp[i]))
|
||||||
|
temp[i] = tolower(temp[i]);
|
||||||
|
if (temp[i] == '.')
|
||||||
|
temp[i] = '/';
|
||||||
|
}
|
||||||
|
sprintf(mgroup.BasePath, "%s/var/mail/%s", getenv("MBSE_ROOT"), temp);
|
||||||
}
|
}
|
||||||
fwrite(&mgroup, sizeof(mgroup), 1, fout);
|
fwrite(&mgroup, sizeof(mgroup), 1, fout);
|
||||||
memset(&mgroup, 0, sizeof(mgroup));
|
memset(&mgroup, 0, sizeof(mgroup));
|
||||||
@ -284,7 +291,7 @@ int EditMGrpRec(int Area)
|
|||||||
FILE *fil;
|
FILE *fil;
|
||||||
static char mfile[PATH_MAX], temp[13];
|
static char mfile[PATH_MAX], temp[13];
|
||||||
static long offset;
|
static long offset;
|
||||||
static int j, tmp;
|
static int i, j, tmp;
|
||||||
unsigned long crc, crc1;
|
unsigned long crc, crc1;
|
||||||
|
|
||||||
clr_index();
|
clr_index();
|
||||||
@ -361,7 +368,13 @@ int EditMGrpRec(int Area)
|
|||||||
if (strlen(mgroup.BasePath) == 0) {
|
if (strlen(mgroup.BasePath) == 0) {
|
||||||
memset(&temp, 0, sizeof(temp));
|
memset(&temp, 0, sizeof(temp));
|
||||||
strcpy(temp, mgroup.Name);
|
strcpy(temp, mgroup.Name);
|
||||||
sprintf(mgroup.BasePath, "%s/var/mail/%s", getenv("MBSE_ROOT"), tl(temp));
|
for (i = 0; i < strlen(temp); i++) {
|
||||||
|
if (temp[i] == '.')
|
||||||
|
temp[i] = '/';
|
||||||
|
if (isupper(temp[i]))
|
||||||
|
temp[i] = tolower(temp[i]);
|
||||||
|
}
|
||||||
|
sprintf(mgroup.BasePath, "%s/var/mail/%s", getenv("MBSE_ROOT"), temp);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2: E_STR( 8,16,55, mgroup.Comment, "The ^desription^ for this message group")
|
case 2: E_STR( 8,16,55, mgroup.Comment, "The ^desription^ for this message group")
|
||||||
|
Reference in New Issue
Block a user