Upgraded files database strcuture
This commit is contained in:
parent
7918118edc
commit
cf922872da
65
ChangeLog
65
ChangeLog
@ -1,7 +1,70 @@
|
||||
$Id$
|
||||
|
||||
If you feel lucky then try this version, if not just wait
|
||||
a few days so that I fix the destructive bugs that might
|
||||
be present in this version.
|
||||
|
||||
v0.51.1 21-Feb-2004
|
||||
|
||||
v0.51.2 06-Mar-2004
|
||||
|
||||
upgrade:
|
||||
Before upgrade announce all new files!
|
||||
Compile all programs.
|
||||
Close the system with mbstat close.
|
||||
Install programs as root (as usual).
|
||||
Start mbsetup, this can take a while on a system with lots of
|
||||
files, during startup the files database will be converted.
|
||||
After the menu appears, you may exit mbsetup.
|
||||
Open the system again.
|
||||
If you want you may restart mbtask.
|
||||
|
||||
general:
|
||||
Updated to a new files database structure that allows for
|
||||
expanding the records like most other databases to allow new
|
||||
features.
|
||||
Removed all references to costsharing for ticfiles which wasn't
|
||||
fully implemented.
|
||||
|
||||
mbcico:
|
||||
Updated file request function to new files database structure.
|
||||
|
||||
mbfido:
|
||||
When removing files during tic import due to replace or maximum
|
||||
files, thumbnails are now also removed from disk.
|
||||
Updated tic file import function to the new files database
|
||||
structure.
|
||||
|
||||
mbfile:
|
||||
Updated kill, index, check, pack, list, adopt, import, move,
|
||||
delete and sort to the new files database structure.
|
||||
The file delete function in kill didn't delete the thumbnail.
|
||||
|
||||
mbaff:
|
||||
When scanning for uploads, files which were hatched now have
|
||||
the right tic area name instead of AREA n in the announce
|
||||
record. They also contain the used magic filename if this is
|
||||
known.
|
||||
The scan for new uploads function is updated to the new files
|
||||
database structure.
|
||||
The filefind function is updated to the new files database
|
||||
structure.
|
||||
|
||||
mbsebbs:
|
||||
Updated to the new files database structure.
|
||||
|
||||
mbsetup:
|
||||
Added auto upgrade for the files database.
|
||||
Changed menus 14, 7.n.6, 10.1 and 8.4.
|
||||
|
||||
examples:
|
||||
Updated English, German, Spanish and Dutch macro files:
|
||||
html.nodes and filemgr.status.
|
||||
|
||||
lang:
|
||||
removed obsolede prompt 240.
|
||||
|
||||
|
||||
v0.51.1 21-Feb-2004 - 06-Mar-2004
|
||||
|
||||
upgrade:
|
||||
In all message groups set check/set default character set.
|
||||
|
5
TODO
5
TODO
@ -77,6 +77,9 @@ mbtask:
|
||||
space is still available.
|
||||
|
||||
mbfido:
|
||||
N: When importing a tic file with magic name, remove the magic from
|
||||
the filerecord of the previous file.
|
||||
|
||||
N: The elist rules files are named (8.3) areaname.rul where areaname
|
||||
is the first 8 characters of the area name and we use the full name
|
||||
only. Make sure both namings are accepted?
|
||||
@ -132,7 +135,7 @@ mbcico:
|
||||
N: Make workaround for binkp bug in Irex 2.24 upto 2.29
|
||||
|
||||
mbfile:
|
||||
L: Add a check to see if the magic filenames are (still) valid.
|
||||
N: Add a check to see if the magic filenames are (still) valid.
|
||||
|
||||
L: Update <filespec> <area> <-touch>
|
||||
|
||||
|
2
configure
vendored
2
configure
vendored
@ -1275,7 +1275,7 @@ SUBDIRS="lib mbcico mbfido mbmon mbsebbs mbtask mbsetup unix lang examples html
|
||||
PACKAGE="mbsebbs"
|
||||
MAJOR="0"
|
||||
MINOR="51"
|
||||
REVISION="1"
|
||||
REVISION="2"
|
||||
VERSION="$MAJOR.$MINOR.$REVISION"
|
||||
COPYRIGHT="Copyright (C) 1997-2004 Michiel Broek, All Rights Reserved"
|
||||
SHORTRIGHT="Copyright (C) 1997-2004 M. Broek"
|
||||
|
@ -13,7 +13,7 @@ dnl
|
||||
PACKAGE="mbsebbs"
|
||||
MAJOR="0"
|
||||
MINOR="51"
|
||||
REVISION="1"
|
||||
REVISION="2"
|
||||
VERSION="$MAJOR.$MINOR.$REVISION"
|
||||
COPYRIGHT="Copyright (C) 1997-2004 Michiel Broek, All Rights Reserved"
|
||||
SHORTRIGHT="Copyright (C) 1997-2004 M. Broek"
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -238,7 +238,7 @@
|
||||
237 filesub.c |Can't open file database for this area
|
||||
238 filesub.c file.c |Uploaded by:
|
||||
239 file.c |D E L E T E D
|
||||
240 file.c |M I S S I N G
|
||||
240 |
|
||||
241 mail.c YN|Node not known, continue anayway [y/N]:
|
||||
242 file.c |Total Files:
|
||||
243 filesub.c |FATAL: Unable to open areas database
|
||||
|
@ -238,7 +238,7 @@ AVS|(A)ntwoord, (V)olgende, (S)top:
|
||||
|Kan de database niet openen voor dit gebied
|
||||
|Upload door:
|
||||
|GEWIST
|
||||
|ONTBREEKT
|
||||
|
|
||||
JN|Node onbekend, toch doorgaan [j/N]:
|
||||
|Aantal bestanden:
|
||||
|FATAAL: kan de bestanden database niet openen
|
||||
|
@ -238,7 +238,7 @@ RNQ|(R)eply, (N)ext, (Q)uit:
|
||||
|Can't open file database for this area
|
||||
|Uploaded by:
|
||||
|D E L E T E D
|
||||
|M I S S I N G
|
||||
|
|
||||
YN|Node not known, continue anyway [y/N]:
|
||||
|Total Files:
|
||||
|FATAL: Unable to open areas database
|
||||
|
@ -238,7 +238,7 @@ RNQ|(R)
|
||||
|Ne paut pas ouvrir la base pour cette conférence
|
||||
|Télécharrgé par:
|
||||
|F A C
|
||||
|M A N Q U A N T
|
||||
|
|
||||
ON|Node inconnu, continue quand même [o/N]:
|
||||
|Total Fichiers:
|
||||
|FATAL: Impossible d'ouvrir la conférence
|
||||
|
@ -238,7 +238,7 @@ CSR|(C)ontestar, (S)eguinte, (R)ematar:
|
||||
|Non podo abri-la base de ficheiros desta rea
|
||||
|Enviado por:
|
||||
|B O R R A D O
|
||||
|P E R D I D O
|
||||
|
|
||||
SN|Nodo desco¤ecido. ¨Continuar? [s/N]:
|
||||
|Total Fichs:
|
||||
|FATAL: Imposible abrir base de reas
|
||||
|
@ -238,7 +238,7 @@ ANE|(A)ntwort, (N)aechste, (E)nde:
|
||||
|Die Datei-Datenbank fuer diesen Bereich kann nicht geoeffnet werden
|
||||
|Heraufgeladen von:
|
||||
|G E L O E S C H T
|
||||
|F E H L T
|
||||
|
|
||||
JN|Adresse unbekannt, dennoch fortfahren [j/N]:
|
||||
|Dateien insgesamt:
|
||||
|FATAL: die Datenbank der Dateibereiche kann nicht geoeffnet werden
|
||||
|
@ -238,7 +238,7 @@ ANE|(A)ntwort, (N)aechste, (E)nde:
|
||||
|Die Datei-Datenbank fuer diesen Bereich kann nicht geoeffnet werden
|
||||
|Heraufgeladen von:
|
||||
|G E L O E S C H T
|
||||
|F E H L T
|
||||
|
|
||||
JN|Adresse unbekannt, dennoch fortfahren [j/N]:
|
||||
|Dateien insgesamt:
|
||||
|FATAL: die Datenbank der Dateibereiche kann nicht geoeffnet werden
|
||||
|
@ -238,7 +238,7 @@ RPE|(R)ispondi, (P)rossimo, (E)sci:
|
||||
|Non trovo il database dei file di quest'area
|
||||
|Uploadato da:
|
||||
|C A N C E L L A T O
|
||||
|M A N C A N T E
|
||||
|
|
||||
SN|Nodo sconosciuto, continua lo stesso [s/N]:
|
||||
|File Totali:
|
||||
|FATAL: Non trovo il database dell'area
|
||||
|
@ -238,7 +238,7 @@ RST|(R)esponder, (S)iguiente, (T)erminar:
|
||||
|No puedo abrir la base de ficheros de esta rea
|
||||
|Enviado por:
|
||||
|B O R R A D O
|
||||
|P E R D I D O
|
||||
|
|
||||
SN|Nodo desconocido. ¨Continuar? [s/N]:
|
||||
|Total Fichs:
|
||||
|FATAL: Imposible abrir base de reas
|
||||
|
@ -731,7 +731,7 @@ struct fileareas {
|
||||
unsigned DLdays; /* Move not DL for days */
|
||||
unsigned FDdays; /* Move if FD older than */
|
||||
unsigned MoveArea; /* Move to Area */
|
||||
int Cost; /* File Cost */
|
||||
int xCost; /* File Cost */
|
||||
char FilesBbs[65]; /* Path to files.bbs if CD */
|
||||
char NewGroup[13]; /* Newfiles scan group */
|
||||
char Archiver[6]; /* Archiver for area */
|
||||
@ -753,9 +753,40 @@ struct FILEIndex {
|
||||
|
||||
|
||||
/*
|
||||
* File Record Control Structure (fdb#.data)
|
||||
* Files database (file#.data)
|
||||
*/
|
||||
struct FILERecord {
|
||||
struct FILE_recordhdr {
|
||||
long hdrsize; /* Size of header */
|
||||
long recsize; /* Record size */
|
||||
};
|
||||
|
||||
|
||||
struct FILE_record {
|
||||
char Name[13]; /* DOS style filename */
|
||||
char LName[81]; /* Long filename */
|
||||
char TicArea[21]; /* Tic area file came in */
|
||||
off_t Size; /* File Size */
|
||||
unsigned long Crc32; /* File CRC-32 */
|
||||
char Uploader[36]; /* Uploader name */
|
||||
time_t UploadDate; /* Date/Time uploaded */
|
||||
time_t FileDate; /* Real file date */
|
||||
time_t LastDL; /* Last Download date */
|
||||
unsigned long TimesDL; /* Times file was dl'ed */
|
||||
char Password[16]; /* File password */
|
||||
char Desc[25][49]; /* file description */
|
||||
char Magic[21]; /* Magic request name */
|
||||
unsigned Deleted : 1; /* Deleted */
|
||||
unsigned NoKill : 1; /* Cannot be deleted */
|
||||
unsigned Announced : 1; /* File is announced */
|
||||
unsigned Double : 1; /* Double record */
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Old File Record Control Structure (fdb#.data)
|
||||
*/
|
||||
struct OldFILERecord {
|
||||
char Name[13]; /* DOS style filename */
|
||||
char LName[81]; /* Long filename */
|
||||
char xTicArea[9]; /* Tic area file came in */
|
||||
@ -1518,9 +1549,9 @@ struct _nodes {
|
||||
unsigned FileFwd : 1; /* Accept File Forward */
|
||||
unsigned MailFwd : 1; /* Accept Mail Forward */
|
||||
unsigned AdvTic : 1; /* Advanced Tic files */
|
||||
unsigned Billing : 1; /* Cost sharing on/off */
|
||||
unsigned xBilling : 1; /* Cost sharing on/off */
|
||||
|
||||
unsigned BillDirect : 1; /* Send bill direct */
|
||||
unsigned xBillDirect : 1; /* Send bill direct */
|
||||
unsigned Crash : 1; /* Netmail crash */
|
||||
unsigned Hold : 1; /* Netmail hold */
|
||||
unsigned AddPlus : 1; /* Add + for uplink msgs */
|
||||
@ -1549,11 +1580,11 @@ struct _nodes {
|
||||
char xExtra[94];
|
||||
time_t StartDate; /* Node start date */
|
||||
time_t LastDate; /* Last action date */
|
||||
long Credit; /* Node's credit */
|
||||
long Debet; /* Node's debet */
|
||||
long AddPerc; /* Add Percentage */
|
||||
long WarnLevel; /* Warning level */
|
||||
long StopLevel; /* Stop level */
|
||||
long xCredit; /* Node's credit */
|
||||
long xDebet; /* Node's debet */
|
||||
long xAddPerc; /* Add Percentage */
|
||||
long xWarnLevel; /* Warning level */
|
||||
long xStopLevel; /* Stop level */
|
||||
fidoaddr RouteVia; /* Routing address */
|
||||
int Language; /* Language for netmail */
|
||||
statcnt FilesSent; /* Files sent to node */
|
||||
@ -1637,12 +1668,12 @@ struct _fgroup {
|
||||
char Comment[56]; /* Group Comment */
|
||||
unsigned Active : 1; /* Group Active */
|
||||
unsigned Deleted : 1; /* Is group deleted */
|
||||
unsigned DivideCost : 1; /* Divide cost over links */
|
||||
unsigned xDivideCost : 1; /* Divide cost over links */
|
||||
fidoaddr UseAka; /* Aka to use */
|
||||
fidoaddr UpLink; /* Uplink address */
|
||||
long UnitCost; /* Cost per unit */
|
||||
long UnitSize; /* Size per unit */
|
||||
long AddProm; /* Promillage to add */
|
||||
long xUnitCost; /* Cost per unit */
|
||||
long xUnitSize; /* Size per unit */
|
||||
long xAddProm; /* Promillage to add */
|
||||
time_t StartDate; /* Start Date */
|
||||
time_t LastDate; /* Last active date */
|
||||
char AreaFile[13]; /* Areas filename */
|
||||
@ -1799,20 +1830,6 @@ struct _magic {
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Billing database
|
||||
*/
|
||||
struct _bill {
|
||||
fidoaddr Node; /* Fido address */
|
||||
char FileName[15]; /* File Name */
|
||||
char FileEcho[21]; /* File Echo */
|
||||
char Group[13]; /* Group */
|
||||
off_t Size; /* File Size */
|
||||
long Cost; /* File Cost */
|
||||
};
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Newfile reports (newfiles.data)
|
||||
*/
|
||||
@ -1883,7 +1900,6 @@ struct _filerecord {
|
||||
char Desc[256]; /* Short description */
|
||||
char LDesc[25][49]; /* Long description */
|
||||
int TotLdesc; /* Total long desc lines */
|
||||
long Cost; /* File cost */
|
||||
unsigned Announce : 1; /* Announce this file */
|
||||
};
|
||||
|
||||
@ -2478,7 +2494,9 @@ struct oneline ol;
|
||||
|
||||
struct fileareashdr areahdr; /* File areas */
|
||||
struct fileareas area;
|
||||
struct FILERecord file;
|
||||
struct OldFILERecord oldfile; /* Pre 0.51.2 structure */
|
||||
struct FILE_recordhdr fdbhdr; /* Files database */
|
||||
struct FILE_record fdb;
|
||||
struct _fgrouphdr fgrouphdr; /* File groups */
|
||||
struct _fgroup fgroup;
|
||||
|
||||
@ -2533,7 +2551,7 @@ struct _magic magic;
|
||||
struct _nodeshdr nodeshdr; /* Fidonet nodes */
|
||||
struct _nodes nodes;
|
||||
|
||||
struct _bill bill; /* Unsent bills */
|
||||
//struct _bill bill; /* Unsent bills */
|
||||
|
||||
struct _newfileshdr newfileshdr; /* New file reports */
|
||||
struct _newfiles newfiles;
|
||||
|
@ -151,245 +151,236 @@ file_list *respond_bark(char *buf)
|
||||
|
||||
file_list *respfreq(char *nm, char *pw, char *dt)
|
||||
{
|
||||
file_list *fl = NULL;
|
||||
struct stat st;
|
||||
char mask[256], *p, *q;
|
||||
char *tnm, *t;
|
||||
time_t upd = 0L;
|
||||
int newer = 1;
|
||||
FILE *fa, *fb, *fi;
|
||||
long Area;
|
||||
int Send;
|
||||
struct FILEIndex idx;
|
||||
file_list *fl = NULL;
|
||||
struct stat st;
|
||||
char mask[256], *p, *q, *tnm, *t;
|
||||
time_t upd = 0L;
|
||||
int newer = 1, Send;
|
||||
FILE *fa, *fb, *fi;
|
||||
long Area;
|
||||
struct FILEIndex idx;
|
||||
|
||||
if (localoptions & NOFREQS) {
|
||||
Syslog('+', "File requests disabled");
|
||||
add_report((char *)"ER: \"%s\" denied: file requests disabled", nm);
|
||||
return NULL;
|
||||
}
|
||||
if (localoptions & NOFREQS) {
|
||||
Syslog('+', "File requests disabled");
|
||||
add_report((char *)"ER: \"%s\" denied: file requests disabled", nm);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (strchr(nm, '/') || strchr(nm, '\\') || strchr(nm, ':')) {
|
||||
Syslog('+', "Illegal characters in request");
|
||||
add_report((char *)"ER: \"%s\" denied: illegal characters", nm);
|
||||
return NULL;
|
||||
}
|
||||
if (strchr(nm, '/') || strchr(nm, '\\') || strchr(nm, ':')) {
|
||||
Syslog('+', "Illegal characters in request");
|
||||
add_report((char *)"ER: \"%s\" denied: illegal characters", nm);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (dt) {
|
||||
if (*dt == '+') {
|
||||
newer = 1;
|
||||
dt++;
|
||||
} else if (*dt == '-') {
|
||||
newer = 0;
|
||||
dt++;
|
||||
} else
|
||||
newer = 1;
|
||||
upd=atoul(dt);
|
||||
}
|
||||
|
||||
if (strlen(CFG.req_magic)) {
|
||||
/*
|
||||
* Check for uppercase and lowercase magic names.
|
||||
*/
|
||||
tnm = xstrcpy(CFG.req_magic);
|
||||
tnm = xstrcat(tnm,(char *)"/");
|
||||
tnm = xstrcat(tnm,tl(xstrcpy(nm)));
|
||||
if ((stat(tnm, &st) == 0) &&
|
||||
(S_ISREG(st.st_mode))) {
|
||||
if (access(tnm, X_OK) == 0) {
|
||||
return respmagic(tnm);
|
||||
/* respmagic will free(tnm) */
|
||||
} else if (access(tnm, R_OK) == 0) {
|
||||
return resplist(tnm, pw, dt);
|
||||
/* resplist will free(tnm) */
|
||||
} else
|
||||
free(tnm);
|
||||
} else
|
||||
free(tnm);
|
||||
|
||||
tnm = xstrcpy(CFG.req_magic);
|
||||
tnm = xstrcat(tnm,(char *)"/");
|
||||
t = xstrcpy(nm);
|
||||
tnm = xstrcat(tnm,tu(t));
|
||||
free(t);
|
||||
if ((stat(tnm, &st) == 0) &&
|
||||
(S_ISREG(st.st_mode))) {
|
||||
if (access(tnm, X_OK) == 0) {
|
||||
return respmagic(tnm);
|
||||
/* respmagic will free(tnm) */
|
||||
} else if (access(tnm, R_OK) == 0) {
|
||||
return resplist(tnm, pw, dt);
|
||||
/* resplist will free(tnm) */
|
||||
} else
|
||||
free(tnm);
|
||||
} else free(tnm);
|
||||
}
|
||||
|
||||
Syslog('+', "File request : %s (update (%s), password \"%s\")",MBSE_SS(nm),MBSE_SS(dt),MBSE_SS(pw));
|
||||
add_report((char *)"RQ: Regular file \"%s\"",nm);
|
||||
p = tl(nm);
|
||||
q = mask;
|
||||
*q++ = '^';
|
||||
while ((*p) && (q < (mask + sizeof(mask) - 4))) {
|
||||
switch (*p) {
|
||||
case '\\': *q++ = '\\'; *q++ = '\\'; break;
|
||||
case '?': *q++ = '.'; break;
|
||||
case '.': *q++ = '\\'; *q++ = '.'; break;
|
||||
case '+': *q++ = '\\'; *q++ = '+'; break;
|
||||
case '*': *q++ = '.'; *q++ = '*'; break;
|
||||
default: *q++ = toupper(*p); break;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
*q++ = '$';
|
||||
*q = '\0';
|
||||
Syslog('f', "Search mask \"%s\"", mask);
|
||||
re_comp(mask);
|
||||
if (dt) {
|
||||
if (*dt == '+') {
|
||||
newer = 1;
|
||||
dt++;
|
||||
} else if (*dt == '-') {
|
||||
newer = 0;
|
||||
dt++;
|
||||
} else
|
||||
newer = 1;
|
||||
upd=atoul(dt);
|
||||
}
|
||||
|
||||
if (strlen(CFG.req_magic)) {
|
||||
/*
|
||||
* Open the areas database and request index.
|
||||
* Check for uppercase and lowercase magic names.
|
||||
*/
|
||||
p = xstrcpy(getenv("MBSE_ROOT"));
|
||||
p = xstrcat(p, (char *)"/etc/fareas.data");
|
||||
if ((fa = fopen(p, "r")) == NULL) {
|
||||
WriteError("$Can't open %s", p);
|
||||
return NULL;
|
||||
tnm = xstrcpy(CFG.req_magic);
|
||||
tnm = xstrcat(tnm,(char *)"/");
|
||||
tnm = xstrcat(tnm,tl(xstrcpy(nm)));
|
||||
if ((stat(tnm, &st) == 0) && (S_ISREG(st.st_mode))) {
|
||||
if (access(tnm, X_OK) == 0) {
|
||||
return respmagic(tnm);
|
||||
/* respmagic will free(tnm) */
|
||||
} else if (access(tnm, R_OK) == 0) {
|
||||
return resplist(tnm, pw, dt);
|
||||
/* resplist will free(tnm) */
|
||||
} else
|
||||
free(tnm);
|
||||
} else
|
||||
free(tnm);
|
||||
|
||||
tnm = xstrcpy(CFG.req_magic);
|
||||
tnm = xstrcat(tnm,(char *)"/");
|
||||
t = xstrcpy(nm);
|
||||
tnm = xstrcat(tnm,tu(t));
|
||||
free(t);
|
||||
if ((stat(tnm, &st) == 0) && (S_ISREG(st.st_mode))) {
|
||||
if (access(tnm, X_OK) == 0) {
|
||||
return respmagic(tnm);
|
||||
/* respmagic will free(tnm) */
|
||||
} else if (access(tnm, R_OK) == 0) {
|
||||
return resplist(tnm, pw, dt);
|
||||
/* resplist will free(tnm) */
|
||||
} else
|
||||
free(tnm);
|
||||
} else free(tnm);
|
||||
}
|
||||
|
||||
Syslog('+', "File request : %s (update (%s), password \"%s\")",MBSE_SS(nm),MBSE_SS(dt),MBSE_SS(pw));
|
||||
add_report((char *)"RQ: Regular file \"%s\"",nm);
|
||||
p = tl(nm);
|
||||
q = mask;
|
||||
*q++ = '^';
|
||||
while ((*p) && (q < (mask + sizeof(mask) - 4))) {
|
||||
switch (*p) {
|
||||
case '\\': *q++ = '\\'; *q++ = '\\'; break;
|
||||
case '?': *q++ = '.'; break;
|
||||
case '.': *q++ = '\\'; *q++ = '.'; break;
|
||||
case '+': *q++ = '\\'; *q++ = '+'; break;
|
||||
case '*': *q++ = '.'; *q++ = '*'; break;
|
||||
default: *q++ = toupper(*p); break;
|
||||
}
|
||||
free(p);
|
||||
fread(&areahdr, sizeof(areahdr), 1, fa);
|
||||
p++;
|
||||
}
|
||||
*q++ = '$';
|
||||
*q = '\0';
|
||||
Syslog('f', "Search mask \"%s\"", mask);
|
||||
re_comp(mask);
|
||||
|
||||
p = xstrcpy(getenv("MBSE_ROOT"));
|
||||
p = xstrcat(p, (char *)"/etc/request.index");
|
||||
if ((fi = fopen(p, "r")) == NULL) {
|
||||
WriteError("$Can't open %s", p);
|
||||
/*
|
||||
* Open the areas database and request index.
|
||||
*/
|
||||
p = xstrcpy(getenv("MBSE_ROOT"));
|
||||
p = xstrcat(p, (char *)"/etc/fareas.data");
|
||||
if ((fa = fopen(p, "r")) == NULL) {
|
||||
WriteError("$Can't open %s", p);
|
||||
return NULL;
|
||||
}
|
||||
free(p);
|
||||
fread(&areahdr, sizeof(areahdr), 1, fa);
|
||||
|
||||
p = xstrcpy(getenv("MBSE_ROOT"));
|
||||
p = xstrcat(p, (char *)"/etc/request.index");
|
||||
if ((fi = fopen(p, "r")) == NULL) {
|
||||
WriteError("$Can't open %s", p);
|
||||
return NULL;
|
||||
}
|
||||
Area = 0L;
|
||||
free(p);
|
||||
|
||||
Syslog('f', "Start search ...");
|
||||
while (!no_more && (fread(&idx, sizeof(idx), 1, fi) == 1)) {
|
||||
if (re_exec(idx.Name) || re_exec(idx.LName)) {
|
||||
Syslog('f', "Index found %s area %d record %d", idx.LName, idx.AreaNum, idx.Record);
|
||||
if (fseek(fa, ((idx.AreaNum - 1) * areahdr.recsize) + areahdr.hdrsize, SEEK_SET) == -1) {
|
||||
WriteError("$Can't seek in fareas.data");
|
||||
return NULL;
|
||||
}
|
||||
Area = 0L;
|
||||
free(p);
|
||||
|
||||
Syslog('f', "Start search ...");
|
||||
while (!no_more && (fread(&idx, sizeof(idx), 1, fi) == 1)) {
|
||||
if (re_exec(idx.Name) || re_exec(idx.LName)) {
|
||||
Syslog('f', "Index found %s area %d record %d", idx.LName, idx.AreaNum, idx.Record);
|
||||
if (fseek(fa, ((idx.AreaNum - 1) * areahdr.recsize) + areahdr.hdrsize, SEEK_SET) == -1) {
|
||||
WriteError("$Can't seek in fareas.data");
|
||||
return NULL;
|
||||
}
|
||||
if (fread(&area, areahdr.recsize, 1, fa) != 1) {
|
||||
WriteError("$Can't read record %d in fareas.data", idx.AreaNum);
|
||||
return NULL;
|
||||
}
|
||||
Syslog('f', "Area %s", area.Name);
|
||||
p = calloc(PATH_MAX, sizeof(char));
|
||||
sprintf(p, "%s/fdb/file%ld.data", getenv("MBSE_ROOT"), idx.AreaNum);
|
||||
if ((fb = fopen(p, "r+")) == NULL) {
|
||||
WriteError("$Can't open %s", p);
|
||||
free(p);
|
||||
} else {
|
||||
free(p);
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, fb);
|
||||
if (fseek(fb, fdbhdr.hdrsize + (idx.Record * fdbhdr.recsize), SEEK_SET) == -1) {
|
||||
WriteError("$Can't seek filerecord %d", idx.Record);
|
||||
} else {
|
||||
if (fread(&fdb, fdbhdr.recsize, 1, fb) != 1) {
|
||||
WriteError("$Can't read filerecord %d", idx.Record);
|
||||
} else {
|
||||
Send = FALSE;
|
||||
Syslog('f', "Found \"%s\" in %s", fdb.LName, area.Name);
|
||||
tnm = xstrcpy(area.Path);
|
||||
tnm = xstrcat(tnm, (char *)"/");
|
||||
tnm = xstrcat(tnm, fdb.LName);
|
||||
if ((stat(tnm, &st) == 0) && (S_ISREG(st.st_mode)) &&
|
||||
(access(tnm, R_OK) == 0) && ((upd == 0L) || ((newer) && (st.st_mtime <= upd)))) {
|
||||
Send = TRUE;
|
||||
}
|
||||
if (fread(&area, areahdr.recsize, 1, fa) != 1) {
|
||||
WriteError("$Can't read record %d in fareas.data", idx.AreaNum);
|
||||
return NULL;
|
||||
}
|
||||
Syslog('f', "Area %s", area.Name);
|
||||
p = calloc(128, sizeof(char));
|
||||
sprintf(p, "%s/fdb/fdb%ld.data", getenv("MBSE_ROOT"), idx.AreaNum);
|
||||
if ((fb = fopen(p, "r+")) == NULL) {
|
||||
WriteError("$Can't open %s", p);
|
||||
free(p);
|
||||
} else {
|
||||
free(p);
|
||||
if (fseek(fb, idx.Record * sizeof(file), SEEK_SET) == -1) {
|
||||
WriteError("$Can't seek filerecord %d", idx.Record);
|
||||
} else {
|
||||
if (fread(&file, sizeof(file), 1, fb) != 1) {
|
||||
WriteError("$Can't read filerecord %d", idx.Record);
|
||||
} else {
|
||||
Send = FALSE;
|
||||
Syslog('f', "Found \"%s\" in %s", file.LName, area.Name);
|
||||
tnm = xstrcpy(area.Path);
|
||||
tnm = xstrcat(tnm, (char *)"/");
|
||||
tnm = xstrcat(tnm, file.LName);
|
||||
if ((stat(tnm, &st) == 0) && (S_ISREG(st.st_mode)) &&
|
||||
(access(tnm, R_OK) == 0) && ((upd == 0L) ||
|
||||
((newer) && (st.st_mtime <= upd)))) {
|
||||
Send = TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* If no password is given, we do not respond
|
||||
* on requests to password protected areas
|
||||
* or files in case it was a wildcard request.
|
||||
* Wrong passwords are honored with an error
|
||||
* response.
|
||||
*/
|
||||
if (Send && strlen(area.Password)) {
|
||||
if (pw != NULL) {
|
||||
if (strcasecmp(area.Password, pw)) {
|
||||
Send = FALSE;
|
||||
Syslog('+', "Bad password for area %s", area.Name);
|
||||
add_report((char *)"ER: bad password for area %s",
|
||||
area.Name);
|
||||
}
|
||||
} else {
|
||||
Send = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (Send && strlen(file.Password)) {
|
||||
if (pw != NULL) {
|
||||
if (strcasecmp(file.Password, pw)) {
|
||||
Send = FALSE;
|
||||
Syslog('+', "Bad password for file %s", file.Name);
|
||||
add_report((char *)"ER: bad password for file %s",
|
||||
file.LName);
|
||||
}
|
||||
} else {
|
||||
Send = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (Send && CFG.Req_Files) {
|
||||
if (report_count >= CFG.Req_Files) {
|
||||
Send = FALSE;
|
||||
add_report((char *)"ER: too many files requested");
|
||||
Syslog('+', "Exceeding maximum files limit");
|
||||
no_more = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (Send && CFG.Req_MBytes) {
|
||||
if ((st.st_size + report_total) > (CFG.Req_MBytes * 1048576)) {
|
||||
Send = FALSE;
|
||||
add_report((char *)"ER: file %s will exceed the request limit",
|
||||
file.Name);
|
||||
Syslog('+', "Exceeding request size limit");
|
||||
no_more = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (Send) {
|
||||
Syslog('f', "Will send %s", file.LName);
|
||||
report_total += st.st_size;
|
||||
report_count++;
|
||||
if (strcasecmp(file.Name, file.LName))
|
||||
add_report((char *)"OK: Sending \"%s\" as \"%s\" (%lu bytes)",
|
||||
file.LName, file.Name, file.Size);
|
||||
else
|
||||
add_report((char *)"OK: Sending \"%s\" (%lu bytes)",
|
||||
file.LName, file.Size);
|
||||
add_list(&fl, tnm, file.LName, 0, 0L, NULL, 1);
|
||||
|
||||
/*
|
||||
* Update file information
|
||||
*/
|
||||
file.TimesReq++;
|
||||
file.LastDL = time(NULL);
|
||||
fseek(fb, - sizeof(file), SEEK_CUR);
|
||||
fwrite(&file, sizeof(file), 1, fb);
|
||||
}
|
||||
free(tnm);
|
||||
}
|
||||
/*
|
||||
* If no password is given, we do not respond
|
||||
* on requests to password protected areas
|
||||
* or files in case it was a wildcard request.
|
||||
* Wrong passwords are honored with an error
|
||||
* response.
|
||||
*/
|
||||
if (Send && strlen(area.Password)) {
|
||||
if (pw != NULL) {
|
||||
if (strcasecmp(area.Password, pw)) {
|
||||
Send = FALSE;
|
||||
Syslog('+', "Bad password for area %s", area.Name);
|
||||
add_report((char *)"ER: bad password for area %s", area.Name);
|
||||
}
|
||||
fclose(fb);
|
||||
} else {
|
||||
Send = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (Send && strlen(fdb.Password)) {
|
||||
if (pw != NULL) {
|
||||
if (strcasecmp(fdb.Password, pw)) {
|
||||
Send = FALSE;
|
||||
Syslog('+', "Bad password for file %s", fdb.Name);
|
||||
add_report((char *)"ER: bad password for file %s", fdb.LName);
|
||||
}
|
||||
} else {
|
||||
Send = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
if (Send && CFG.Req_Files) {
|
||||
if (report_count >= CFG.Req_Files) {
|
||||
Send = FALSE;
|
||||
add_report((char *)"ER: too many files requested");
|
||||
Syslog('+', "Exceeding maximum files limit");
|
||||
no_more = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (Send && CFG.Req_MBytes) {
|
||||
if ((st.st_size + report_total) > (CFG.Req_MBytes * 1048576)) {
|
||||
Send = FALSE;
|
||||
add_report((char *)"ER: file %s will exceed the request limit", fdb.Name);
|
||||
Syslog('+', "Exceeding request size limit");
|
||||
no_more = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (Send) {
|
||||
Syslog('f', "Will send %s", fdb.LName);
|
||||
report_total += st.st_size;
|
||||
report_count++;
|
||||
if (strcasecmp(fdb.Name, fdb.LName))
|
||||
add_report((char *)"OK: Sending \"%s\" as \"%s\" (%lu bytes)", fdb.LName, fdb.Name, fdb.Size);
|
||||
else
|
||||
add_report((char *)"OK: Sending \"%s\" (%lu bytes)", fdb.LName, fdb.Size);
|
||||
add_list(&fl, tnm, fdb.LName, 0, 0L, NULL, 1);
|
||||
|
||||
/*
|
||||
* Update file information
|
||||
*/
|
||||
fdb.TimesDL++;
|
||||
fdb.LastDL = time(NULL);
|
||||
fseek(fb, - fdbhdr.recsize, SEEK_CUR);
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, fb);
|
||||
}
|
||||
free(tnm);
|
||||
}
|
||||
}
|
||||
fclose(fb);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fclose(fa);
|
||||
fclose(fi);
|
||||
fclose(fa);
|
||||
fclose(fi);
|
||||
|
||||
if (fl == NULL)
|
||||
add_report((char *)"ER: No matching files found");
|
||||
if (fl == NULL)
|
||||
add_report((char *)"ER: No matching files found");
|
||||
|
||||
return fl;
|
||||
return fl;
|
||||
}
|
||||
|
||||
|
||||
|
174
mbfido/addbbs.c
174
mbfido/addbbs.c
@ -48,13 +48,13 @@ extern int tic_imp;
|
||||
*/
|
||||
int Add_BBS()
|
||||
{
|
||||
struct FILERecord frec;
|
||||
int rc, i, Insert, Done = FALSE, Found = FALSE;
|
||||
char fdbname[PATH_MAX], fdbtemp[PATH_MAX];
|
||||
char temp1[PATH_MAX], temp2[PATH_MAX], *fname, *lname, *p;
|
||||
FILE *fdb, *fdt;
|
||||
int Keep = 0, DidDelete = FALSE;
|
||||
fd_list *fdl = NULL;
|
||||
struct FILE_recordhdr frechdr;
|
||||
struct FILE_record frec;
|
||||
int rc, i, Insert, Done = FALSE, Found = FALSE, Keep = 0, DidDelete = FALSE;
|
||||
char fdbname[PATH_MAX], fdbtemp[PATH_MAX];
|
||||
char temp1[PATH_MAX], temp2[PATH_MAX], *fname, *lname, *p;
|
||||
FILE *fp, *fdt;
|
||||
fd_list *fdl = NULL;
|
||||
|
||||
/*
|
||||
* First check for an existing record with the same filename,
|
||||
@ -62,20 +62,21 @@ int Add_BBS()
|
||||
* prevent for example allfiles.zip to get a new record everytime
|
||||
* and thus the download counters will be reset after a new update.
|
||||
*/
|
||||
sprintf(fdbname, "%s/fdb/fdb%ld.data", getenv("MBSE_ROOT"), tic.FileArea);
|
||||
if ((fdb = fopen(fdbname, "r+")) != NULL) {
|
||||
while (fread(&frec, sizeof(frec), 1, fdb) == 1) {
|
||||
sprintf(fdbname, "%s/fdb/file%ld.data", getenv("MBSE_ROOT"), tic.FileArea);
|
||||
if ((fp = fopen(fdbname, "r+")) != NULL) {
|
||||
fread(&frechdr, sizeof(frechdr), 1, fp);
|
||||
while (fread(&frec, frechdr.recsize, 1, fp) == 1) {
|
||||
if (strcmp(frec.Name, TIC.NewFile) == 0) {
|
||||
sprintf(temp1, "%s/%s", TIC.Inbound, TIC.NewFile);
|
||||
sprintf(temp2, "%s/%s", TIC.BBSpath, TIC.NewFile);
|
||||
mkdirs(temp2, 0755);
|
||||
if ((rc = file_cp(temp1, temp2))) {
|
||||
WriteError("Copy to %s failed: %s", temp2, strerror(rc));
|
||||
fclose(fdb);
|
||||
fclose(fp);
|
||||
return FALSE;
|
||||
}
|
||||
chmod(temp2, 0644);
|
||||
frec.TicAreaCRC = StringCRC32(TIC.TicIn.Area);
|
||||
strncpy(frec.TicArea, TIC.TicIn.Area, sizeof(frec.TicArea) -1);
|
||||
frec.Size = TIC.FileSize;
|
||||
frec.Crc32 = TIC.Crc_Int;
|
||||
frec.Announced = TRUE;
|
||||
@ -88,16 +89,16 @@ int Add_BBS()
|
||||
}
|
||||
if (strlen(TIC.TicIn.Magic))
|
||||
sprintf(frec.Desc[i], "Magic Request: %s", TIC.TicIn.Magic);
|
||||
fseek(fdb, 0 - sizeof(frec), SEEK_CUR);
|
||||
fwrite(&frec, sizeof(frec), 1, fdb);
|
||||
fclose(fdb);
|
||||
fseek(fp, 0 - sizeof(frec), SEEK_CUR);
|
||||
fwrite(&frec, sizeof(frec), 1, fp);
|
||||
fclose(fp);
|
||||
tic_imp++;
|
||||
if ((i = file_rm(temp1)))
|
||||
WriteError("file_rm(%s): %s", temp1, strerror(i));
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
fclose(fdb);
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
|
||||
@ -116,7 +117,7 @@ int Add_BBS()
|
||||
for (i = 0; i < strlen(frec.LName); i++)
|
||||
frec.LName[i] = tolower(frec.LName[i]);
|
||||
}
|
||||
frec.TicAreaCRC = StringCRC32(TIC.TicIn.Area);
|
||||
strncpy(frec.TicArea, TIC.TicIn.Area, 20);
|
||||
frec.Size = TIC.FileSize;
|
||||
frec.Crc32 = TIC.Crc_Int;
|
||||
frec.Announced = TRUE;
|
||||
@ -128,8 +129,10 @@ int Add_BBS()
|
||||
if (i == 24)
|
||||
break;
|
||||
}
|
||||
if (strlen(TIC.TicIn.Magic))
|
||||
if (strlen(TIC.TicIn.Magic)) {
|
||||
strncpy(frec.Magic, TIC.TicIn.Magic, sizeof(frec.Magic) -1);
|
||||
sprintf(frec.Desc[i], "Magic Request: %s", TIC.TicIn.Magic);
|
||||
}
|
||||
|
||||
sprintf(temp1, "%s/%s", TIC.Inbound, TIC.NewFile);
|
||||
sprintf(temp2, "%s/%s", TIC.BBSpath, frec.Name);
|
||||
@ -167,15 +170,19 @@ int Add_BBS()
|
||||
}
|
||||
free(lname);
|
||||
|
||||
sprintf(fdbtemp, "%s/fdb/fdb%ld.temp", getenv("MBSE_ROOT"), tic.FileArea);
|
||||
|
||||
if ((fdb = fopen(fdbname, "r+")) == NULL) {
|
||||
sprintf(fdbtemp, "%s/fdb/file%ld.temp", getenv("MBSE_ROOT"), tic.FileArea);
|
||||
if ((fp = fopen(fdbname, "r+")) == NULL) {
|
||||
Syslog('+', "Fdb %s doesn't exist, creating", fdbname);
|
||||
if ((fdb = fopen(fdbname, "a+")) == NULL) {
|
||||
if ((fp = fopen(fdbname, "a+")) == NULL) {
|
||||
WriteError("$Can't create %s", fdbname);
|
||||
return FALSE;
|
||||
}
|
||||
frechdr.hdrsize = sizeof(frechdr);
|
||||
frechdr.recsize = sizeof(frec);
|
||||
fwrite(&frechdr, sizeof(frechdr), 1, fp);
|
||||
chmod(fdbname, 0660);
|
||||
} else {
|
||||
fread(&frechdr, sizeof(frechdr), 1, fp);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -183,10 +190,10 @@ int Add_BBS()
|
||||
* one and leave immediatly, keepnum and replace have no
|
||||
* use at this point.
|
||||
*/
|
||||
fseek(fdb, 0, SEEK_END);
|
||||
if (ftell(fdb) == 0) {
|
||||
fwrite(&frec, sizeof(frec), 1, fdb);
|
||||
fclose(fdb);
|
||||
fseek(fp, 0, SEEK_END);
|
||||
if (ftell(fp) == frechdr.hdrsize) {
|
||||
fwrite(&frec, sizeof(frec), 1, fp);
|
||||
fclose(fp);
|
||||
file_rm(temp1);
|
||||
tic_imp++;
|
||||
return TRUE;
|
||||
@ -197,17 +204,17 @@ int Add_BBS()
|
||||
* which position to insert the new file, replace or
|
||||
* remove the old entry.
|
||||
*/
|
||||
fseek(fdb, 0, SEEK_SET);
|
||||
fseek(fp, frechdr.hdrsize, SEEK_SET);
|
||||
|
||||
Insert = 0;
|
||||
do {
|
||||
if (fread(&file, sizeof(file), 1, fdb) != 1)
|
||||
if (fread(&fdb, frechdr.recsize, 1, fp) != 1)
|
||||
Done = TRUE;
|
||||
if (!Done) {
|
||||
if (strcmp(frec.LName, file.LName) == 0) {
|
||||
if (strcmp(frec.LName, fdb.LName) == 0) {
|
||||
Found = TRUE;
|
||||
Insert++;
|
||||
} else if (strcmp(frec.LName, file.LName) < 0)
|
||||
} else if (strcmp(frec.LName, fdb.LName) < 0)
|
||||
Found = TRUE;
|
||||
else
|
||||
Insert++;
|
||||
@ -217,53 +224,54 @@ int Add_BBS()
|
||||
if (Found) {
|
||||
if ((fdt = fopen(fdbtemp, "a+")) == NULL) {
|
||||
WriteError("$Can't create %s", fdbtemp);
|
||||
fclose(fdb);
|
||||
fclose(fp);
|
||||
return FALSE;
|
||||
}
|
||||
fwrite(&frechdr, frechdr.hdrsize, 1, fdt);
|
||||
|
||||
fseek(fdb, 0, SEEK_SET);
|
||||
fseek(fp, frechdr.hdrsize, SEEK_SET);
|
||||
/*
|
||||
* Copy entries till the insert point.
|
||||
*/
|
||||
for (i = 0; i < Insert; i++) {
|
||||
fread(&file, sizeof(file), 1, fdb);
|
||||
fread(&fdb, frechdr.recsize, 1, fp);
|
||||
/*
|
||||
* Check if we are importing a file with the same
|
||||
* name, if so, don't copy the original database
|
||||
* record. The file is also overwritten.
|
||||
*/
|
||||
if (strcmp(file.LName, frec.LName) != 0)
|
||||
fwrite(&file, sizeof(file), 1, fdt);
|
||||
if (strcmp(fdb.LName, frec.LName) != 0)
|
||||
fwrite(&fdb, frechdr.recsize, 1, fdt);
|
||||
}
|
||||
|
||||
if (area.AddAlpha) {
|
||||
/*
|
||||
* Insert the new entry
|
||||
*/
|
||||
fwrite(&frec, sizeof(frec), 1, fdt);
|
||||
fwrite(&frec, frechdr.recsize, 1, fdt);
|
||||
}
|
||||
|
||||
/*
|
||||
* Append the rest of the entries.
|
||||
*/
|
||||
while (fread(&file, sizeof(file), 1, fdb) == 1) {
|
||||
while (fread(&fdb, frechdr.recsize, 1, fp) == 1) {
|
||||
/*
|
||||
* Check if we find a file with the same name,
|
||||
* then we skip the record what was origionaly
|
||||
* in the database record.
|
||||
*/
|
||||
if (strcmp(file.LName, frec.LName) != 0)
|
||||
fwrite(&file, sizeof(file), 1, fdt);
|
||||
if (strcmp(fdb.LName, frec.LName) != 0)
|
||||
fwrite(&fdb, frechdr.recsize, 1, fdt);
|
||||
}
|
||||
|
||||
if (!area.AddAlpha) {
|
||||
/*
|
||||
* Append the new entry
|
||||
*/
|
||||
fwrite(&frec, sizeof(frec), 1, fdt);
|
||||
fwrite(&frec, frechdr.recsize, 1, fdt);
|
||||
}
|
||||
fclose(fdt);
|
||||
fclose(fdb);
|
||||
fclose(fp);
|
||||
|
||||
/*
|
||||
* Now make the changes for real.
|
||||
@ -280,9 +288,9 @@ int Add_BBS()
|
||||
/*
|
||||
* Append the new entry
|
||||
*/
|
||||
fseek(fdb, 0, SEEK_END);
|
||||
fwrite(&frec, sizeof(frec), 1, fdb);
|
||||
fclose(fdb);
|
||||
fseek(fp, 0, SEEK_END);
|
||||
fwrite(&frec, frechdr.recsize, 1, fp);
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -297,28 +305,30 @@ int Add_BBS()
|
||||
if ((strlen(TIC.TicIn.Replace)) && (tic.Replace)) {
|
||||
Syslog('f', "Must Replace: %s", TIC.TicIn.Replace);
|
||||
|
||||
if ((fdb = fopen(fdbname, "r+")) != NULL) {
|
||||
if ((fp = fopen(fdbname, "r+")) != NULL) {
|
||||
|
||||
while (fread(&file, sizeof(file), 1, fdb) == 1) {
|
||||
if (strlen(file.LName) == strlen(frec.LName)) {
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, fp);
|
||||
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, fp) == 1) {
|
||||
if (strlen(fdb.LName) == strlen(frec.LName)) {
|
||||
// FIXME: Search must be based on a reg_exp search
|
||||
if (strcasecmp(file.LName, frec.LName) != 0) {
|
||||
if (strcasecmp(fdb.LName, frec.LName) != 0) {
|
||||
Found = TRUE;
|
||||
for (i = 0; i < strlen(frec.LName); i++) {
|
||||
if ((TIC.TicIn.Replace[i] != '?') && (toupper(TIC.TicIn.Replace[i]) != toupper(file.LName[i])))
|
||||
if ((TIC.TicIn.Replace[i] != '?') && (toupper(TIC.TicIn.Replace[i]) != toupper(fdb.LName[i])))
|
||||
Found = FALSE;
|
||||
}
|
||||
if (Found) {
|
||||
Syslog('+', "Replace: Deleting: %s", file.LName);
|
||||
file.Deleted = TRUE;
|
||||
fseek(fdb, - sizeof(file), SEEK_CUR);
|
||||
fwrite(&file, sizeof(file), 1, fdb);
|
||||
Syslog('+', "Replace: Deleting: %s", fdb.LName);
|
||||
fdb.Deleted = TRUE;
|
||||
fseek(fp , - fdbhdr.recsize, SEEK_CUR);
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, fp);
|
||||
DidDelete = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(fdb);
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
|
||||
@ -326,27 +336,29 @@ int Add_BBS()
|
||||
* Handle the Keep number of files option
|
||||
*/
|
||||
if (TIC.KeepNum) {
|
||||
if ((fdb = fopen(fdbname, "r")) != NULL) {
|
||||
if ((fp = fopen(fdbname, "r")) != NULL) {
|
||||
|
||||
while (fread(&file, sizeof(file), 1, fdb) == 1) {
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, fp);
|
||||
|
||||
if ((strlen(file.LName) == strlen(frec.LName)) && (!file.Deleted)) {
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, fp) == 1) {
|
||||
|
||||
if ((strlen(fdb.LName) == strlen(frec.LName)) && (!fdb.Deleted)) {
|
||||
Found = TRUE;
|
||||
|
||||
for (i = 0; i < strlen(file.LName); i++) {
|
||||
for (i = 0; i < strlen(fdb.LName); i++) {
|
||||
if ((frec.LName[i] < '0') || (frec.LName[i] > '9')) {
|
||||
if (frec.LName[i] != file.LName[i]) {
|
||||
if (frec.LName[i] != fdb.LName[i]) {
|
||||
Found = FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Found) {
|
||||
Keep++;
|
||||
fill_fdlist(&fdl, file.LName, file.UploadDate);
|
||||
fill_fdlist(&fdl, fdb.LName, fdb.UploadDate);
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(fdb);
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -355,22 +367,24 @@ int Add_BBS()
|
||||
if (Keep > TIC.KeepNum) {
|
||||
sort_fdlist(&fdl);
|
||||
|
||||
if ((fdb = fopen(fdbname, "r+")) != NULL) {
|
||||
if ((fp = fopen(fdbname, "r+")) != NULL) {
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, fp);
|
||||
|
||||
for (i = 0; i < (Keep - TIC.KeepNum); i++) {
|
||||
fname = pull_fdlist(&fdl);
|
||||
fseek(fdb, 0, SEEK_SET);
|
||||
fseek(fp, fdbhdr.hdrsize, SEEK_SET);
|
||||
|
||||
while (fread(&file, sizeof(file), 1, fdb) == 1) {
|
||||
if (strcmp(file.LName, fname) == 0) {
|
||||
Syslog('+', "Keep %d files, deleting: %s", TIC.KeepNum, file.LName);
|
||||
file.Deleted = TRUE;
|
||||
fseek(fdb, - sizeof(file), SEEK_CUR);
|
||||
fwrite(&file, sizeof(file), 1, fdb);
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, fp) == 1) {
|
||||
if (strcmp(fdb.LName, fname) == 0) {
|
||||
Syslog('+', "Keep %d files, deleting: %s", TIC.KeepNum, fdb.LName);
|
||||
fdb.Deleted = TRUE;
|
||||
fseek(fp , - fdbhdr.recsize, SEEK_CUR);
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, fp);
|
||||
DidDelete = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(fdb);
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
tidy_fdlist(&fdl);
|
||||
@ -381,20 +395,24 @@ int Add_BBS()
|
||||
* database.
|
||||
*/
|
||||
if (DidDelete) {
|
||||
if ((fdb = fopen(fdbname, "r")) != NULL) {
|
||||
if ((fp = fopen(fdbname, "r")) != NULL) {
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, fp);
|
||||
if ((fdt = fopen(fdbtemp, "a+")) != NULL) {
|
||||
while (fread(&file, sizeof(file), 1, fdb) == 1)
|
||||
if (!file.Deleted)
|
||||
fwrite(&file, sizeof(file), 1, fdt);
|
||||
fwrite(&fdbhdr, fdbhdr.hdrsize, 1, fdt);
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, fp) == 1)
|
||||
if (!fdb.Deleted)
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, fdt);
|
||||
else {
|
||||
sprintf(temp2, "%s/%s", area.Path, file.LName);
|
||||
sprintf(temp2, "%s/%s", area.Path, fdb.LName);
|
||||
if (unlink(temp2) != 0)
|
||||
WriteError("$Can't unlink file %s", temp2);
|
||||
sprintf(temp2, "%s/%s", area.Path, file.Name);
|
||||
sprintf(temp2, "%s/%s", area.Path, fdb.Name);
|
||||
if (unlink(temp2) != 0)
|
||||
WriteError("$Can't unlink file %s", temp2);
|
||||
sprintf(temp2, "%s/.%s", area.Path, fdb.Name);
|
||||
unlink(temp2); /* Thumbnail, no logging if there is an error */
|
||||
}
|
||||
fclose(fdb);
|
||||
fclose(fp);
|
||||
fclose(fdt);
|
||||
if (unlink(fdbname) == 0) {
|
||||
rename(fdbtemp, fdbname);
|
||||
@ -403,7 +421,7 @@ int Add_BBS()
|
||||
unlink(fdbtemp);
|
||||
}
|
||||
} else {
|
||||
fclose(fdb);
|
||||
fclose(fp);
|
||||
}
|
||||
DidDelete = FALSE;
|
||||
}
|
||||
|
@ -94,43 +94,49 @@ void Uploads()
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
sprintf(fAreas, "%s/fdb/fdb%d.data", getenv("MBSE_ROOT"), i);
|
||||
sprintf(fAreas, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), i);
|
||||
if ((pFile = fopen(fAreas, "r+")) != NULL) {
|
||||
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
Nopper();
|
||||
if (!file.Announced) {
|
||||
Syslog('m', " %d %s", i, file.Name);
|
||||
if (!fdb.Announced) {
|
||||
Syslog('m', " %d %s", i, fdb.Name);
|
||||
memset(&T_File, 0, sizeof(T_File));
|
||||
sprintf(T_File.Echo, "AREA %d", i);
|
||||
sprintf(T_File.Group, "%s", area.NewGroup);
|
||||
sprintf(T_File.Comment, "%s", area.Name);
|
||||
sprintf(T_File.Name, "%s", file.Name);
|
||||
sprintf(T_File.LName, "%s", file.LName);
|
||||
T_File.Size = file.Size;
|
||||
T_File.SizeKb = file.Size / 1024;
|
||||
T_File.Fdate = file.FileDate;
|
||||
sprintf(T_File.Crc, "%08lx", file.Crc32);
|
||||
sprintf(T_File.Desc, "%s %s %s %s", file.Desc[0], file.Desc[1], file.Desc[2], file.Desc[3]);
|
||||
if (strlen(fdb.TicArea))
|
||||
strncpy(T_File.Echo, fdb.TicArea, sizeof(T_File.Echo) -1);
|
||||
else
|
||||
sprintf(T_File.Echo, "AREA %d", i);
|
||||
strncpy(T_File.Group, area.NewGroup, sizeof(T_File.Group) -1);
|
||||
strncpy(T_File.Comment, area.Name, sizeof(T_File.Comment) -1);
|
||||
strncpy(T_File.Name, fdb.Name, sizeof(T_File.Name) -1);
|
||||
strncpy(T_File.LName, fdb.LName, sizeof(T_File.LName) -1);
|
||||
if (strlen(fdb.Magic))
|
||||
strncpy(T_File.Magic, fdb.Magic, sizeof(T_File.Magic) -1);
|
||||
T_File.Size = fdb.Size;
|
||||
T_File.SizeKb = fdb.Size / 1024;
|
||||
T_File.Fdate = fdb.FileDate;
|
||||
sprintf(T_File.Crc, "%08lx", fdb.Crc32);
|
||||
sprintf(T_File.Desc, "%s %s %s %s", fdb.Desc[0], fdb.Desc[1], fdb.Desc[2], fdb.Desc[3]);
|
||||
k = 0;
|
||||
for (j = 0; j < 25; j++) {
|
||||
if (strlen(file.Desc[j])) {
|
||||
sprintf(T_File.LDesc[k], "%s", file.Desc[j]);
|
||||
if (strlen(fdb.Desc[j])) {
|
||||
sprintf(T_File.LDesc[k], "%s", fdb.Desc[j]);
|
||||
T_File.LDesc[k][49] = '\0';
|
||||
k++;
|
||||
}
|
||||
}
|
||||
T_File.TotLdesc = k;
|
||||
T_File.Cost = file.Cost;
|
||||
T_File.Announce = TRUE;
|
||||
if (Add_ToBeRep())
|
||||
Count++;
|
||||
/*
|
||||
* Mark file is announced.
|
||||
*/
|
||||
file.Announced = TRUE;
|
||||
fseek(pFile, - sizeof(file), SEEK_CUR);
|
||||
fwrite(&file, sizeof(file), 1, pFile);
|
||||
fdb.Announced = TRUE;
|
||||
fseek(pFile, - fdbhdr.recsize, SEEK_CUR);
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, pFile);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -291,12 +291,13 @@ void ScanFiles(ff_list *tmp)
|
||||
Back(15);
|
||||
}
|
||||
if (area.Available && area.FileFind) {
|
||||
sprintf(temp, "%s/fdb/fdb%lu.data", getenv("MBSE_ROOT"), areanr);
|
||||
sprintf(temp, "%s/fdb/file%lu.data", getenv("MBSE_ROOT"), areanr);
|
||||
if ((pFile = fopen(temp, "r")) != NULL) {
|
||||
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
for (i = 0; i < 25; i++)
|
||||
sprintf(BigDesc, "%s%s", BigDesc, *(file.Desc + i));
|
||||
sprintf(BigDesc, "%s%s", BigDesc, *(fdb.Desc + i));
|
||||
sprintf(temp, "%s", tmp->subject);
|
||||
|
||||
Found = FALSE;
|
||||
@ -332,20 +333,20 @@ void ScanFiles(ff_list *tmp)
|
||||
tl(kwd);
|
||||
|
||||
if (strlen(kwd) > 3) {
|
||||
if (strstr(file.Name, kwd) != NULL) {
|
||||
if (strstr(fdb.Name, kwd) != NULL) {
|
||||
Found = TRUE;
|
||||
Syslog('m', "Found %s in %s in filename", kwd, file.Name);
|
||||
Syslog('m', "Found %s in %s in filename", kwd, fdb.Name);
|
||||
}
|
||||
if (keywrd && (strstr(tl(BigDesc), kwd) != NULL)) {
|
||||
Found = TRUE;
|
||||
Syslog('m', "Found %s in %s in description", kwd, file.Name);
|
||||
Syslog('m', "Found %s in %s in description", kwd, fdb.Name);
|
||||
}
|
||||
}
|
||||
} /* while (strlen(temp) && (!Found)) */
|
||||
if (Found) {
|
||||
found++;
|
||||
Syslog('m', "Found %s area %d", file.Name, areanr);
|
||||
fill_rflist(&rfl, file.Name, areanr);
|
||||
Syslog('m', "Found %s area %d", fdb.Name, areanr);
|
||||
fill_rflist(&rfl, fdb.Name, areanr);
|
||||
}
|
||||
strcpy(BigDesc, "");
|
||||
}
|
||||
@ -404,27 +405,28 @@ void ScanFiles(ff_list *tmp)
|
||||
areanr = rft->area;
|
||||
}
|
||||
|
||||
sprintf(temp, "%s/fdb/fdb%lu.data", getenv("MBSE_ROOT"), rft->area);
|
||||
sprintf(temp, "%s/fdb/file%lu.data", getenv("MBSE_ROOT"), rft->area);
|
||||
if ((pFile = fopen(temp, "r")) != NULL) {
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1)
|
||||
if (!strcmp(rft->filename, file.Name))
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1)
|
||||
if (!strcmp(rft->filename, fdb.Name))
|
||||
break;
|
||||
fclose(pFile);
|
||||
MacroVars("slbkdt", "ssddss", file.Name, file.LName, file.Size, file.Size / 1024, " ",
|
||||
To_Low(file.Desc[0],scanmgr.HiAscii));
|
||||
MacroVars("slbkdt", "ssddss", fdb.Name, fdb.LName, fdb.Size, fdb.Size / 1024, " ",
|
||||
To_Low(fdb.Desc[0],scanmgr.HiAscii));
|
||||
fseek(fi, filepos1, SEEK_SET);
|
||||
Msg_Macro(fi);
|
||||
filepos2 = ftell(fi);
|
||||
SubSize += file.Size;
|
||||
SubSize += fdb.Size;
|
||||
|
||||
/*
|
||||
* We add no more then 5 description lines
|
||||
* to prevent unnecesary long messages.
|
||||
*/
|
||||
for (i = 1; i < MAX_DESC_LINES; i++) {
|
||||
MacroVars("t", "s", To_Low(file.Desc[i],scanmgr.HiAscii));
|
||||
MacroVars("t", "s", To_Low(fdb.Desc[i],scanmgr.HiAscii));
|
||||
fseek(fi, filepos2, SEEK_SET);
|
||||
if (strlen(file.Desc[i])) {
|
||||
if (strlen(fdb.Desc[i])) {
|
||||
Msg_Macro(fi);
|
||||
} else {
|
||||
line = calloc(255, sizeof(char));
|
||||
|
@ -305,11 +305,6 @@ void F_Status(faddr *t, char *replyid)
|
||||
MacroVars("B", "d", nodes.Tic);
|
||||
MacroVars("C", "d", nodes.AdvTic);
|
||||
MacroVars("D", "d", nodes.Notify);
|
||||
MacroVars("E", "d", nodes.Billing);
|
||||
MacroVars("f", "d", nodes.BillDirect);
|
||||
MacroVars("G", "d", nodes.Debet);
|
||||
MacroVars("I", "d", nodes.Credit);
|
||||
MacroVars("J", "d", nodes.WarnLevel);
|
||||
MacroVars("a", "d", nodes.FilesSent.lweek);
|
||||
MacroVars("b", "d", nodes.FilesSent.month[i]);
|
||||
MacroVars("c", "d", nodes.FilesSent.total);
|
||||
|
@ -43,7 +43,7 @@
|
||||
|
||||
void ForwardFile(fidoaddr Node, fa_list *sbl)
|
||||
{
|
||||
char *subject = NULL, *fwdfile = NULL, *queuedir, *listfile, *ticfile = NULL, fname[PATH_MAX], *ticname, flavor;
|
||||
char *subject = NULL, *fwdfile = NULL, *queuedir, *listfile, *ticfile = NULL, *ticname, flavor;
|
||||
FILE *fp, *fi, *fl, *net;
|
||||
faddr *dest, *routeto, *Fa, *Temp, *ba;
|
||||
int i, z, n;
|
||||
@ -56,28 +56,6 @@ void ForwardFile(fidoaddr Node, fa_list *sbl)
|
||||
}
|
||||
Syslog('+', "Forward file to %s %s netmail", aka2str(Node), nodes.Message?"with":"without");
|
||||
|
||||
/*
|
||||
* If Costsharing active for this node
|
||||
*/
|
||||
if (nodes.Billing) {
|
||||
/*
|
||||
* Check if this node has enough credits for this file.
|
||||
*/
|
||||
T_File.Cost = TIC.FileCost + (TIC.FileCost * nodes.AddPerc / 1000);
|
||||
if ((nodes.Credit < (nodes.StopLevel + T_File.Cost)) && (!TIC.Charge)) {
|
||||
Syslog('!', "No forward to %s, not enough credit left", aka2str(Node));
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if we are passing the warning level
|
||||
*/
|
||||
if ((nodes.Credit > nodes.WarnLevel) && ((nodes.Credit - T_File.Cost) <= nodes.WarnLevel)) {
|
||||
Syslog('+', "Low credit warning to %s", aka2str(Node));
|
||||
/* CREATE NETMAIL */
|
||||
}
|
||||
}
|
||||
|
||||
fwdfile = calloc(PATH_MAX, sizeof(char));
|
||||
queuedir = calloc(PATH_MAX, sizeof(char));
|
||||
listfile = calloc(PATH_MAX, sizeof(char));
|
||||
@ -206,12 +184,6 @@ void ForwardFile(fidoaddr Node, fa_list *sbl)
|
||||
if (nodes.AdvTic) {
|
||||
fprintf(fp, "Areadesc %s\r\n", tic.Comment);
|
||||
fprintf(fp, "Fdn %s\r\n", fgroup.Comment);
|
||||
/*
|
||||
* According to Harald Harms this field must
|
||||
* be multiplied with 100.
|
||||
*/
|
||||
if (TIC.FileCost && nodes.Billing)
|
||||
fprintf(fp, "Cost %ld.00\r\n", T_File.Cost);
|
||||
if (TIC.TicIn.TotLDesc)
|
||||
for (i = 0; i < TIC.TicIn.TotLDesc; i++)
|
||||
fprintf(fp, "LDesc %s\r\n", TIC.TicIn.LDesc[i]);
|
||||
@ -289,30 +261,6 @@ void ForwardFile(fidoaddr Node, fa_list *sbl)
|
||||
WriteError("$Can't create %s", ticfile);
|
||||
}
|
||||
}
|
||||
|
||||
if (TIC.Charge && nodes.Billing) {
|
||||
nodes.Credit -= TIC.FileCost;
|
||||
Syslog('-', "Cost: %d Left: %d", TIC.FileCost, nodes.Credit);
|
||||
|
||||
/*
|
||||
* Add an entry to the billing file, each node has his own
|
||||
* billing file.
|
||||
*/
|
||||
sprintf(fname, "%s/tmp/%d.%d.%d.%d.bill", getenv("MBSE_ROOT"),
|
||||
nodes.Aka[0].zone, nodes.Aka[0].net, nodes.Aka[0].node, nodes.Aka[0].point);
|
||||
if ((fp = fopen(fname, "a+")) != NULL) {
|
||||
memset(&bill, 0, sizeof(bill));
|
||||
bill.Node = nodes.Aka[0];
|
||||
strcpy(bill.FileName, TIC.NewFile);
|
||||
strcpy(bill.FileEcho, TIC.TicIn.Area);
|
||||
bill.Size = TIC.FileSize;
|
||||
bill.Cost = TIC.FileCost;
|
||||
fwrite(&bill, sizeof(bill), 1, fp);
|
||||
fclose(fp);
|
||||
} else {
|
||||
WriteError("$Can't create %s", fname);
|
||||
}
|
||||
}
|
||||
fsync(fileno(fl));
|
||||
fclose(fl);
|
||||
|
||||
|
@ -322,9 +322,6 @@ void MakeStat(void)
|
||||
MacroVars("d", "s", q);
|
||||
MacroVars("e", "s", p);
|
||||
MacroVars("f", "s", adate(nodes.LastDate));
|
||||
MacroVars("g", "d", nodes.Billing);
|
||||
MacroVars("h", "d", nodes.Credit);
|
||||
MacroVars("i", "d", nodes.Debet);
|
||||
MacroVars("j", "d", nodes.F_KbSent.total);
|
||||
MacroVars("k", "d", nodes.F_KbRcvd.total);
|
||||
MacroVars("l", "d", nodes.MailSent.total);
|
||||
|
@ -51,7 +51,7 @@ void AdoptFile(int Area, char *File, char *Description)
|
||||
int IsArchive = FALSE, MustRearc = FALSE, UnPacked = FALSE;
|
||||
int IsVirus = FALSE, File_Id = FALSE;
|
||||
int i, j, k, lines = 0, File_id_cnt = 0, rc;
|
||||
struct FILERecord fdb;
|
||||
struct FILE_record f_db;
|
||||
|
||||
Syslog('f', "Adopt(%d, %s, %s)", Area, MBSE_SS(File), MBSE_SS(Description));
|
||||
|
||||
@ -140,11 +140,11 @@ void AdoptFile(int Area, char *File, char *Description)
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
memset(&fdb, 0, sizeof(fdb));
|
||||
strcpy(fdb.Uploader, CFG.sysop_name);
|
||||
fdb.UploadDate = time(NULL);
|
||||
memset(&f_db, 0, sizeof(f_db));
|
||||
strcpy(f_db.Uploader, CFG.sysop_name);
|
||||
f_db.UploadDate = time(NULL);
|
||||
if (do_annon)
|
||||
fdb.Announced = TRUE;
|
||||
f_db.Announced = TRUE;
|
||||
|
||||
if (UnPacked) {
|
||||
/*
|
||||
@ -187,7 +187,7 @@ void AdoptFile(int Area, char *File, char *Description)
|
||||
j = 0;
|
||||
for (i = 0; i < strlen(Desc); i++) {
|
||||
if ((Desc[i] >= ' ') || (Desc[i] < 0)) {
|
||||
fdb.Desc[File_id_cnt][j] = Desc[i];
|
||||
f_db.Desc[File_id_cnt][j] = Desc[i];
|
||||
j++;
|
||||
}
|
||||
}
|
||||
@ -200,12 +200,12 @@ void AdoptFile(int Area, char *File, char *Description)
|
||||
/*
|
||||
* Strip empty lines at end of FILE_ID.DIZ
|
||||
*/
|
||||
while ((strlen(fdb.Desc[File_id_cnt-1]) == 0) && (File_id_cnt))
|
||||
while ((strlen(f_db.Desc[File_id_cnt-1]) == 0) && (File_id_cnt))
|
||||
File_id_cnt--;
|
||||
|
||||
Syslog('f', "Got %d FILE_ID.DIZ lines", File_id_cnt);
|
||||
for (i = 0; i < File_id_cnt; i++)
|
||||
Syslog('f', "\"%s\"", fdb.Desc[i]);
|
||||
Syslog('f', "\"%s\"", f_db.Desc[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -225,7 +225,7 @@ void AdoptFile(int Area, char *File, char *Description)
|
||||
/*
|
||||
* Less then 48 chars, copy and ready.
|
||||
*/
|
||||
strcpy(fdb.Desc[0], Description);
|
||||
strcpy(f_db.Desc[0], Description);
|
||||
File_id_cnt++;
|
||||
} else {
|
||||
/*
|
||||
@ -238,14 +238,14 @@ void AdoptFile(int Area, char *File, char *Description)
|
||||
j = 48;
|
||||
while (TDesc[j] != ' ')
|
||||
j--;
|
||||
strncat(fdb.Desc[File_id_cnt], TDesc, j);
|
||||
strncat(f_db.Desc[File_id_cnt], TDesc, j);
|
||||
File_id_cnt++;
|
||||
k = strlen(TDesc);
|
||||
j++; /* Correct space */
|
||||
for (i = 0; i <= k; i++, j++)
|
||||
TDesc[i] = TDesc[j];
|
||||
}
|
||||
strcpy(fdb.Desc[File_id_cnt], TDesc);
|
||||
strcpy(f_db.Desc[File_id_cnt], TDesc);
|
||||
File_id_cnt++;
|
||||
}
|
||||
}
|
||||
@ -261,11 +261,11 @@ void AdoptFile(int Area, char *File, char *Description)
|
||||
*/
|
||||
strcpy(temp2, File);
|
||||
name_mangle(temp2);
|
||||
strcpy(fdb.Name, temp2);
|
||||
strcpy(fdb.LName, File);
|
||||
fdb.Size = file_size(File);
|
||||
fdb.Crc32 = file_crc(File, TRUE);
|
||||
fdb.FileDate = file_time(File);
|
||||
strcpy(f_db.Name, temp2);
|
||||
strcpy(f_db.LName, File);
|
||||
f_db.Size = file_size(File);
|
||||
f_db.Crc32 = file_crc(File, TRUE);
|
||||
f_db.FileDate = file_time(File);
|
||||
sprintf(temp2, "%s/%s", area.Path, File);
|
||||
|
||||
if (!do_quiet) {
|
||||
@ -273,15 +273,15 @@ void AdoptFile(int Area, char *File, char *Description)
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
if (strcmp(fdb.Name, fdb.LName)) {
|
||||
if (strcmp(f_db.Name, f_db.LName)) {
|
||||
lname = calloc(PATH_MAX, sizeof(char));
|
||||
sprintf(lname, "%s/%s", area.Path, fdb.Name);
|
||||
if (AddFile(fdb, Area, temp2, File, lname) == FALSE) {
|
||||
sprintf(lname, "%s/%s", area.Path, f_db.Name);
|
||||
if (AddFile(f_db, Area, temp2, File, lname) == FALSE) {
|
||||
die(MBERR_GENERAL);
|
||||
}
|
||||
free(lname);
|
||||
} else {
|
||||
if (AddFile(fdb, Area, temp2, File, NULL) == FALSE) {
|
||||
if (AddFile(f_db, Area, temp2, File, NULL) == FALSE) {
|
||||
die(MBERR_GENERAL);
|
||||
}
|
||||
}
|
||||
|
@ -172,7 +172,7 @@ void Check(void)
|
||||
WriteError("Can't stat %s", area.Path);
|
||||
}
|
||||
|
||||
sprintf(fAreas, "%s/fdb/fdb%d.data", getenv("MBSE_ROOT"), i);
|
||||
sprintf(fAreas, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), i);
|
||||
|
||||
/*
|
||||
* Open the file database, if it doesn't exist,
|
||||
@ -184,6 +184,11 @@ void Check(void)
|
||||
WriteError("$Can't create %s", fAreas);
|
||||
die(MBERR_GENERAL);
|
||||
}
|
||||
fdbhdr.hdrsize = sizeof(fdbhdr);
|
||||
fdbhdr.recsize = sizeof(fdb);
|
||||
fwrite(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
} else {
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -191,23 +196,22 @@ void Check(void)
|
||||
* against the contents of the directory.
|
||||
*/
|
||||
inArea = 0;
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
|
||||
iTotal++;
|
||||
inArea++;
|
||||
sprintf(newdir, "%s/%s", area.Path, file.LName);
|
||||
sprintf(mname, "%s/%s", area.Path, file.Name);
|
||||
sprintf(newdir, "%s/%s", area.Path, fdb.LName);
|
||||
sprintf(mname, "%s/%s", area.Path, fdb.Name);
|
||||
|
||||
if (file_exist(newdir, R_OK) && file_exist(mname, R_OK)) {
|
||||
Syslog('+', "File %s area %d not on disk.", newdir, i);
|
||||
if (!file.NoKill) {
|
||||
file.Deleted = TRUE;
|
||||
if (!fdb.NoKill) {
|
||||
fdb.Deleted = TRUE;
|
||||
do_pack = TRUE;
|
||||
}
|
||||
iErrors++;
|
||||
file.Missing = TRUE;
|
||||
fseek(pFile, - sizeof(file), SEEK_CUR);
|
||||
fwrite(&file, sizeof(file), 1, pFile);
|
||||
fseek(pFile, - fdbhdr.recsize, SEEK_CUR);
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, pFile);
|
||||
} else {
|
||||
/*
|
||||
* File exists, now check the file.
|
||||
@ -215,16 +219,16 @@ void Check(void)
|
||||
Marker();
|
||||
Update = FALSE;
|
||||
|
||||
strcpy(temp, file.LName);
|
||||
strcpy(temp, fdb.LName);
|
||||
name_mangle(temp);
|
||||
sprintf(mname, "%s/%s", area.Path, temp);
|
||||
if (strcmp(file.Name, temp)) {
|
||||
Syslog('!', "Converted %s to %s", file.Name, temp);
|
||||
if (strcmp(fdb.Name, temp)) {
|
||||
Syslog('!', "Converted %s to %s", fdb.Name, temp);
|
||||
tname = calloc(PATH_MAX, sizeof(char));
|
||||
sprintf(tname, "%s/%s", area.Path, file.Name);
|
||||
sprintf(tname, "%s/%s", area.Path, fdb.Name);
|
||||
rename(tname, mname);
|
||||
free(tname);
|
||||
strncpy(file.Name, temp, 12);
|
||||
strncpy(fdb.Name, temp, 12);
|
||||
iErrors++;
|
||||
Update = TRUE;
|
||||
}
|
||||
@ -232,17 +236,17 @@ void Check(void)
|
||||
/*
|
||||
* If 8.3 and LFN are the same, try to rename the LFN to lowercase.
|
||||
*/
|
||||
if (strcmp(file.Name, file.LName) == 0) {
|
||||
if (strcmp(fdb.Name, fdb.LName) == 0) {
|
||||
/*
|
||||
* 8.3 and LFN are the same.
|
||||
*/
|
||||
tname = calloc(PATH_MAX, sizeof(char));
|
||||
sprintf(tname, "%s/%s", area.Path, file.LName);
|
||||
for (j = 0; j < strlen(file.LName); j++)
|
||||
file.LName[j] = tolower(file.LName[j]);
|
||||
sprintf(newdir, "%s/%s", area.Path, file.LName);
|
||||
sprintf(tname, "%s/%s", area.Path, fdb.LName);
|
||||
for (j = 0; j < strlen(fdb.LName); j++)
|
||||
fdb.LName[j] = tolower(fdb.LName[j]);
|
||||
sprintf(newdir, "%s/%s", area.Path, fdb.LName);
|
||||
if (strcmp(tname, newdir)) {
|
||||
Syslog('+', "Rename LFN from %s to %s", file.Name, file.LName);
|
||||
Syslog('+', "Rename LFN from %s to %s", fdb.Name, fdb.LName);
|
||||
rename(tname, newdir);
|
||||
Update = TRUE;
|
||||
}
|
||||
@ -323,7 +327,7 @@ void Check(void)
|
||||
* It could be that there is a thumbnail made of the LFN.
|
||||
*/
|
||||
tname = calloc(PATH_MAX, sizeof(char));
|
||||
sprintf(tname, "%s/.%s", area.Path, file.LName);
|
||||
sprintf(tname, "%s/.%s", area.Path, fdb.LName);
|
||||
if (file_exist(tname, R_OK) == 0) {
|
||||
Syslog('+', "Removing thumbnail %s", tname);
|
||||
iErrors++;
|
||||
@ -332,28 +336,28 @@ void Check(void)
|
||||
free(tname);
|
||||
|
||||
|
||||
if (file_time(newdir) != file.FileDate) {
|
||||
Syslog('!', "Date mismatch area %d file %s", i, file.LName);
|
||||
file.FileDate = file_time(newdir);
|
||||
if (file_time(newdir) != fdb.FileDate) {
|
||||
Syslog('!', "Date mismatch area %d file %s", i, fdb.LName);
|
||||
fdb.FileDate = file_time(newdir);
|
||||
iErrors++;
|
||||
Update = TRUE;
|
||||
}
|
||||
if (file_size(newdir) != file.Size) {
|
||||
Syslog('!', "Size mismatch area %d file %s", i, file.LName);
|
||||
file.Size = file_size(newdir);
|
||||
if (file_size(newdir) != fdb.Size) {
|
||||
Syslog('!', "Size mismatch area %d file %s", i, fdb.LName);
|
||||
fdb.Size = file_size(newdir);
|
||||
iErrors++;
|
||||
Update = TRUE;
|
||||
}
|
||||
if (file_crc(newdir, CFG.slow_util && do_quiet) != file.Crc32) {
|
||||
Syslog('!', "CRC error area %d, file %s", i, file.LName);
|
||||
file.Crc32 = file_crc(newdir, CFG.slow_util && do_quiet);
|
||||
if (file_crc(newdir, CFG.slow_util && do_quiet) != fdb.Crc32) {
|
||||
Syslog('!', "CRC error area %d, file %s", i, fdb.LName);
|
||||
fdb.Crc32 = file_crc(newdir, CFG.slow_util && do_quiet);
|
||||
iErrors++;
|
||||
Update = TRUE;
|
||||
}
|
||||
Marker();
|
||||
if (Update) {
|
||||
fseek(pFile, - sizeof(file), SEEK_CUR);
|
||||
fwrite(&file, sizeof(file), 1, pFile);
|
||||
fseek(pFile, - fdbhdr.recsize, SEEK_CUR);
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, pFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -370,9 +374,9 @@ void Check(void)
|
||||
if (de->d_name[0] != '.') {
|
||||
Marker();
|
||||
Found = FALSE;
|
||||
rewind(pFile);
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
if ((strcmp(file.LName, de->d_name) == 0) || (strcmp(file.Name, de->d_name) == 0)) {
|
||||
fseek(pFile, fdbhdr.hdrsize, SEEK_SET);
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
if ((strcmp(fdb.LName, de->d_name) == 0) || (strcmp(fdb.Name, de->d_name) == 0)) {
|
||||
if (!Found) {
|
||||
Found = TRUE;
|
||||
} else {
|
||||
@ -380,12 +384,12 @@ void Check(void)
|
||||
* Record has been found before, so this must be
|
||||
* a double record.
|
||||
*/
|
||||
Syslog('!', "Double file record area %d file %s", i, file.LName);
|
||||
Syslog('!', "Double file record area %d file %s", i, fdb.LName);
|
||||
iErrors++;
|
||||
file.Double = TRUE;
|
||||
fdb.Double = TRUE;
|
||||
do_pack = TRUE;
|
||||
fseek(pFile, - sizeof(file), SEEK_CUR);
|
||||
fwrite(&file, sizeof(file), 1, pFile);
|
||||
fseek(pFile, - fdbhdr.recsize, SEEK_CUR);
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, pFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -421,7 +425,7 @@ void Check(void)
|
||||
} else {
|
||||
|
||||
if (strlen(area.Name) == 0) {
|
||||
sprintf(fAreas, "%s/fdb/fdb%d.data", getenv("MBSE_ROOT"), i);
|
||||
sprintf(fAreas, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), i);
|
||||
if (unlink(fAreas) == 0) {
|
||||
Syslog('+', "Removed obsolete %s", fAreas);
|
||||
}
|
||||
|
@ -42,12 +42,11 @@ extern int do_quiet; /* Suppress screen output */
|
||||
|
||||
|
||||
/*
|
||||
* Move a file
|
||||
* Delete a file
|
||||
*/
|
||||
void Delete(int UnDel, int Area, char *File)
|
||||
{
|
||||
char *temp;
|
||||
struct FILERecord fdb;
|
||||
FILE *fp;
|
||||
int rc = FALSE;
|
||||
|
||||
|
@ -50,7 +50,7 @@ void ImportFiles(int Area)
|
||||
DIR *dp;
|
||||
int Append = FALSE, Files = 0, rc, i, line = 0, pos, x, Doit;
|
||||
int Imported = 0, Errors = 0, Present = FALSE;
|
||||
struct FILERecord fdb;
|
||||
struct FILE_record f_db;
|
||||
struct stat statfile;
|
||||
struct dirent *de;
|
||||
|
||||
@ -105,7 +105,7 @@ void ImportFiles(int Area)
|
||||
Doit = TRUE;
|
||||
if ((unarc = unpacker(temp)) == NULL) {
|
||||
Syslog('+', "Unknown archive format %s", temp);
|
||||
sprintf(temp2, "%s/tmp/arc/%s", getenv("MBSE_ROOT"), fdb.Name);
|
||||
sprintf(temp2, "%s/tmp/arc/%s", getenv("MBSE_ROOT"), f_db.Name);
|
||||
mkdirs(temp2, 0755);
|
||||
if ((rc = file_cp(temp, temp2))) {
|
||||
WriteError("Can't copy file to %s, %s", temp2, strerror(rc));
|
||||
@ -148,14 +148,14 @@ void ImportFiles(int Area)
|
||||
printf("Adding \b\b\b\b\b\b\b\b\b\b");
|
||||
fflush(stdout);
|
||||
}
|
||||
if (strcmp(fdb.Name, fdb.LName)) {
|
||||
if (AddFile(fdb, Area, dest, temp, lname)) {
|
||||
if (strcmp(f_db.Name, f_db.LName)) {
|
||||
if (AddFile(f_db, Area, dest, temp, lname)) {
|
||||
Imported++;
|
||||
} else {
|
||||
Errors++;
|
||||
}
|
||||
} else {
|
||||
if (AddFile(fdb, Area, dest, temp, NULL)) {
|
||||
if (AddFile(f_db, Area, dest, temp, NULL)) {
|
||||
Imported++;
|
||||
} else {
|
||||
Errors++;
|
||||
@ -177,7 +177,7 @@ void ImportFiles(int Area)
|
||||
die(MBERR_DISK_FULL);
|
||||
|
||||
Files++;
|
||||
memset(&fdb, 0, sizeof(fdb));
|
||||
memset(&f_db, 0, sizeof(f_db));
|
||||
Present = TRUE;
|
||||
|
||||
token = strtok(String, " \t");
|
||||
@ -195,13 +195,13 @@ void ImportFiles(int Area)
|
||||
/*
|
||||
* Found the right file.
|
||||
*/
|
||||
strncpy(fdb.LName, token, 80);
|
||||
strncpy(f_db.LName, token, 80);
|
||||
break;
|
||||
}
|
||||
}
|
||||
closedir(dp);
|
||||
|
||||
if (strlen(fdb.LName) == 0) {
|
||||
if (strlen(f_db.LName) == 0) {
|
||||
WriteError("Can't find file on disk, skipping: %s\n", token);
|
||||
Append = FALSE;
|
||||
Present = FALSE;
|
||||
@ -209,28 +209,28 @@ void ImportFiles(int Area)
|
||||
/*
|
||||
* Create DOS 8.3 filename
|
||||
*/
|
||||
strcpy(temp2, fdb.LName);
|
||||
strcpy(temp2, f_db.LName);
|
||||
name_mangle(temp2);
|
||||
strcpy(fdb.Name, temp2);
|
||||
strcpy(f_db.Name, temp2);
|
||||
|
||||
if (strcmp(fdb.LName, fdb.Name) && (rename(fdb.LName, fdb.Name) == 0)) {
|
||||
Syslog('+', "Renamed %s to %s", fdb.LName, fdb.Name);
|
||||
if (strcmp(f_db.LName, f_db.Name) && (rename(f_db.LName, f_db.Name) == 0)) {
|
||||
Syslog('+', "Renamed %s to %s", f_db.LName, f_db.Name);
|
||||
}
|
||||
|
||||
sprintf(temp, "%s/%s", pwd, fdb.Name);
|
||||
sprintf(temp, "%s/%s", pwd, f_db.Name);
|
||||
stat(temp, &statfile);
|
||||
|
||||
if (do_annon)
|
||||
fdb.Announced = TRUE;
|
||||
Syslog('f', "File: %s (%s)", fdb.Name, fdb.LName);
|
||||
f_db.Announced = TRUE;
|
||||
Syslog('f', "File: %s (%s)", f_db.Name, f_db.LName);
|
||||
|
||||
if (!do_quiet) {
|
||||
printf("\rImport file: %s ", fdb.Name);
|
||||
printf("\rImport file: %s ", f_db.Name);
|
||||
printf("Checking \b\b\b\b\b\b\b\b\b\b");
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
IsDoing("Import %s", fdb.Name);
|
||||
IsDoing("Import %s", f_db.Name);
|
||||
|
||||
token = strtok(NULL, "\0");
|
||||
i = strlen(token);
|
||||
@ -250,20 +250,20 @@ void ImportFiles(int Area)
|
||||
if (Doit) {
|
||||
if (pos > 42) {
|
||||
if (token[x] == ' ') {
|
||||
fdb.Desc[line][pos] = '\0';
|
||||
f_db.Desc[line][pos] = '\0';
|
||||
line++;
|
||||
pos = 0;
|
||||
} else {
|
||||
if (pos == 49) {
|
||||
fdb.Desc[line][pos] = '\0';
|
||||
f_db.Desc[line][pos] = '\0';
|
||||
pos = 0;
|
||||
line++;
|
||||
}
|
||||
fdb.Desc[line][pos] = token[x];
|
||||
f_db.Desc[line][pos] = token[x];
|
||||
pos++;
|
||||
}
|
||||
} else {
|
||||
fdb.Desc[line][pos] = token[x];
|
||||
f_db.Desc[line][pos] = token[x];
|
||||
pos++;
|
||||
}
|
||||
if (line == 25)
|
||||
@ -271,14 +271,14 @@ void ImportFiles(int Area)
|
||||
}
|
||||
}
|
||||
|
||||
sprintf(dest, "%s/%s", area.Path, fdb.Name);
|
||||
sprintf(lname, "%s/%s", area.Path, fdb.LName);
|
||||
sprintf(dest, "%s/%s", area.Path, f_db.Name);
|
||||
sprintf(lname, "%s/%s", area.Path, f_db.LName);
|
||||
Append = TRUE;
|
||||
fdb.Size = statfile.st_size;
|
||||
fdb.FileDate = statfile.st_mtime;
|
||||
fdb.Crc32 = file_crc(temp, FALSE);
|
||||
strcpy(fdb.Uploader, CFG.sysop_name);
|
||||
fdb.UploadDate = time(NULL);
|
||||
f_db.Size = statfile.st_size;
|
||||
f_db.FileDate = statfile.st_mtime;
|
||||
f_db.Crc32 = file_crc(temp, FALSE);
|
||||
strcpy(f_db.Uploader, CFG.sysop_name);
|
||||
f_db.UploadDate = time(NULL);
|
||||
}
|
||||
} else if (Present) {
|
||||
/*
|
||||
@ -298,20 +298,20 @@ void ImportFiles(int Area)
|
||||
if (Doit) {
|
||||
if (pos > 42) {
|
||||
if (token[x] == ' ') {
|
||||
fdb.Desc[line][pos] = '\0';
|
||||
f_db.Desc[line][pos] = '\0';
|
||||
line++;
|
||||
pos = 0;
|
||||
} else {
|
||||
if (pos == 49) {
|
||||
fdb.Desc[line][pos] = '\0';
|
||||
f_db.Desc[line][pos] = '\0';
|
||||
pos = 0;
|
||||
line++;
|
||||
}
|
||||
fdb.Desc[line][pos] = token[x];
|
||||
f_db.Desc[line][pos] = token[x];
|
||||
pos++;
|
||||
}
|
||||
} else {
|
||||
fdb.Desc[line][pos] = token[x];
|
||||
f_db.Desc[line][pos] = token[x];
|
||||
pos++;
|
||||
}
|
||||
if (line == 25)
|
||||
@ -336,7 +336,7 @@ void ImportFiles(int Area)
|
||||
Doit = TRUE;
|
||||
if ((unarc = unpacker(temp)) == NULL) {
|
||||
Syslog('+', "Unknown archive format %s", temp);
|
||||
sprintf(temp2, "%s/tmp/arc/%s", getenv("MBSE_ROOT"), fdb.LName);
|
||||
sprintf(temp2, "%s/tmp/arc/%s", getenv("MBSE_ROOT"), f_db.LName);
|
||||
mkdirs(temp2, 0755);
|
||||
if ((rc = file_cp(temp, temp2))) {
|
||||
WriteError("Can't copy file to %s, %s", temp2, strerror(rc));
|
||||
@ -377,13 +377,13 @@ void ImportFiles(int Area)
|
||||
printf("Adding \b\b\b\b\b\b\b\b\b\b");
|
||||
fflush(stdout);
|
||||
}
|
||||
if (strcmp(fdb.Name, fdb.LName)) {
|
||||
if (AddFile(fdb, Area, dest, temp, lname))
|
||||
if (strcmp(f_db.Name, f_db.LName)) {
|
||||
if (AddFile(f_db, Area, dest, temp, lname))
|
||||
Imported++;
|
||||
else
|
||||
Errors++;
|
||||
} else {
|
||||
if (AddFile(fdb, Area, dest, temp, NULL))
|
||||
if (AddFile(f_db, Area, dest, temp, NULL))
|
||||
Imported++;
|
||||
else
|
||||
Errors++;
|
||||
|
@ -379,7 +379,7 @@ void ReqIndex(void)
|
||||
newdir = NULL;
|
||||
}
|
||||
|
||||
sprintf(fAreas, "%s/fdb/fdb%ld.data", getenv("MBSE_ROOT"), i);
|
||||
sprintf(fAreas, "%s/fdb/file%ld.data", getenv("MBSE_ROOT"), i);
|
||||
|
||||
/*
|
||||
* Open the file database, if it doesn't exist,
|
||||
@ -391,6 +391,11 @@ void ReqIndex(void)
|
||||
WriteError("$Can't create %s", fAreas);
|
||||
die(MBERR_GENERAL);
|
||||
}
|
||||
fdbhdr.hdrsize = sizeof(fdbhdr);
|
||||
fdbhdr.recsize = sizeof(fdb);
|
||||
fwrite(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
} else {
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -401,13 +406,13 @@ void ReqIndex(void)
|
||||
* Now start creating the unsorted index.
|
||||
*/
|
||||
record = 0;
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
iTotal++;
|
||||
if ((iTotal % 10) == 0)
|
||||
Marker();
|
||||
memset(&idx, 0, sizeof(idx));
|
||||
sprintf(idx.Name, "%s", tu(file.Name));
|
||||
sprintf(idx.LName, "%s", tu(file.LName));
|
||||
sprintf(idx.Name, "%s", tu(fdb.Name));
|
||||
sprintf(idx.LName, "%s", tu(fdb.LName));
|
||||
idx.AreaNum = i;
|
||||
idx.Record = record;
|
||||
fill_index(idx, &fdx);
|
||||
@ -426,15 +431,15 @@ void ReqIndex(void)
|
||||
if ((fp = fopen(temp, "w")) == NULL) {
|
||||
WriteError("$Can't create %s", temp);
|
||||
} else {
|
||||
fseek(pFile, 0, SEEK_SET);
|
||||
fseek(pFile, fdbhdr.hdrsize, SEEK_SET);
|
||||
fbAreas++;
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
if ((!file.Deleted) && (!file.Missing)) {
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
if (!fdb.Deleted) {
|
||||
fbFiles++;
|
||||
fprintf(fp, "%-12s [%ld] %s\r\n", file.Name, file.TimesDL + file.TimesFTP + file.TimesReq, file.Desc[0]);
|
||||
fprintf(fp, "%-12s [%ld] %s\r\n", fdb.Name, fdb.TimesDL, fdb.Desc[0]);
|
||||
for (j = 1; j < 25; j++)
|
||||
if (strlen(file.Desc[j]))
|
||||
fprintf(fp, " +%s\r\n", file.Desc[j]);
|
||||
if (strlen(fdb.Desc[j]))
|
||||
fprintf(fp, " +%s\r\n", fdb.Desc[j]);
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
@ -450,10 +455,10 @@ void ReqIndex(void)
|
||||
if ((fp = fopen(temp, "w")) == NULL) {
|
||||
WriteError("$Can't create %s", temp);
|
||||
} else {
|
||||
fseek(pFile, 0, SEEK_SET);
|
||||
fseek(pFile, fdbhdr.hdrsize, SEEK_SET);
|
||||
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
if ((!file.Deleted) && (!file.Missing)) {
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
if (!fdb.Deleted) {
|
||||
/*
|
||||
* The next is to reduce system load
|
||||
*/
|
||||
@ -462,16 +467,16 @@ void ReqIndex(void)
|
||||
msleep(1);
|
||||
|
||||
for (z = 0; z <= 25; z++) {
|
||||
if (strlen(file.Desc[z])) {
|
||||
if (strlen(fdb.Desc[z])) {
|
||||
if (z == 0)
|
||||
fprintf(fp, "%-12s %7luK %s ", file.Name, (long)(file.Size / 1024),
|
||||
StrDateDMY(file.UploadDate));
|
||||
fprintf(fp, "%-12s %7luK %s ", fdb.Name, (long)(fdb.Size / 1024),
|
||||
StrDateDMY(fdb.UploadDate));
|
||||
else
|
||||
fprintf(fp, " ");
|
||||
if ((file.Desc[z][0] == '@') && (file.Desc[z][1] == 'X'))
|
||||
fprintf(fp, "%s\n", file.Desc[z]+4);
|
||||
if ((fdb.Desc[z][0] == '@') && (fdb.Desc[z][1] == 'X'))
|
||||
fprintf(fp, "%s\n", fdb.Desc[z]+4);
|
||||
else
|
||||
fprintf(fp, "%s\n", file.Desc[z]);
|
||||
fprintf(fp, "%s\n", fdb.Desc[z]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -600,7 +605,7 @@ void HtmlIndex(char *Lang)
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
sprintf(fAreas, "%s/fdb/fdb%ld.data", getenv("MBSE_ROOT"), i);
|
||||
sprintf(fAreas, "%s/fdb/file%ld.data", getenv("MBSE_ROOT"), i);
|
||||
|
||||
/*
|
||||
* Open the file database, if it doesn't exist,
|
||||
@ -609,21 +614,22 @@ void HtmlIndex(char *Lang)
|
||||
if ((pFile = fopen(fAreas, "r+")) == NULL) {
|
||||
WriteError("$Can't open %s", fAreas);
|
||||
die(MBERR_GENERAL);
|
||||
}
|
||||
}
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
|
||||
/*
|
||||
* Create index.html pages in each available download area.
|
||||
*/
|
||||
if (!area.CDrom && fm && (strncmp(CFG.ftp_base, area.Path, strlen(CFG.ftp_base)) == 0)) {
|
||||
|
||||
fseek(pFile, 0, SEEK_SET);
|
||||
fseek(pFile, fdbhdr.hdrsize, SEEK_SET);
|
||||
AreasHtml++;
|
||||
inArea = 0;
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
if ((!file.Deleted) && (!file.Missing))
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
if (!fdb.Deleted)
|
||||
inArea++;
|
||||
}
|
||||
fseek(pFile, 0, SEEK_SET);
|
||||
fseek(pFile, fdbhdr.hdrsize, SEEK_SET);
|
||||
|
||||
aSize = 0L;
|
||||
aTotal = 0;
|
||||
@ -635,8 +641,8 @@ void HtmlIndex(char *Lang)
|
||||
fileptr1 = gfilepos;
|
||||
}
|
||||
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
if ((!file.Deleted) && (!file.Missing)) {
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
if (!fdb.Deleted) {
|
||||
/*
|
||||
* The next is to reduce system load
|
||||
*/
|
||||
@ -654,40 +660,40 @@ void HtmlIndex(char *Lang)
|
||||
* check if a thumbnail file exists. If not try to
|
||||
* create a thumbnail file to add to the html listing.
|
||||
*/
|
||||
if (strstr(file.LName, ".gif") || strstr(file.LName, ".jpg") ||
|
||||
strstr(file.LName, ".GIF") || strstr(file.LName, ".JPG")) {
|
||||
sprintf(linebuf, "%s/%s", area.Path, file.Name);
|
||||
sprintf(outbuf, "%s/.%s", area.Path, file.Name);
|
||||
if (strstr(fdb.LName, ".gif") || strstr(fdb.LName, ".jpg") ||
|
||||
strstr(fdb.LName, ".GIF") || strstr(fdb.LName, ".JPG")) {
|
||||
sprintf(linebuf, "%s/%s", area.Path, fdb.Name);
|
||||
sprintf(outbuf, "%s/.%s", area.Path, fdb.Name);
|
||||
if (file_exist(outbuf, R_OK)) {
|
||||
if ((j = execute_str(CFG.www_convert, linebuf, outbuf,
|
||||
(char *)"/dev/null", (char *)"/dev/null", (char *)"/dev/null"))) {
|
||||
Syslog('+', "Failed to create thumbnail for %s, rc=% d", file.Name, j);
|
||||
Syslog('+', "Failed to create thumbnail for %s, rc=% d", fdb.Name, j);
|
||||
} else {
|
||||
chmod(outbuf, 0644);
|
||||
}
|
||||
}
|
||||
sprintf(outbuf, "%s/%s%s/%s", CFG.www_url, CFG.www_link2ftp,
|
||||
area.Path+strlen(CFG.ftp_base), file.Name);
|
||||
area.Path+strlen(CFG.ftp_base), fdb.Name);
|
||||
sprintf(linebuf, "%s/%s%s/.%s", CFG.www_url, CFG.www_link2ftp,
|
||||
area.Path+strlen(CFG.ftp_base), file.Name);
|
||||
MacroVars("fghi", "dsss", 1, outbuf, file.LName, linebuf);
|
||||
area.Path+strlen(CFG.ftp_base), fdb.Name);
|
||||
MacroVars("fghi", "dsss", 1, outbuf, fdb.LName, linebuf);
|
||||
} else {
|
||||
sprintf(outbuf, "%s/%s%s/%s", CFG.www_url, CFG.www_link2ftp,
|
||||
area.Path+strlen(CFG.ftp_base), file.Name);
|
||||
MacroVars("fghi", "dsss", 0, outbuf, file.LName, "");
|
||||
area.Path+strlen(CFG.ftp_base), fdb.Name);
|
||||
MacroVars("fghi", "dsss", 0, outbuf, fdb.LName, "");
|
||||
}
|
||||
|
||||
sprintf(outbuf, "%lu Kb.", (long)(file.Size / 1024));
|
||||
MacroVars("jkl", "ssd", StrDateDMY(file.FileDate), outbuf, file.TimesDL+file.TimesFTP+file.TimesReq);
|
||||
sprintf(outbuf, "%lu Kb.", (long)(fdb.Size / 1024));
|
||||
MacroVars("jkl", "ssd", StrDateDMY(fdb.FileDate), outbuf, fdb.TimesDL);
|
||||
memset(&desc, 0, sizeof(desc));
|
||||
k = 0;
|
||||
for (j = 0; j < 25; j++)
|
||||
if (strlen(file.Desc[j])) {
|
||||
if (strlen(fdb.Desc[j])) {
|
||||
if (j) {
|
||||
sprintf(desc+k, "\n");
|
||||
k += 1;
|
||||
}
|
||||
sprintf(linebuf, "%s", To_Html(file.Desc[j]));
|
||||
sprintf(linebuf, "%s", To_Html(fdb.Desc[j]));
|
||||
html_massage(linebuf, outbuf);
|
||||
sprintf(desc+k, "%s", outbuf);
|
||||
k += strlen(outbuf);
|
||||
@ -695,10 +701,10 @@ void HtmlIndex(char *Lang)
|
||||
MacroVars("m", "s", desc);
|
||||
fseek(fb, fileptr1, SEEK_SET);
|
||||
MacroRead(fb, fa);
|
||||
aSize += file.Size;
|
||||
aSize += fdb.Size;
|
||||
MacroVars("efghijklm", "ddsssssds", 0, 0, "", "", "", "", "", 0, "");
|
||||
if (file.FileDate > last)
|
||||
last = file.FileDate;
|
||||
if (fdb.FileDate > last)
|
||||
last = fdb.FileDate;
|
||||
if ((aTotal % CFG.www_files_page) == 0) {
|
||||
closepage(fa, area.Path, inArea, aTotal, fb);
|
||||
fseek(fb, 0, SEEK_SET);
|
||||
|
@ -52,7 +52,7 @@ extern int do_pack; /* Perform pack */
|
||||
void Kill(void)
|
||||
{
|
||||
FILE *pAreas, *pFile, *pDest, *pTemp;
|
||||
int i, iAreas, iAreasNew = 0, iTotal = 0, iKilled = 0, iMoved = 0, rc, Killit, FilesLeft;
|
||||
int i, iAreas, iAreasNew = 0, iTotal = 0, iKilled = 0, iMoved = 0, rc, Killit;
|
||||
char *sAreas, *fAreas, *newdir = NULL, *sTemp, from[PATH_MAX], to[PATH_MAX];
|
||||
time_t Now;
|
||||
struct fileareas darea;
|
||||
@ -106,7 +106,7 @@ void Kill(void)
|
||||
newdir = NULL;
|
||||
}
|
||||
|
||||
sprintf(fAreas, "%s/fdb/fdb%d.data", getenv("MBSE_ROOT"), i);
|
||||
sprintf(fAreas, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), i);
|
||||
|
||||
/*
|
||||
* Open the file database, if it doesn't exist,
|
||||
@ -118,29 +118,34 @@ void Kill(void)
|
||||
WriteError("$Can't create %s", fAreas);
|
||||
die(MBERR_GENERAL);
|
||||
}
|
||||
}
|
||||
fdbhdr.hdrsize = sizeof(fdbhdr);
|
||||
fdbhdr.recsize = sizeof(fdb);
|
||||
fwrite(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
} else {
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
}
|
||||
|
||||
/*
|
||||
* Now start checking the files in the filedatabase
|
||||
* against the contents of the directory.
|
||||
*/
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
iTotal++;
|
||||
Marker();
|
||||
|
||||
Killit = FALSE;
|
||||
if (!file.UploadDate)
|
||||
Syslog('!', "Warning: file %s in area %d has no upload date", file.Name, i);
|
||||
if (!fdb.UploadDate)
|
||||
Syslog('!', "Warning: file %s in area %d has no upload date", fdb.Name, i);
|
||||
|
||||
if (area.DLdays) {
|
||||
/*
|
||||
* Test last download date or never downloaded and the
|
||||
* file is more then n days available for download.
|
||||
*/
|
||||
if ((file.LastDL) && (((Now - file.LastDL) / 84400) > area.DLdays)) {
|
||||
if ((fdb.LastDL) && (((Now - fdb.LastDL) / 84400) > area.DLdays)) {
|
||||
Killit = TRUE;
|
||||
}
|
||||
if ((!file.LastDL) && file.UploadDate && (((Now - file.UploadDate) / 84400) > area.DLdays)) {
|
||||
if ((!fdb.LastDL) && fdb.UploadDate && (((Now - fdb.UploadDate) / 84400) > area.DLdays)) {
|
||||
Killit = TRUE;
|
||||
}
|
||||
}
|
||||
@ -149,7 +154,7 @@ void Kill(void)
|
||||
/*
|
||||
* Check filedate
|
||||
*/
|
||||
if (file.UploadDate && (((Now - file.UploadDate) / 84400) > area.FDdays)) {
|
||||
if (fdb.UploadDate && (((Now - fdb.UploadDate) / 84400) > area.FDdays)) {
|
||||
Killit = TRUE;
|
||||
}
|
||||
}
|
||||
@ -159,55 +164,62 @@ void Kill(void)
|
||||
if (area.MoveArea) {
|
||||
fseek(pAreas, ((area.MoveArea -1) * areahdr.recsize) + areahdr.hdrsize, SEEK_SET);
|
||||
fread(&darea, areahdr.recsize, 1, pAreas);
|
||||
sprintf(from, "%s/%s", area.Path, file.Name);
|
||||
sprintf(to, "%s/%s", darea.Path, file.Name);
|
||||
sprintf(from, "%s/%s", area.Path, fdb.Name);
|
||||
sprintf(to, "%s/%s", darea.Path, fdb.Name);
|
||||
if ((rc = file_mv(from, to)) == 0) {
|
||||
Syslog('+', "Move %s, area %d => %d", file.Name, i, area.MoveArea);
|
||||
sprintf(to, "%s/fdb/fdb%d.data", getenv("MBSE_ROOT"), area.MoveArea);
|
||||
Syslog('+', "Move %s, area %d => %d", fdb.Name, i, area.MoveArea);
|
||||
sprintf(to, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), area.MoveArea);
|
||||
if ((pDest = fopen(to, "a+")) != NULL) {
|
||||
file.UploadDate = time(NULL);
|
||||
file.LastDL = time(NULL);
|
||||
fwrite(&file, sizeof(file), 1, pDest);
|
||||
fseek(pDest, 0, SEEK_END);
|
||||
if (ftell(pDest) == 0) {
|
||||
/* New file, write header */
|
||||
fwrite(&fdbhdr, fdbhdr.hdrsize, 1, pDest);
|
||||
}
|
||||
fdb.UploadDate = time(NULL);
|
||||
fdb.LastDL = time(NULL);
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, pDest);
|
||||
fclose(pDest);
|
||||
}
|
||||
|
||||
/*
|
||||
* Now again if there is a dotted version (thumbnail) of this file.
|
||||
*/
|
||||
sprintf(from, "%s/.%s", area.Path, file.Name);
|
||||
sprintf(to, "%s/.%s", darea.Path, file.Name);
|
||||
sprintf(from, "%s/.%s", area.Path, fdb.Name);
|
||||
sprintf(to, "%s/.%s", darea.Path, fdb.Name);
|
||||
if (file_exist(from, R_OK) == 0)
|
||||
file_mv(from, to);
|
||||
|
||||
/*
|
||||
* Unlink the old symbolic link
|
||||
*/
|
||||
sprintf(from, "%s/%s", area.Path, file.LName);
|
||||
sprintf(from, "%s/%s", area.Path, fdb.LName);
|
||||
unlink(from);
|
||||
|
||||
/*
|
||||
* Create the new symbolic link
|
||||
*/
|
||||
sprintf(from, "%s/%s", darea.Path, file.Name);
|
||||
sprintf(to, "%s/%s", darea.Path, file.LName);
|
||||
sprintf(from, "%s/%s", darea.Path, fdb.Name);
|
||||
sprintf(to, "%s/%s", darea.Path, fdb.LName);
|
||||
symlink(from, to);
|
||||
|
||||
file.Deleted = TRUE;
|
||||
fseek(pFile, - sizeof(file), SEEK_CUR);
|
||||
fwrite(&file, sizeof(file), 1, pFile);
|
||||
fdb.Deleted = TRUE;
|
||||
fseek(pFile, - fdbhdr.recsize, SEEK_CUR);
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, pFile);
|
||||
iMoved++;
|
||||
} else {
|
||||
WriteError("Move %s to area %d failed, %s", file.Name, area.MoveArea, strerror(rc));
|
||||
WriteError("Move %s to area %d failed, %s", fdb.Name, area.MoveArea, strerror(rc));
|
||||
}
|
||||
} else {
|
||||
Syslog('+', "Delete %s, area %d", file.LName, i);
|
||||
file.Deleted = TRUE;
|
||||
fseek(pFile, - sizeof(file), SEEK_CUR);
|
||||
fwrite(&file, sizeof(file), 1, pFile);
|
||||
Syslog('+', "Delete %s, area %d", fdb.LName, i);
|
||||
fdb.Deleted = TRUE;
|
||||
fseek(pFile, - fdbhdr.recsize, SEEK_CUR);
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, pFile);
|
||||
iKilled++;
|
||||
sprintf(from, "%s/%s", area.Path, file.LName);
|
||||
sprintf(from, "%s/%s", area.Path, fdb.LName);
|
||||
unlink(from);
|
||||
sprintf(from, "%s/%s", area.Path, file.Name);
|
||||
sprintf(from, "%s/%s", area.Path, fdb.Name);
|
||||
unlink(from);
|
||||
sprintf(from, "%s/.%s", area.Path, fdb.Name);
|
||||
unlink(from);
|
||||
}
|
||||
}
|
||||
@ -221,11 +233,10 @@ void Kill(void)
|
||||
sprintf(sTemp, "%s/fdb/fdbtmp.data", getenv("MBSE_ROOT"));
|
||||
|
||||
if ((pTemp = fopen(sTemp, "a+")) != NULL) {
|
||||
FilesLeft = FALSE;
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
if ((!file.Deleted) && strcmp(file.LName, "") != 0) {
|
||||
fwrite(&file, sizeof(file), 1, pTemp);
|
||||
FilesLeft = TRUE;
|
||||
fwrite(&fdbhdr, fdbhdr.hdrsize, 1, pTemp);
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
if ((!fdb.Deleted) && strcmp(fdb.LName, "") != 0) {
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, pTemp);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -98,63 +98,46 @@ void ListFileAreas(int Area)
|
||||
/*
|
||||
* Open the file database, create new one if it doesn't exist.
|
||||
*/
|
||||
sprintf(fAreas, "%s/fdb/fdb%d.data", getenv("MBSE_ROOT"), Area);
|
||||
sprintf(fAreas, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), Area);
|
||||
if ((pFile = fopen(fAreas, "r+")) == NULL) {
|
||||
Syslog('!', "Creating new %s", fAreas);
|
||||
if ((pFile = fopen(fAreas, "a+")) == NULL) {
|
||||
WriteError("$Can't create %s", fAreas);
|
||||
die(MBERR_GENERAL);
|
||||
}
|
||||
fdbhdr.hdrsize = sizeof(fdbhdr);
|
||||
fdbhdr.recsize = sizeof(fdb);
|
||||
fwrite(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
} else {
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
}
|
||||
|
||||
fcount = 0;
|
||||
fsize = 0L;
|
||||
colour(CYAN, BLACK);
|
||||
printf("File listing of area %d, %s\n\n", Area, area.Name);
|
||||
printf("Short name Kb. File date Down Flags TIC Area Long name\n");
|
||||
printf("------------ ----- ---------- ---- ----- -------------------- ");
|
||||
printf("Short name Kb. File date Down Flg TIC Area Long name\n");
|
||||
printf("------------ ----- ---------- ---- --- -------------------- ");
|
||||
for (i = 63; i < COLS; i++)
|
||||
printf("-");
|
||||
printf("\n");
|
||||
|
||||
colour(LIGHTGRAY, BLACK);
|
||||
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
sprintf(flags, "-----");
|
||||
if (file.Free)
|
||||
flags[0] = 'F';
|
||||
if (file.Deleted)
|
||||
flags[1] = 'D';
|
||||
if (file.Missing)
|
||||
flags[2] = 'M';
|
||||
if (file.NoKill)
|
||||
flags[3] = 'N';
|
||||
if (file.Announced)
|
||||
flags[4] = 'A';
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
sprintf(flags, "---");
|
||||
if (fdb.Deleted)
|
||||
flags[0] = 'D';
|
||||
if (fdb.NoKill)
|
||||
flags[1] = 'N';
|
||||
if (fdb.Announced)
|
||||
flags[2] = 'A';
|
||||
|
||||
if (file.TicAreaCRC) {
|
||||
/*
|
||||
* Fill the default answer
|
||||
*/
|
||||
sprintf(ticarea, "Not found");
|
||||
fseek(pTic, tichdr.hdrsize, SEEK_SET);
|
||||
while (fread(&tic, tichdr.recsize, 1, pTic)) {
|
||||
if (StringCRC32(tic.Name) == file.TicAreaCRC) {
|
||||
sprintf(ticarea, "%s", tic.Name);
|
||||
break;
|
||||
}
|
||||
fseek(pTic, tichdr.syssize, SEEK_CUR);
|
||||
}
|
||||
} else {
|
||||
sprintf(ticarea, "N/A");
|
||||
}
|
||||
|
||||
file.LName[COLS - 63] = '\0';
|
||||
printf("%-12s %5ld %s %4ld %s %-20s %s\n",
|
||||
file.Name, (long)(file.Size / 1024), StrDateDMY(file.FileDate),
|
||||
(long)(file.TimesDL + file.TimesFTP + file.TimesReq), flags, ticarea, file.LName);
|
||||
fdb.LName[COLS - 63] = '\0';
|
||||
printf("%-12s %5ld %s %4ld %s %-20s %s\n", fdb.Name, (long)(fdb.Size / 1024), StrDateDMY(fdb.FileDate),
|
||||
(long)(fdb.TimesDL), flags, fdb.TicArea, fdb.LName);
|
||||
fcount++;
|
||||
fsize = fsize + file.Size;
|
||||
fsize = fsize + fdb.Size;
|
||||
}
|
||||
fsize = fsize / 1024;
|
||||
|
||||
@ -196,20 +179,25 @@ void ListFileAreas(int Area)
|
||||
/*
|
||||
* Open the file database, create new one if it doesn't exist.
|
||||
*/
|
||||
sprintf(fAreas, "%s/fdb/fdb%d.data", getenv("MBSE_ROOT"), i);
|
||||
sprintf(fAreas, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), i);
|
||||
if ((pFile = fopen(fAreas, "r+")) == NULL) {
|
||||
Syslog('!', "Creating new %s", fAreas);
|
||||
if ((pFile = fopen(fAreas, "a+")) == NULL) {
|
||||
WriteError("$Can't create %s", fAreas);
|
||||
die(MBERR_GENERAL);
|
||||
}
|
||||
fdbhdr.hdrsize = sizeof(fdbhdr);
|
||||
fdbhdr.recsize = sizeof(fdb);
|
||||
fwrite(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
} else {
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
}
|
||||
|
||||
fcount = 0;
|
||||
fsize = 0L;
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
fcount++;
|
||||
fsize = fsize + file.Size;
|
||||
fsize = fsize + fdb.Size;
|
||||
}
|
||||
fsize = fsize / 1048576;
|
||||
tcount += fcount;
|
||||
|
@ -46,10 +46,11 @@ extern int do_quiet; /* Suppress screen output */
|
||||
*/
|
||||
void Move(int From, int To, char *File)
|
||||
{
|
||||
char *frompath, *topath, *temp1, *temp2, *fromlink, *tolink, *fromthumb, *tothumb;
|
||||
struct FILERecord fdb;
|
||||
FILE *fp1, *fp2;
|
||||
int rc = FALSE, Found = FALSE;
|
||||
char *frompath, *topath, *temp1, *temp2, *fromlink, *tolink, *fromthumb, *tothumb;
|
||||
struct FILE_recordhdr f_dbhdr;
|
||||
struct FILE_record f_db;
|
||||
FILE *fp1, *fp2;
|
||||
int rc = FALSE, Found = FALSE;
|
||||
|
||||
IsDoing("Move file");
|
||||
colour(LIGHTRED, BLACK);
|
||||
@ -87,11 +88,13 @@ void Move(int From, int To, char *File)
|
||||
* Find the file in the "from" area, check LFN and 8.3 names.
|
||||
*/
|
||||
temp1 = calloc(PATH_MAX, sizeof(char));
|
||||
sprintf(temp1, "%s/fdb/fdb%d.data", getenv("MBSE_ROOT"), From);
|
||||
sprintf(temp1, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), From);
|
||||
if ((fp1 = fopen(temp1, "r")) == NULL)
|
||||
die(MBERR_GENERAL);
|
||||
while (fread(&fdb, sizeof(fdb), 1, fp1) == 1) {
|
||||
if ((strcmp(fdb.LName, File) == 0) || strcmp(fdb.Name, File) == 0) {
|
||||
fread(&f_dbhdr, sizeof(fdbhdr), 1, fp1);
|
||||
|
||||
while (fread(&f_db, f_dbhdr.recsize, 1, fp1) == 1) {
|
||||
if ((strcmp(f_db.LName, File) == 0) || strcmp(f_db.Name, File) == 0) {
|
||||
Found = TRUE;
|
||||
break;
|
||||
}
|
||||
@ -107,13 +110,13 @@ void Move(int From, int To, char *File)
|
||||
|
||||
frompath = xstrcpy(area.Path);
|
||||
frompath = xstrcat(frompath, (char *)"/");
|
||||
frompath = xstrcat(frompath, fdb.Name);
|
||||
frompath = xstrcat(frompath, f_db.Name);
|
||||
fromlink = xstrcpy(area.Path);
|
||||
fromlink = xstrcat(fromlink, (char *)"/");
|
||||
fromlink = xstrcat(fromlink, fdb.LName);
|
||||
fromlink = xstrcat(fromlink, f_db.LName);
|
||||
fromthumb = xstrcpy(area.Path);
|
||||
fromthumb = xstrcat(fromthumb, (char *)"/.");
|
||||
fromthumb = xstrcat(fromthumb, fdb.Name);
|
||||
fromthumb = xstrcat(fromthumb, f_db.Name);
|
||||
|
||||
/*
|
||||
* Check Destination area
|
||||
@ -139,13 +142,13 @@ void Move(int From, int To, char *File)
|
||||
|
||||
topath = xstrcpy(area.Path);
|
||||
topath = xstrcat(topath, (char *)"/");
|
||||
topath = xstrcat(topath, fdb.Name);
|
||||
topath = xstrcat(topath, f_db.Name);
|
||||
tolink = xstrcpy(area.Path);
|
||||
tolink = xstrcat(tolink, (char *)"/");
|
||||
tolink = xstrcat(tolink, fdb.LName);
|
||||
tolink = xstrcat(tolink, f_db.LName);
|
||||
tothumb = xstrcpy(area.Path);
|
||||
tothumb = xstrcat(tothumb, (char *)"/.");
|
||||
tothumb = xstrcat(tothumb, fdb.Name);
|
||||
tothumb = xstrcat(tothumb, f_db.Name);
|
||||
|
||||
if (file_exist(topath, F_OK) == 0) {
|
||||
WriteError("File %s already exists in area %d", File, To);
|
||||
@ -155,23 +158,25 @@ void Move(int From, int To, char *File)
|
||||
}
|
||||
|
||||
temp2 = calloc(PATH_MAX, sizeof(char));
|
||||
sprintf(temp2, "%s/fdb/fdb%d.temp", getenv("MBSE_ROOT"), From);
|
||||
sprintf(temp2, "%s/fdb/file%d.temp", getenv("MBSE_ROOT"), From);
|
||||
|
||||
if ((fp1 = fopen(temp1, "r")) == NULL)
|
||||
die(MBERR_GENERAL);
|
||||
fread(&f_dbhdr, sizeof(fdbhdr), 1, fp1);
|
||||
if ((fp2 = fopen(temp2, "a+")) == NULL)
|
||||
die(MBERR_GENERAL);
|
||||
fwrite(&f_dbhdr, f_dbhdr.hdrsize, 1, fp2);
|
||||
|
||||
/*
|
||||
* Search the file if the From area, if found, the
|
||||
* temp database holds all records except the moved
|
||||
* file.
|
||||
*/
|
||||
while (fread(&fdb, sizeof(fdb), 1, fp1) == 1) {
|
||||
if (strcmp(fdb.LName, File) && strcmp(fdb.Name, File))
|
||||
fwrite(&fdb, sizeof(fdb), 1, fp2);
|
||||
while (fread(&f_db, f_dbhdr.recsize, 1, fp1) == 1) {
|
||||
if (strcmp(f_db.LName, File) && strcmp(f_db.Name, File))
|
||||
fwrite(&f_db, f_dbhdr.recsize, 1, fp2);
|
||||
else {
|
||||
rc = AddFile(fdb, To, topath, frompath, tolink);
|
||||
rc = AddFile(f_db, To, topath, frompath, tolink);
|
||||
if (rc) {
|
||||
unlink(fromlink);
|
||||
unlink(frompath);
|
||||
|
@ -88,8 +88,8 @@ void PackFileBase(void)
|
||||
}
|
||||
Marker();
|
||||
|
||||
sprintf(fAreas, "%s/fdb/fdb%d.data", getenv("MBSE_ROOT"), i);
|
||||
sprintf(fTmp, "%s/fdb/fdb%d.temp", getenv("MBSE_ROOT"), i);
|
||||
sprintf(fAreas, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), i);
|
||||
sprintf(fTmp, "%s/fdb/file%d.temp", getenv("MBSE_ROOT"), i);
|
||||
|
||||
if ((pFile = fopen(fAreas, "r")) == NULL) {
|
||||
Syslog('!', "Creating new %s", fAreas);
|
||||
@ -97,37 +97,43 @@ void PackFileBase(void)
|
||||
WriteError("$Can't create %s", fAreas);
|
||||
die(MBERR_GENERAL);
|
||||
}
|
||||
fdbhdr.hdrsize = sizeof(fdbhdr);
|
||||
fdbhdr.recsize = sizeof(fdb);
|
||||
fwrite(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
} else {
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
}
|
||||
|
||||
if ((fp = fopen(fTmp, "a+")) == NULL) {
|
||||
WriteError("$Can't create %s", fTmp);
|
||||
die(MBERR_GENERAL);
|
||||
}
|
||||
fwrite(&fdbhdr, fdbhdr.hdrsize, 1, fp);
|
||||
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
|
||||
iTotal++;
|
||||
|
||||
if ((!file.Deleted) && (!file.Double) && (strcmp(file.Name, "") != 0)) {
|
||||
fwrite(&file, sizeof(file), 1, fp);
|
||||
if ((!fdb.Deleted) && (!fdb.Double) && (strcmp(fdb.Name, "") != 0)) {
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, fp);
|
||||
} else {
|
||||
iRemoved++;
|
||||
if (file.Double) {
|
||||
Syslog('+', "Removed double record file \"%s\" from area %d", file.LName, i);
|
||||
if (fdb.Double) {
|
||||
Syslog('+', "Removed double record file \"%s\" from area %d", fdb.LName, i);
|
||||
} else {
|
||||
Syslog('+', "Removed file \"%s\" from area %d", file.LName, i);
|
||||
sprintf(fn, "%s/%s", area.Path, file.LName);
|
||||
Syslog('+', "Removed file \"%s\" from area %d", fdb.LName, i);
|
||||
sprintf(fn, "%s/%s", area.Path, fdb.LName);
|
||||
rc = unlink(fn);
|
||||
if (rc && (errno != ENOENT))
|
||||
Syslog('+', "Unlink %s failed, result %d", fn, rc);
|
||||
sprintf(fn, "%s/%s", area.Path, file.Name);
|
||||
sprintf(fn, "%s/%s", area.Path, fdb.Name);
|
||||
rc = unlink(fn);
|
||||
if (rc && (errno != ENOENT))
|
||||
Syslog('+', "Unlink %s failed, result %d", fn, rc);
|
||||
/*
|
||||
* If a dotted version (thumbnail) exists, remove it silently
|
||||
*/
|
||||
sprintf(fn, "%s/.%s", area.Path, file.LName);
|
||||
sprintf(fn, "%s/.%s", area.Path, fdb.Name);
|
||||
unlink(fn);
|
||||
}
|
||||
do_index = TRUE;
|
||||
|
@ -43,13 +43,13 @@ extern int do_index; /* Reindex filebases */
|
||||
|
||||
typedef struct _fdbs {
|
||||
struct _fdbs *next;
|
||||
struct FILERecord filrec;
|
||||
struct FILE_record filrec;
|
||||
} fdbs;
|
||||
|
||||
|
||||
|
||||
void fill_fdbs(struct FILERecord, fdbs **);
|
||||
void fill_fdbs(struct FILERecord filrec, fdbs **fap)
|
||||
void fill_fdbs(struct FILE_record, fdbs **);
|
||||
void fill_fdbs(struct FILE_record filrec, fdbs **fap)
|
||||
{
|
||||
fdbs *tmp;
|
||||
|
||||
@ -166,8 +166,8 @@ void SortFileBase(int Area)
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
sprintf(fAreas, "%s/fdb/fdb%d.data", getenv("MBSE_ROOT"), Area);
|
||||
sprintf(fTmp, "%s/fdb/fdb%d.temp", getenv("MBSE_ROOT"), Area);
|
||||
sprintf(fAreas, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), Area);
|
||||
sprintf(fTmp, "%s/fdb/file%d.temp", getenv("MBSE_ROOT"), Area);
|
||||
|
||||
if ((pFile = fopen(fAreas, "r")) == NULL) {
|
||||
Syslog('!', "Creating new %s", fAreas);
|
||||
@ -175,20 +175,26 @@ void SortFileBase(int Area)
|
||||
WriteError("$Can't create %s", fAreas);
|
||||
die(MBERR_GENERAL);
|
||||
}
|
||||
fdbhdr.hdrsize = sizeof(fdbhdr);
|
||||
fdbhdr.recsize = sizeof(fdb);
|
||||
fwrite(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
} else {
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
}
|
||||
|
||||
if ((fp = fopen(fTmp, "a+")) == NULL) {
|
||||
WriteError("$Can't create %s", fTmp);
|
||||
die(MBERR_GENERAL);
|
||||
}
|
||||
fwrite(&fdbhdr, fdbhdr.hdrsize, 1, fp);
|
||||
|
||||
/*
|
||||
* Fill the sort array
|
||||
*/
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
iTotal++;
|
||||
fill_fdbs(file, &fdx);
|
||||
Syslog('f', "Adding %s", file.LName);
|
||||
fill_fdbs(fdb, &fdx);
|
||||
Syslog('f', "Adding %s", fdb.LName);
|
||||
}
|
||||
|
||||
sort_fdbs(&fdx);
|
||||
@ -198,7 +204,7 @@ void SortFileBase(int Area)
|
||||
*/
|
||||
for (tmp = fdx; tmp; tmp = tmp->next) {
|
||||
Syslog('f', "Sorted %s", tmp->filrec.LName);
|
||||
fwrite(&tmp->filrec, sizeof(file), 1, fp);
|
||||
fwrite(&tmp->filrec, fdbhdr.recsize, 1, fp);
|
||||
}
|
||||
tidy_fdbs(&fdx);
|
||||
|
||||
|
@ -299,11 +299,10 @@ int UnpackFile(char *File)
|
||||
|
||||
|
||||
/*
|
||||
* Add file to the BBS. The file is in the current
|
||||
* directory. The fdb record already has all needed
|
||||
* information.
|
||||
* Add file to the BBS. The file is in the current directory.
|
||||
* The f_db record already has all needed information.
|
||||
*/
|
||||
int AddFile(struct FILERecord fdb, int Area, char *DestPath, char *FromPath, char *LinkPath)
|
||||
int AddFile(struct FILE_record f_db, int Area, char *DestPath, char *FromPath, char *LinkPath)
|
||||
{
|
||||
char *temp1, *temp2;
|
||||
FILE *fp1, *fp2;
|
||||
@ -316,9 +315,9 @@ int AddFile(struct FILERecord fdb, int Area, char *DestPath, char *FromPath, cha
|
||||
mkdirs(DestPath, 0775);
|
||||
|
||||
if (file_exist(DestPath, F_OK) == 0) {
|
||||
WriteError("File %s already exists in area %d", fdb.Name, Area);
|
||||
WriteError("File %s already exists in area %d", f_db.Name, Area);
|
||||
if (!do_quiet)
|
||||
printf("\nFile %s already exists in area %d\n", fdb.Name, Area);
|
||||
printf("\nFile %s already exists in area %d\n", f_db.Name, Area);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -341,33 +340,34 @@ int AddFile(struct FILERecord fdb, int Area, char *DestPath, char *FromPath, cha
|
||||
|
||||
temp1 = calloc(PATH_MAX, sizeof(char));
|
||||
temp2 = calloc(PATH_MAX, sizeof(char));
|
||||
sprintf(temp1, "%s/fdb/fdb%d.data", getenv("MBSE_ROOT"), Area);
|
||||
sprintf(temp2, "%s/fdb/fdb%d.temp", getenv("MBSE_ROOT"), Area);
|
||||
sprintf(temp1, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), Area);
|
||||
sprintf(temp2, "%s/fdb/file%d.temp", getenv("MBSE_ROOT"), Area);
|
||||
|
||||
fp1 = fopen(temp1, "r+");
|
||||
fread(&fdbhdr, sizeof(fdbhdr.hdrsize), 1, fp1);
|
||||
fseek(fp1, 0, SEEK_END);
|
||||
if (ftell(fp1) == 0) {
|
||||
if (ftell(fp1) == fdbhdr.hdrsize) {
|
||||
/*
|
||||
* No records yet
|
||||
*/
|
||||
fwrite(&fdb, sizeof(fdb), 1, fp1);
|
||||
fwrite(&f_db, fdbhdr.recsize, 1, fp1);
|
||||
fclose(fp1);
|
||||
} else {
|
||||
/*
|
||||
* Files are already there. Find the right spot.
|
||||
*/
|
||||
fseek(fp1, 0, SEEK_SET);
|
||||
fseek(fp1, fdbhdr.hdrsize, SEEK_SET);
|
||||
|
||||
Insert = 0;
|
||||
do {
|
||||
if (fread(&file, sizeof(file), 1, fp1) != 1)
|
||||
if (fread(&fdb, fdbhdr.recsize, 1, fp1) != 1)
|
||||
Done = TRUE;
|
||||
if (!Done) {
|
||||
if (strcmp(fdb.LName, file.LName) == 0) {
|
||||
if (strcmp(f_db.LName, fdb.LName) == 0) {
|
||||
Found = TRUE;
|
||||
Insert++;
|
||||
} else {
|
||||
if (strcmp(fdb.LName, file.LName) < 0)
|
||||
if (strcmp(f_db.LName, fdb.LName) < 0)
|
||||
Found = TRUE;
|
||||
else
|
||||
Insert++;
|
||||
@ -380,33 +380,34 @@ int AddFile(struct FILERecord fdb, int Area, char *DestPath, char *FromPath, cha
|
||||
WriteError("Can't create %s", temp2);
|
||||
return FALSE;
|
||||
}
|
||||
fwrite(&fdbhdr, fdbhdr.hdrsize, 1, fp2);
|
||||
fseek(fp1, fdbhdr.hdrsize, SEEK_SET);
|
||||
|
||||
fseek(fp1, 0, SEEK_SET);
|
||||
/*
|
||||
* Copy until the insert point
|
||||
*/
|
||||
for (i = 0; i < Insert; i++) {
|
||||
fread(&file, sizeof(file), 1, fp1);
|
||||
fread(&fdb, fdbhdr.recsize, 1, fp1);
|
||||
/*
|
||||
* If we are importing a file with the same name,
|
||||
* skip the original record and put the new one in place.
|
||||
*/
|
||||
if (strcmp(file.LName, fdb.LName) != 0)
|
||||
fwrite(&file, sizeof(file), 1, fp2);
|
||||
if (strcmp(fdb.LName, f_db.LName) != 0)
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, fp2);
|
||||
}
|
||||
|
||||
if (area.AddAlpha)
|
||||
fwrite(&fdb, sizeof(fdb), 1, fp2);
|
||||
fwrite(&f_db, fdbhdr.recsize, 1, fp2);
|
||||
|
||||
/*
|
||||
* Append the rest of the records
|
||||
*/
|
||||
while (fread(&file, sizeof(file), 1, fp1) == 1) {
|
||||
if (strcmp(file.LName, fdb.LName) != 0)
|
||||
fwrite(&file, sizeof(file), 1, fp2);
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, fp1) == 1) {
|
||||
if (strcmp(fdb.LName, f_db.LName) != 0)
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, fp2);
|
||||
}
|
||||
if (!area.AddAlpha)
|
||||
fwrite(&fdb, sizeof(fdb), 1, fp2);
|
||||
fwrite(&f_db, fdbhdr.recsize, 1, fp2);
|
||||
fclose(fp1);
|
||||
fclose(fp2);
|
||||
|
||||
@ -423,7 +424,7 @@ int AddFile(struct FILERecord fdb, int Area, char *DestPath, char *FromPath, cha
|
||||
* Append file record
|
||||
*/
|
||||
fseek(fp1, 0, SEEK_END);
|
||||
fwrite(&fdb, sizeof(fdb), 1, fp1);
|
||||
fwrite(&f_db, fdbhdr.recsize, 1, fp1);
|
||||
fclose(fp1);
|
||||
}
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ void Help(void); /* Show help screen */
|
||||
void Marker(void); /* Eyecatcher */
|
||||
void DeleteVirusWork(void); /* Delete unarc directory */
|
||||
int UnpackFile(char *File); /* Unpack archive */
|
||||
int AddFile(struct FILERecord, int, char *, char *, char *);
|
||||
int AddFile(struct FILE_record, int, char *, char *, char *);
|
||||
int CheckFDB(int, char *); /* Check FDB of area */
|
||||
int LoadAreaRec(int); /* Load Area record */
|
||||
|
||||
|
@ -74,7 +74,6 @@ int ProcessTic(fa_list *sbl)
|
||||
unsigned long crc, crc2, Kb;
|
||||
sysconnect Link;
|
||||
FILE *fp;
|
||||
long FwdCost = 0, FwdSize = 0;
|
||||
struct utimbuf ut;
|
||||
int BBS_Imp = FALSE, DidBanner = FALSE;
|
||||
faddr *p_from;
|
||||
@ -314,63 +313,14 @@ int ProcessTic(fa_list *sbl)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the cost of this file
|
||||
*/
|
||||
T_File.Size = TIC.FileSize;
|
||||
T_File.SizeKb = TIC.FileSize / 1024;
|
||||
if ((fgroup.UnitCost) || (TIC.TicIn.Cost))
|
||||
TIC.Charge = TRUE;
|
||||
else
|
||||
TIC.Charge = FALSE;
|
||||
|
||||
if (TIC.Charge) {
|
||||
/*
|
||||
* Calculate our filetransfer cost.
|
||||
*/
|
||||
FwdCost = fgroup.UnitCost;
|
||||
FwdSize = fgroup.UnitSize;
|
||||
|
||||
/*
|
||||
* If FwdSize <> 0 then calculate per size, else charge for each file.
|
||||
*/
|
||||
if (FwdSize)
|
||||
TIC.FileCost = ((TIC.FileSize / 1024) / FwdSize) * FwdCost;
|
||||
else
|
||||
TIC.FileCost = FwdCost;
|
||||
|
||||
if (TIC.TicIn.Cost)
|
||||
TIC.FileCost += TIC.TicIn.Cost;
|
||||
|
||||
if (fgroup.AddProm)
|
||||
TIC.FileCost += (TIC.FileCost * fgroup.AddProm / 1000);
|
||||
|
||||
if (fgroup.DivideCost) {
|
||||
/*
|
||||
* If not a passthru area, we are a link too.
|
||||
*/
|
||||
if (DownLinks)
|
||||
TIC.FileCost = TIC.FileCost / (DownLinks + 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* At least charge one unit.
|
||||
*/
|
||||
if (!TIC.FileCost)
|
||||
TIC.FileCost = 1;
|
||||
|
||||
Syslog('+', "The file cost will be %ld", TIC.FileCost);
|
||||
}
|
||||
|
||||
/*
|
||||
* Update the uplink's counters.
|
||||
*/
|
||||
Kb = TIC.FileSize / 1024;
|
||||
if (SearchNode(TIC.Aka)) {
|
||||
if (TIC.TicIn.Cost && nodes.Billing) {
|
||||
nodes.Debet -= TIC.TicIn.Cost;
|
||||
Syslog('f', "Uplink cost %ld, debet %ld", TIC.TicIn.Cost, nodes.Debet);
|
||||
}
|
||||
StatAdd(&nodes.FilesRcvd, 1L);
|
||||
StatAdd(&nodes.F_KbRcvd, Kb);
|
||||
UpdateNode();
|
||||
@ -727,7 +677,6 @@ int ProcessTic(fa_list *sbl)
|
||||
strncpy(T_File.Name, TIC.NewFile, 12);
|
||||
strncpy(T_File.LName, TIC.NewFullName, 80);
|
||||
T_File.Fdate = TIC.FileDate;
|
||||
T_File.Cost = TIC.TicIn.Cost;
|
||||
Add_ToBeRep();
|
||||
}
|
||||
|
||||
|
634
mbsebbs/file.c
634
mbsebbs/file.c
@ -55,31 +55,31 @@ int FileRecno = 0;
|
||||
int CheckFile(char *, int);
|
||||
int CheckFile(char *File, int iArea)
|
||||
{
|
||||
FILE *pFileB;
|
||||
char *sFileArea;
|
||||
FILE *pFileB;
|
||||
char *sFileArea;
|
||||
|
||||
sFileArea = calloc(PATH_MAX, sizeof(char));
|
||||
sprintf(sFileArea,"%s/fdb/fdb%d.dta", getenv("MBSE_ROOT"), iArea);
|
||||
sFileArea = calloc(PATH_MAX, sizeof(char));
|
||||
sprintf(sFileArea,"%s/fdb/file%d.data", getenv("MBSE_ROOT"), iArea);
|
||||
|
||||
if ((pFileB = fopen(sFileArea,"r+")) == NULL) {
|
||||
mkdir(sFileArea, 775);
|
||||
return FALSE;
|
||||
}
|
||||
free(sFileArea);
|
||||
|
||||
/*
|
||||
* Check long and short filenames, case insensitive
|
||||
*/
|
||||
while (fread(&file, sizeof(file), 1, pFileB) == 1) {
|
||||
if (((strcasecmp(file.Name, File)) == 0) || ((strcasecmp(file.LName, File)) == 0)) {
|
||||
fclose(pFileB);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fclose(pFileB);
|
||||
if ((pFileB = fopen(sFileArea,"r+")) == NULL) {
|
||||
mkdir(sFileArea, 775);
|
||||
return FALSE;
|
||||
}
|
||||
free(sFileArea);
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, pFileB);
|
||||
|
||||
/*
|
||||
* Check long and short filenames, case insensitive
|
||||
*/
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFileB) == 1) {
|
||||
if (((strcasecmp(fdb.Name, File)) == 0) || ((strcasecmp(fdb.LName, File)) == 0)) {
|
||||
fclose(pFileB);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(pFileB);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@ -89,75 +89,69 @@ int CheckFile(char *File, int iArea)
|
||||
*/
|
||||
void File_List()
|
||||
{
|
||||
FILE *pFile;
|
||||
int FileCount = 0;
|
||||
unsigned FileBytes = 0;
|
||||
_Tag T;
|
||||
FILE *pFile;
|
||||
int FileCount = 0;
|
||||
unsigned FileBytes = 0;
|
||||
_Tag T;
|
||||
|
||||
iLineCount = 0;
|
||||
WhosDoingWhat(FILELIST, NULL);
|
||||
iLineCount = 0;
|
||||
WhosDoingWhat(FILELIST, NULL);
|
||||
|
||||
Syslog('+', "Listing File Area # %d", iAreaNumber);
|
||||
Syslog('+', "Listing File Area # %d", iAreaNumber);
|
||||
|
||||
if(Access(exitinfo.Security, area.LTSec) == FALSE) {
|
||||
colour(14, 0);
|
||||
/* You don't have enough security to list this area */
|
||||
printf("\n%s\n", (char *) Language(236));
|
||||
Pause();
|
||||
return;
|
||||
}
|
||||
|
||||
InitTag();
|
||||
|
||||
if ((pFile = OpenFileBase(iAreaNumber, FALSE)) == NULL)
|
||||
return;
|
||||
|
||||
clear();
|
||||
Header();
|
||||
if (iLC(2) == 1) {
|
||||
fclose(pFile);
|
||||
return;
|
||||
}
|
||||
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
|
||||
memset(&T, 0, sizeof(T));
|
||||
T.Area = iAreaNumber;
|
||||
T.Active = FALSE;
|
||||
T.Cost = file.Cost;
|
||||
T.Size = file.Size;
|
||||
strncpy(T.SFile, file.Name, 12);
|
||||
strncpy(T.LFile, file.LName, 80);
|
||||
SetTag(T);
|
||||
|
||||
if (ShowOneFile() == 1) {
|
||||
fclose(pFile);
|
||||
return;
|
||||
}
|
||||
|
||||
if (file.Deleted)
|
||||
/* D E L E T E D */ /* Uploaded by: */
|
||||
printf(" -- %-12s %s [%4ld] %s%s\n", file.Name, (char *) Language(239),
|
||||
file.TimesDL, (char *) Language(238), file.Uploader);
|
||||
|
||||
if (file.Missing)
|
||||
/* M I S S I N G */ /* Uploaded by: */
|
||||
printf(" -- %-12s %s [%4ld] %s%s\n", file.Name, (char *) Language(240),
|
||||
file.TimesDL, (char *) Language(238), file.Uploader);
|
||||
|
||||
FileCount++; /* Increase File Counter by 1 */
|
||||
FileBytes += file.Size; /* Increase File Byte Count */
|
||||
}
|
||||
|
||||
Mark();
|
||||
|
||||
colour(11,0);
|
||||
/* Total Files: */
|
||||
printf("\n%s%d / %d bytes\n\n", (char *) Language(242), FileCount, FileBytes);
|
||||
|
||||
iLineCount = 0;
|
||||
fclose(pFile);
|
||||
if (Access(exitinfo.Security, area.LTSec) == FALSE) {
|
||||
colour(14, 0);
|
||||
/* You don't have enough security to list this area */
|
||||
printf("\n%s\n", (char *) Language(236));
|
||||
Pause();
|
||||
return;
|
||||
}
|
||||
|
||||
InitTag();
|
||||
|
||||
if ((pFile = OpenFileBase(iAreaNumber, FALSE)) == NULL)
|
||||
return;
|
||||
|
||||
clear();
|
||||
Header();
|
||||
if (iLC(2) == 1) {
|
||||
fclose(pFile);
|
||||
return;
|
||||
}
|
||||
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
|
||||
memset(&T, 0, sizeof(T));
|
||||
T.Area = iAreaNumber;
|
||||
T.Active = FALSE;
|
||||
T.Size = fdb.Size;
|
||||
strncpy(T.SFile, fdb.Name, 12);
|
||||
strncpy(T.LFile, fdb.LName, 80);
|
||||
SetTag(T);
|
||||
|
||||
if (ShowOneFile() == 1) {
|
||||
fclose(pFile);
|
||||
return;
|
||||
}
|
||||
|
||||
if (fdb.Deleted)
|
||||
/* D E L E T E D */ /* Uploaded by: */
|
||||
printf(" -- %-12s %s [%4ld] %s%s\n", fdb.Name, (char *) Language(239),
|
||||
fdb.TimesDL, (char *) Language(238), fdb.Uploader);
|
||||
|
||||
FileCount++; /* Increase File Counter by 1 */
|
||||
FileBytes += fdb.Size; /* Increase File Byte Count */
|
||||
}
|
||||
|
||||
Mark();
|
||||
|
||||
colour(11,0);
|
||||
/* Total Files: */
|
||||
printf("\n%s%d / %d bytes\n\n", (char *) Language(242), FileCount, FileBytes);
|
||||
|
||||
iLineCount = 0;
|
||||
fclose(pFile);
|
||||
Pause();
|
||||
}
|
||||
|
||||
|
||||
@ -205,26 +199,25 @@ void Download(void)
|
||||
SetFileArea(Tag.Area);
|
||||
|
||||
/*
|
||||
* Check password for selected file
|
||||
* Check password for selected file FIXME: Where???
|
||||
*/
|
||||
memset(&file, 0, sizeof(file));
|
||||
memset(&fdb, 0, sizeof(fdb));
|
||||
if ((fp = OpenFileBase(Tag.Area, FALSE)) != NULL) {
|
||||
while (fread(&file, sizeof(file), 1, fp) == 1) {
|
||||
if (strcmp(file.LName, Tag.LFile) == 0)
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, fp) == 1) {
|
||||
if (strcmp(fdb.LName, Tag.LFile) == 0)
|
||||
break;
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
if (strcmp(file.LName, Tag.LFile) == 0) {
|
||||
Syslog('b', "Found file %s in area %d", file.LName, Tag.Area);
|
||||
if ((file.Deleted) || (file.Missing)) {
|
||||
if (strcmp(fdb.LName, Tag.LFile) == 0) {
|
||||
Syslog('b', "Found file %s in area %d", fdb.LName, Tag.Area);
|
||||
if (fdb.Deleted) {
|
||||
pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(248));
|
||||
/* Sorry that file is unavailable for download */
|
||||
printf("%s (%s)\n", (char *) Language(248), file.LName);
|
||||
printf("%s (%s)\n", (char *) Language(248), fdb.LName);
|
||||
Tag.Active = FALSE;
|
||||
Syslog('+', "File %s in area %d unavailable for download, %s",
|
||||
file.LName, Tag.Area, file.Deleted?"deleted":"missing");
|
||||
Syslog('+', "File %s in area %d unavailable for download, deleted", fdb.LName, Tag.Area);
|
||||
}
|
||||
}
|
||||
|
||||
@ -237,10 +230,10 @@ void Download(void)
|
||||
*/
|
||||
sprintf(symTo, "./tag/filedesc.%ld", exitinfo.Downloads % 256);
|
||||
if ((fd = fopen(symTo, "a")) != NULL) {
|
||||
fprintf(fd, "%s (%s)\r\n", file.LName, file.Name);
|
||||
fprintf(fd, "%s (%s)\r\n", fdb.LName, fdb.Name);
|
||||
for (i = 0; i < 25; i++) {
|
||||
if (strlen(file.Desc[i]) > 1)
|
||||
fprintf(fd, " %s\r\n", file.Desc[i]);
|
||||
if (strlen(fdb.Desc[i]) > 1)
|
||||
fprintf(fd, " %s\r\n", fdb.Desc[i]);
|
||||
}
|
||||
fprintf(fd, "\r\n");
|
||||
fclose(fd);
|
||||
@ -287,9 +280,9 @@ void Download(void)
|
||||
* Count file and sizes.
|
||||
*/
|
||||
Count++;
|
||||
Size += file.Size;
|
||||
if ((!file.Free) && (!area.Free))
|
||||
CostSize += file.Size;
|
||||
Size += fdb.Size;
|
||||
if (!area.Free)
|
||||
CostSize += fdb.Size;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -437,15 +430,15 @@ void Download(void)
|
||||
*/
|
||||
SetFileArea(Tag.Area);
|
||||
if ((fp = OpenFileBase(Tag.Area, TRUE)) != NULL) {
|
||||
while (fread(&file, sizeof(file), 1, fp) == 1) {
|
||||
if (strcmp(file.LName, Tag.LFile) == 0)
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, fp) == 1) {
|
||||
if (strcmp(fdb.LName, Tag.LFile) == 0)
|
||||
break;
|
||||
}
|
||||
Size += file.Size;
|
||||
file.TimesDL++;
|
||||
file.LastDL = time(NULL);
|
||||
fseek(fp, - sizeof(file), SEEK_CUR);
|
||||
fwrite(&file, sizeof(file), 1, fp);
|
||||
Size += fdb.Size;
|
||||
fdb.TimesDL++;
|
||||
fdb.LastDL = time(NULL);
|
||||
fseek(fp, - fdbhdr.recsize, SEEK_CUR);
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, fp);
|
||||
fclose(fp);
|
||||
Count++;
|
||||
}
|
||||
@ -570,136 +563,129 @@ void File_RawDir(char *OpData)
|
||||
*/
|
||||
int KeywordScan()
|
||||
{
|
||||
FILE *pAreas, *pFile;
|
||||
int i, z, y, Found, Count = 0;
|
||||
char *Name;
|
||||
char *tmpname;
|
||||
char *BigDesc;
|
||||
char temp[81];
|
||||
_Tag T;
|
||||
unsigned long OldArea;
|
||||
FILE *pAreas, *pFile;
|
||||
int i, z, y, Found, Count = 0;
|
||||
char *Name, *tmpname, *BigDesc, temp[81];
|
||||
_Tag T;
|
||||
unsigned long OldArea;
|
||||
|
||||
|
||||
Name = calloc(81, sizeof(char));
|
||||
tmpname = calloc(81, sizeof(char));
|
||||
BigDesc = calloc(1230, sizeof(char));
|
||||
OldArea = iAreaNumber;
|
||||
Name = calloc(81, sizeof(char));
|
||||
tmpname = calloc(81, sizeof(char));
|
||||
BigDesc = calloc(1230, sizeof(char));
|
||||
OldArea = iAreaNumber;
|
||||
|
||||
iLineCount = 2; /* Reset Line Counter to Zero */
|
||||
arecno = 1; /* Reset Area Number to One */
|
||||
iLineCount = 2; /* Reset Line Counter to Zero */
|
||||
arecno = 1; /* Reset Area Number to One */
|
||||
|
||||
Enter(2);
|
||||
/* Enter keyword to use for Search: */
|
||||
pout(11, 0, (char *) Language(267));
|
||||
Enter(2);
|
||||
/* Enter keyword to use for Search: */
|
||||
pout(11, 0, (char *) Language(267));
|
||||
|
||||
colour(CFG.InputColourF, CFG.InputColourB);
|
||||
GetstrC(Name, 80);
|
||||
colour(CFG.InputColourF, CFG.InputColourB);
|
||||
GetstrC(Name, 80);
|
||||
|
||||
if ((strcmp(Name, "")) == 0)
|
||||
return 0;
|
||||
if ((strcmp(Name, "")) == 0)
|
||||
return 0;
|
||||
|
||||
strcpy(tmpname, tl(Name));
|
||||
strcpy(Name, "");
|
||||
y = strlen(tmpname);
|
||||
for (z = 0; z < y; z++) {
|
||||
if (tmpname[z] != '*') {
|
||||
sprintf(temp, "%c", tmpname[z]);
|
||||
strcat(Name, temp);
|
||||
}
|
||||
strcpy(tmpname, tl(Name));
|
||||
strcpy(Name, "");
|
||||
y = strlen(tmpname);
|
||||
for (z = 0; z < y; z++) {
|
||||
if (tmpname[z] != '*') {
|
||||
sprintf(temp, "%c", tmpname[z]);
|
||||
strcat(Name, temp);
|
||||
}
|
||||
Syslog('+', "KeywordScan(): \"%s\"", Name);
|
||||
}
|
||||
Syslog('+', "KeywordScan(): \"%s\"", Name);
|
||||
|
||||
clear();
|
||||
/* File search by keyword */
|
||||
pout(15, 0, (char *) Language(268));
|
||||
Enter(1);
|
||||
InitTag();
|
||||
clear();
|
||||
/* File search by keyword */
|
||||
pout(15, 0, (char *) Language(268));
|
||||
Enter(1);
|
||||
InitTag();
|
||||
|
||||
for(i = 0; i < 25; i++)
|
||||
sprintf(BigDesc, "%s%s", BigDesc, *(file.Desc + i));
|
||||
if ((pAreas = OpenFareas(FALSE)) == NULL)
|
||||
return 0;
|
||||
|
||||
if ((pAreas = OpenFareas(FALSE)) == NULL)
|
||||
return 0;
|
||||
while (fread(&area, areahdr.recsize, 1, pAreas) == 1) {
|
||||
|
||||
while (fread(&area, areahdr.recsize, 1, pAreas) == 1) {
|
||||
if ((Access(exitinfo.Security, area.LTSec)) && (area.Available) && (strlen(area.Password) == 0)) {
|
||||
|
||||
if ((Access(exitinfo.Security, area.LTSec)) && (area.Available) && (strlen(area.Password) == 0)) {
|
||||
if ((pFile = OpenFileBase(arecno, FALSE)) != NULL) {
|
||||
|
||||
if ((pFile = OpenFileBase(arecno, FALSE)) != NULL) {
|
||||
Nopper();
|
||||
Found = FALSE;
|
||||
Sheader();
|
||||
|
||||
Nopper();
|
||||
Found = FALSE;
|
||||
Sheader();
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
for (i = 0; i < 25; i++)
|
||||
sprintf(BigDesc, "%s%s", BigDesc, *(fdb.Desc + i));
|
||||
|
||||
for(i = 0; i < 25; i++)
|
||||
sprintf(BigDesc, "%s%s", BigDesc, *(file.Desc + i));
|
||||
if ((strstr(fdb.Name,Name) != NULL) || (strstr(tl(BigDesc), Name) != NULL)) {
|
||||
|
||||
if ((strstr(file.Name,Name) != NULL) || (strstr(tl(BigDesc), Name) != NULL)) {
|
||||
if (!Found) {
|
||||
Enter(2);
|
||||
if (iLC(2) == 1) {
|
||||
free(BigDesc);
|
||||
free(Name);
|
||||
free(tmpname);
|
||||
SetFileArea(OldArea);
|
||||
return 1;
|
||||
}
|
||||
Found = TRUE;
|
||||
}
|
||||
|
||||
if (!Found) {
|
||||
Enter(2);
|
||||
if (iLC(2) == 1) {
|
||||
free(BigDesc);
|
||||
free(Name);
|
||||
free(tmpname);
|
||||
SetFileArea(OldArea);
|
||||
return 1;
|
||||
}
|
||||
Found = TRUE;
|
||||
}
|
||||
memset(&T, 0, sizeof(T));
|
||||
T.Area = arecno;
|
||||
T.Active = FALSE;
|
||||
T.Size = fdb.Size;
|
||||
strncpy(T.SFile, fdb.Name, 12);
|
||||
strncpy(T.LFile, fdb.LName, 80);
|
||||
SetTag(T);
|
||||
Count++;
|
||||
if (ShowOneFile() == 1) {
|
||||
free(BigDesc);
|
||||
free(Name);
|
||||
free(tmpname);
|
||||
SetFileArea(OldArea);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
strcpy(BigDesc, ""); /* Clear BigDesc */
|
||||
|
||||
memset(&T, 0, sizeof(T));
|
||||
T.Area = arecno;
|
||||
T.Active = FALSE;
|
||||
T.Cost = file.Cost;
|
||||
T.Size = file.Size;
|
||||
strncpy(T.SFile, file.Name, 12);
|
||||
strncpy(T.LFile, file.LName, 80);
|
||||
SetTag(T);
|
||||
Count++;
|
||||
if (ShowOneFile() == 1) {
|
||||
free(BigDesc);
|
||||
free(Name);
|
||||
free(tmpname);
|
||||
SetFileArea(OldArea);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
strcpy(BigDesc, ""); /* Clear BigDesc */
|
||||
} /* while */
|
||||
|
||||
} /* while */
|
||||
fclose(pFile);
|
||||
if (Found) {
|
||||
Enter(2);
|
||||
if (iLC(2) == 1) {
|
||||
free(BigDesc);
|
||||
free(Name);
|
||||
free(tmpname);
|
||||
SetFileArea(OldArea);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(pFile);
|
||||
if (Found) {
|
||||
Enter(2);
|
||||
if (iLC(2) == 1) {
|
||||
free(BigDesc);
|
||||
free(Name);
|
||||
free(tmpname);
|
||||
SetFileArea(OldArea);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
} /* End check for LTSec */
|
||||
} /* if access */
|
||||
arecno++; /* Go to next file area */
|
||||
} /* End of Main */
|
||||
|
||||
} /* End check for LTSec */
|
||||
} /* if access */
|
||||
arecno++; /* Go to next file area */
|
||||
} /* End of Main */
|
||||
|
||||
Syslog('+', "Found %d files", Count);
|
||||
free(BigDesc);
|
||||
free(Name);
|
||||
free(tmpname);
|
||||
fclose(pAreas);
|
||||
printf("\n");
|
||||
if (Count)
|
||||
Mark();
|
||||
else
|
||||
Pause();
|
||||
SetFileArea(OldArea);
|
||||
return 1;
|
||||
Syslog('+', "Found %d files", Count);
|
||||
free(BigDesc);
|
||||
free(Name);
|
||||
free(tmpname);
|
||||
fclose(pAreas);
|
||||
printf("\n");
|
||||
if (Count)
|
||||
Mark();
|
||||
else
|
||||
Pause();
|
||||
SetFileArea(OldArea);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@ -779,9 +765,9 @@ int FilenameScan()
|
||||
Sheader();
|
||||
Nopper();
|
||||
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
|
||||
if (re_exec(file.Name) || re_exec(file.LName)) {
|
||||
if (re_exec(fdb.Name) || re_exec(fdb.LName)) {
|
||||
if (!Found) {
|
||||
Enter(2);
|
||||
if (iLC(2) == 1) {
|
||||
@ -794,10 +780,9 @@ int FilenameScan()
|
||||
memset(&T, 0, sizeof(T));
|
||||
T.Area = arecno;
|
||||
T.Active = FALSE;
|
||||
T.Cost = file.Cost;
|
||||
T.Size = file.Size;
|
||||
strncpy(T.SFile, file.Name, 12);
|
||||
strncpy(T.LFile, file.LName, 81);
|
||||
T.Size = fdb.Size;
|
||||
strncpy(T.SFile, fdb.Name, 12);
|
||||
strncpy(T.LFile, fdb.LName, 81);
|
||||
SetTag(T);
|
||||
Count++;
|
||||
if (ShowOneFile() == 1) {
|
||||
@ -904,8 +889,8 @@ int NewfileScan(int AskStart)
|
||||
Found = FALSE;
|
||||
Nopper();
|
||||
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
strcpy(temp, StrDateDMY(file.UploadDate)); /* Realloc Space for Date */
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
strcpy(temp, StrDateDMY(fdb.UploadDate)); /* Realloc Space for Date */
|
||||
Date[0] = temp[6]; /* Swap the date around */
|
||||
Date[1] = temp[7]; /* Instead of DD-MM-YYYY */
|
||||
Date[2] = temp[8]; /* Let it equal YYYYMMDD */
|
||||
@ -934,10 +919,9 @@ int NewfileScan(int AskStart)
|
||||
memset(&T, 0, sizeof(T));
|
||||
T.Area = arecno;
|
||||
T.Active = FALSE;
|
||||
T.Cost = file.Cost;
|
||||
T.Size = file.Size;
|
||||
strncpy(T.SFile, file.Name, 12);
|
||||
strncpy(T.LFile, file.LName, 80);
|
||||
T.Size = fdb.Size;
|
||||
strncpy(T.SFile, fdb.Name, 12);
|
||||
strncpy(T.LFile, fdb.LName, 80);
|
||||
SetTag(T);
|
||||
|
||||
Count++;
|
||||
@ -1992,105 +1976,105 @@ void FileArea_List(char *Option)
|
||||
*/
|
||||
void Copy_Home()
|
||||
{
|
||||
FILE *pFile;
|
||||
char *File, *temp1, *temp2;
|
||||
int err, Found = FALSE;
|
||||
FILE *pFile;
|
||||
char *File, *temp1, *temp2;
|
||||
int err, Found = FALSE;
|
||||
|
||||
File = calloc(81, sizeof(char));
|
||||
temp1 = calloc(PATH_MAX, sizeof(char));
|
||||
temp2 = calloc(PATH_MAX, sizeof(char));
|
||||
File = calloc(81, sizeof(char));
|
||||
temp1 = calloc(PATH_MAX, sizeof(char));
|
||||
temp2 = calloc(PATH_MAX, sizeof(char));
|
||||
|
||||
colour(14,0);
|
||||
/* Please enter filename: */
|
||||
printf("\n%s", (char *) Language(245));
|
||||
colour(CFG.InputColourF, CFG.InputColourB);
|
||||
GetstrC(File, 80);
|
||||
|
||||
if ((strcmp(File, "")) == 0) {
|
||||
colour(CFG.HiliteF, CFG.HiliteB);
|
||||
/* No filename entered, Aborting. */
|
||||
printf("\n\n%s\n", (char *) Language(246));
|
||||
Pause();
|
||||
free(File);
|
||||
free(temp1);
|
||||
free(temp2);
|
||||
return;
|
||||
}
|
||||
|
||||
if (*(File) == '/' || *(File) == ' ') {
|
||||
colour(CFG.HiliteF, CFG.HiliteB);
|
||||
/* Illegal Filename! */
|
||||
printf("\n%s\n\n", (char *) Language(247));
|
||||
Pause();
|
||||
free(File);
|
||||
free(temp1);
|
||||
free(temp2);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Access(exitinfo.Security, area.DLSec) == FALSE) {
|
||||
colour(14, 0);
|
||||
printf("\n%s\n", (char *) Language(236));
|
||||
Pause();
|
||||
free(File);
|
||||
free(temp1);
|
||||
free(temp2);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((pFile = OpenFileBase(iAreaNumber, FALSE)) == NULL) {
|
||||
free(File);
|
||||
free(temp1);
|
||||
free(temp2);
|
||||
return;
|
||||
}
|
||||
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
|
||||
if ((strcasecmp(File, file.Name) == 0) || (strcasecmp(File, file.LName) == 0)) {
|
||||
|
||||
Found = TRUE;
|
||||
if (((file.Size + Quota()) > (CFG.iQuota * 1048576))) {
|
||||
colour(CFG.HiliteF, CFG.HiliteB);
|
||||
/* You have not enough diskspace free to copy this file */
|
||||
printf("%s\n", (char *) Language(279));
|
||||
Syslog('+', "Copy homedir, not enough quota");
|
||||
} else {
|
||||
sprintf(temp1, "%s/%s", area.Path, file.LName); /* Use real longname here */
|
||||
sprintf(temp2, "%s/%s/wrk/%s", CFG.bbs_usersdir, exitinfo.Name, File);
|
||||
colour(CFG.TextColourF, CFG.TextColourB);
|
||||
/* Start copy: */
|
||||
printf("%s%s ", (char *) Language(289), File);
|
||||
fflush(stdout);
|
||||
|
||||
Syslog('b', "Copy from : %s", temp1);
|
||||
Syslog('b', "Copy to : %s", temp2);
|
||||
|
||||
if ((err = file_cp(temp1, temp2))) {
|
||||
colour(CFG.HiliteF, CFG.HiliteB);
|
||||
/* Failed! */
|
||||
printf("%s\n", (char *) Language(353));
|
||||
WriteError("Copy %s to homedir failed, code %d", File, err);
|
||||
} else {
|
||||
/* Ok */
|
||||
printf("%s\n", (char *) Language(200));
|
||||
Syslog('+', "Copied %s from area %d to homedir", File, iAreaNumber);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(pFile);
|
||||
|
||||
if (!Found) {
|
||||
colour(CFG.HiliteF, CFG.HiliteB);
|
||||
/* File does not exist, please try again ... */
|
||||
printf("%s\n", (char *) Language(296));
|
||||
}
|
||||
colour(14,0);
|
||||
/* Please enter filename: */
|
||||
printf("\n%s", (char *) Language(245));
|
||||
colour(CFG.InputColourF, CFG.InputColourB);
|
||||
GetstrC(File, 80);
|
||||
|
||||
if ((strcmp(File, "")) == 0) {
|
||||
colour(CFG.HiliteF, CFG.HiliteB);
|
||||
/* No filename entered, Aborting. */
|
||||
printf("\n\n%s\n", (char *) Language(246));
|
||||
Pause();
|
||||
free(File);
|
||||
free(temp1);
|
||||
free(temp2);
|
||||
return;
|
||||
}
|
||||
|
||||
if (*(File) == '/' || *(File) == ' ') {
|
||||
colour(CFG.HiliteF, CFG.HiliteB);
|
||||
/* Illegal Filename! */
|
||||
printf("\n%s\n\n", (char *) Language(247));
|
||||
Pause();
|
||||
free(File);
|
||||
free(temp1);
|
||||
free(temp2);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Access(exitinfo.Security, area.DLSec) == FALSE) {
|
||||
colour(14, 0);
|
||||
printf("\n%s\n", (char *) Language(236));
|
||||
Pause();
|
||||
free(File);
|
||||
free(temp1);
|
||||
free(temp2);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((pFile = OpenFileBase(iAreaNumber, FALSE)) == NULL) {
|
||||
free(File);
|
||||
free(temp1);
|
||||
free(temp2);
|
||||
return;
|
||||
}
|
||||
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
|
||||
if ((strcasecmp(File, fdb.Name) == 0) || (strcasecmp(File, fdb.LName) == 0)) {
|
||||
|
||||
Found = TRUE;
|
||||
if (((fdb.Size + Quota()) > (CFG.iQuota * 1048576))) {
|
||||
colour(CFG.HiliteF, CFG.HiliteB);
|
||||
/* You have not enough diskspace free to copy this file */
|
||||
printf("%s\n", (char *) Language(279));
|
||||
Syslog('+', "Copy homedir, not enough quota");
|
||||
} else {
|
||||
sprintf(temp1, "%s/%s", area.Path, fdb.LName); /* Use real longname here */
|
||||
sprintf(temp2, "%s/%s/wrk/%s", CFG.bbs_usersdir, exitinfo.Name, File);
|
||||
colour(CFG.TextColourF, CFG.TextColourB);
|
||||
/* Start copy: */
|
||||
printf("%s%s ", (char *) Language(289), File);
|
||||
fflush(stdout);
|
||||
|
||||
Syslog('b', "Copy from : %s", temp1);
|
||||
Syslog('b', "Copy to : %s", temp2);
|
||||
|
||||
if ((err = file_cp(temp1, temp2))) {
|
||||
colour(CFG.HiliteF, CFG.HiliteB);
|
||||
/* Failed! */
|
||||
printf("%s\n", (char *) Language(353));
|
||||
WriteError("Copy %s to homedir failed, code %d", File, err);
|
||||
} else {
|
||||
/* Ok */
|
||||
printf("%s\n", (char *) Language(200));
|
||||
Syslog('+', "Copied %s from area %d to homedir", File, iAreaNumber);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(pFile);
|
||||
|
||||
if (!Found) {
|
||||
colour(CFG.HiliteF, CFG.HiliteB);
|
||||
/* File does not exist, please try again ... */
|
||||
printf("%s\n", (char *) Language(296));
|
||||
}
|
||||
|
||||
Pause();
|
||||
free(File);
|
||||
free(temp1);
|
||||
free(temp2);
|
||||
}
|
||||
|
||||
|
||||
@ -2289,8 +2273,8 @@ void ViewFile(char *name)
|
||||
return;
|
||||
}
|
||||
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
if (((strcasecmp(File, file.Name) == 0) || (strcasecmp(File, file.LName) == 0)) && (!file.Deleted) && (!file.Missing)) {
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
if (((strcasecmp(File, fdb.Name) == 0) || (strcasecmp(File, fdb.LName) == 0)) && (!fdb.Deleted)) {
|
||||
found = TRUE;
|
||||
break;
|
||||
}
|
||||
@ -2306,9 +2290,9 @@ void ViewFile(char *name)
|
||||
return;
|
||||
}
|
||||
|
||||
sprintf(File, "%s/%s", sAreaPath, file.LName);
|
||||
sprintf(File, "%s/%s", sAreaPath, fdb.LName);
|
||||
arc = GetFileType(File);
|
||||
Syslog('+', "File to view: %s, type %s", file.LName, printable(arc, 0));
|
||||
Syslog('+', "File to view: %s, type %s", fdb.LName, printable(arc, 0));
|
||||
|
||||
if (arc != NULL) {
|
||||
found = FALSE;
|
||||
|
@ -151,29 +151,31 @@ void GetstrD(char *sStr, int iMaxlen)
|
||||
|
||||
|
||||
/*
|
||||
* Open FileDataBase.
|
||||
* Open FileDataBase, the filepointer is at the begin of the first record.
|
||||
*/
|
||||
FILE *OpenFileBase(unsigned long Area, int Write)
|
||||
{
|
||||
FILE *pFile;
|
||||
char *FileBase;
|
||||
FILE *pFile;
|
||||
char *FileBase;
|
||||
|
||||
FileBase = calloc(PATH_MAX, sizeof(char));
|
||||
sprintf(FileBase,"%s/fdb/fdb%ld.data", getenv("MBSE_ROOT"), Area);
|
||||
FileBase = calloc(PATH_MAX, sizeof(char));
|
||||
sprintf(FileBase,"%s/fdb/file%ld.data", getenv("MBSE_ROOT"), Area);
|
||||
|
||||
if (Write)
|
||||
pFile = fopen(FileBase, "r+");
|
||||
else
|
||||
pFile = fopen(FileBase, "r");
|
||||
if (Write)
|
||||
pFile = fopen(FileBase, "r+");
|
||||
else
|
||||
pFile = fopen(FileBase, "r");
|
||||
|
||||
if (pFile == NULL) {
|
||||
WriteError("$Can't open file: %s", FileBase);
|
||||
/* Can't open file database for this area */
|
||||
printf("%s\n\n", (char *) Language(237));
|
||||
sleep(2);
|
||||
}
|
||||
free(FileBase);
|
||||
return pFile;
|
||||
if (pFile == NULL) {
|
||||
WriteError("$Can't open file: %s", FileBase);
|
||||
/* Can't open file database for this area */
|
||||
printf("%s\n\n", (char *) Language(237));
|
||||
sleep(2);
|
||||
}
|
||||
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
free(FileBase);
|
||||
return pFile;
|
||||
}
|
||||
|
||||
|
||||
@ -408,48 +410,48 @@ int ShowOneFile()
|
||||
{
|
||||
int y, z, fg, bg;
|
||||
|
||||
if ((!file.Deleted) && (!file.Missing)) {
|
||||
if (!fdb.Deleted) {
|
||||
|
||||
colour(7, 0);
|
||||
printf(" %02d ", Tagnr);
|
||||
|
||||
colour(CFG.FilenameF, CFG.FilenameB);
|
||||
printf("%-12s", file.Name);
|
||||
printf("%-12s", fdb.Name);
|
||||
|
||||
colour(CFG.FilesizeF, CFG.FilesizeB);
|
||||
printf("%10lu ", (long)(file.Size));
|
||||
printf("%10lu ", (long)(fdb.Size));
|
||||
|
||||
colour(CFG.FiledateF, CFG.FiledateB);
|
||||
printf("%-10s ", StrDateDMY(file.UploadDate));
|
||||
printf("%-10s ", StrDateDMY(fdb.UploadDate));
|
||||
|
||||
colour(12, 0);
|
||||
printf("[%4ld] ", file.TimesDL);
|
||||
printf("[%4ld] ", fdb.TimesDL);
|
||||
|
||||
if ((strcmp(file.Uploader, "")) == 0)
|
||||
strcpy(file.Uploader, "SysOp");
|
||||
if ((strcmp(fdb.Uploader, "")) == 0)
|
||||
strcpy(fdb.Uploader, "SysOp");
|
||||
|
||||
colour(CFG.HiliteF, CFG.HiliteB);
|
||||
printf("%s%s\n", (char *) Language(238), file.Uploader);
|
||||
printf("%s%s\n", (char *) Language(238), fdb.Uploader);
|
||||
|
||||
if (iLC(1) == 1)
|
||||
return 1;
|
||||
|
||||
for (z = 0; z <= 25; z++) {
|
||||
if ((y = strlen(file.Desc[z])) > 1) {
|
||||
if ((file.Desc[z][0] == '@') && (file.Desc[z][1] == 'X')) {
|
||||
for (z = 0; z < 25; z++) {
|
||||
if ((y = strlen(fdb.Desc[z])) > 1) {
|
||||
if ((fdb.Desc[z][0] == '@') && (fdb.Desc[z][1] == 'X')) {
|
||||
/*
|
||||
* Color formatted description lines.
|
||||
*/
|
||||
if (file.Desc[z][3] > '9')
|
||||
fg = (int)file.Desc[z][3] - 55;
|
||||
if (fdb.Desc[z][3] > '9')
|
||||
fg = (int)fdb.Desc[z][3] - 55;
|
||||
else
|
||||
fg = (int)file.Desc[z][3] - 48;
|
||||
bg = (int)file.Desc[z][2] - 48;
|
||||
fg = (int)fdb.Desc[z][3] - 48;
|
||||
bg = (int)fdb.Desc[z][2] - 48;
|
||||
colour(fg, bg);
|
||||
printf(" %s\n",file.Desc[z]+4);
|
||||
printf(" %s\n",fdb.Desc[z]+4);
|
||||
} else {
|
||||
colour(CFG.FiledescF, CFG.FiledescB);
|
||||
printf(" %s\n",file.Desc[z]);
|
||||
printf(" %s\n",fdb.Desc[z]);
|
||||
}
|
||||
|
||||
if (iLC(1) == 1)
|
||||
@ -850,18 +852,18 @@ int Addfile(char *File, int AreaNum, int fileid)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
memset(&file, 0, sizeof(file));
|
||||
strcpy(file.LName, File);
|
||||
memset(&fdb, 0, fdbhdr.recsize);
|
||||
strcpy(fdb.LName, File);
|
||||
strcpy(temp1, File);
|
||||
name_mangle(temp1);
|
||||
strcpy(file.Name, temp1);
|
||||
file.Size = (long)(statfile.st_size);
|
||||
file.FileDate = statfile.st_mtime;
|
||||
file.Crc32 = file_crc(Filename, TRUE);
|
||||
strcpy(file.Uploader, exitinfo.sUserName);
|
||||
file.UploadDate = time(NULL);
|
||||
if (strcmp(file.Name, file.LName)) {
|
||||
sprintf(lname, "%s/%s", area.Path, file.Name);
|
||||
strcpy(fdb.Name, temp1);
|
||||
fdb.Size = (long)(statfile.st_size);
|
||||
fdb.FileDate = statfile.st_mtime;
|
||||
fdb.Crc32 = file_crc(Filename, TRUE);
|
||||
strcpy(fdb.Uploader, exitinfo.sUserName);
|
||||
fdb.UploadDate = time(NULL);
|
||||
if (strcmp(fdb.Name, fdb.LName)) {
|
||||
sprintf(lname, "%s/%s", area.Path, fdb.Name);
|
||||
if (symlink(Filename, lname)) {
|
||||
WriteError("$Can't create link %s to %s", lname, Filename);
|
||||
}
|
||||
@ -882,7 +884,7 @@ int Addfile(char *File, int AreaNum, int fileid)
|
||||
printf("%s", (char *) Language(8));
|
||||
fflush(stdout);
|
||||
fflush(stdin);
|
||||
GetstrC(file.Password, 20);
|
||||
GetstrC(fdb.Password, 20);
|
||||
}
|
||||
}
|
||||
|
||||
@ -924,7 +926,7 @@ int Addfile(char *File, int AreaNum, int fileid)
|
||||
*/
|
||||
GotId = FALSE;
|
||||
for (i = 0; i < 25; i++)
|
||||
file.Desc[i][0] = '\0';
|
||||
fdb.Desc[i][0] = '\0';
|
||||
lines = 0;
|
||||
Syslog('!', "Trashing illegal formatted FILE_ID.DIZ");
|
||||
break;
|
||||
@ -933,7 +935,7 @@ int Addfile(char *File, int AreaNum, int fileid)
|
||||
j = 0;
|
||||
for (i = 0; i < strlen(temp1); i++) {
|
||||
if (isprint(temp1[i])) {
|
||||
file.Desc[lines][j] = temp1[i];
|
||||
fdb.Desc[lines][j] = temp1[i];
|
||||
j++;
|
||||
if (j > 47)
|
||||
break;
|
||||
@ -943,9 +945,9 @@ int Addfile(char *File, int AreaNum, int fileid)
|
||||
/*
|
||||
* Remove trailing spaces
|
||||
*/
|
||||
while (j && isspace(file.Desc[lines][j-1]))
|
||||
while (j && isspace(fdb.Desc[lines][j-1]))
|
||||
j--;
|
||||
file.Desc[lines][j] = '\0';
|
||||
fdb.Desc[lines][j] = '\0';
|
||||
lines++;
|
||||
}
|
||||
}
|
||||
@ -957,8 +959,8 @@ int Addfile(char *File, int AreaNum, int fileid)
|
||||
/*
|
||||
* Strip empty FILE_ID.DIZ lines at the end
|
||||
*/
|
||||
while ((strlen(file.Desc[lines-1]) == 0) && (lines)) {
|
||||
file.Desc[lines-1][0] = '\0';
|
||||
while ((strlen(fdb.Desc[lines-1]) == 0) && (lines)) {
|
||||
fdb.Desc[lines-1][0] = '\0';
|
||||
lines--;
|
||||
}
|
||||
if (lines) {
|
||||
@ -1002,14 +1004,14 @@ int Addfile(char *File, int AreaNum, int fileid)
|
||||
}
|
||||
|
||||
for (i = 1; i < iDesc; i++)
|
||||
strcpy(file.Desc[i - 1], Desc[i]);
|
||||
strcpy(fdb.Desc[i - 1], Desc[i]);
|
||||
|
||||
for (i = 0; i < 26; i++)
|
||||
free(Desc[i]);
|
||||
}
|
||||
|
||||
fseek(pFileDB, 0, SEEK_END);
|
||||
fwrite(&file, sizeof(file), 1, pFileDB);
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, pFileDB);
|
||||
fclose(pFileDB);
|
||||
|
||||
sprintf(temp, "%s/log/uploads.log", getenv("MBSE_ROOT"));
|
||||
@ -1018,13 +1020,13 @@ int Addfile(char *File, int AreaNum, int fileid)
|
||||
else {
|
||||
iPrivate = TRUE;
|
||||
fprintf(pPrivate, "****************************************************");
|
||||
fprintf(pPrivate, "\nUser : %s", file.Uploader);
|
||||
fprintf(pPrivate, "\nFile : %s (%s)", file.LName, file.Name);
|
||||
fprintf(pPrivate, "\nSize : %lu", (long)(file.Size));
|
||||
fprintf(pPrivate, "\nUpload Date : %s\n\n", StrDateDMY(file.UploadDate));
|
||||
fprintf(pPrivate, "\nUser : %s", fdb.Uploader);
|
||||
fprintf(pPrivate, "\nFile : %s (%s)", fdb.LName, fdb.Name);
|
||||
fprintf(pPrivate, "\nSize : %lu", (long)(fdb.Size));
|
||||
fprintf(pPrivate, "\nUpload Date : %s\n\n", StrDateDMY(fdb.UploadDate));
|
||||
|
||||
for (i = 0; i < iDesc - 1; i++)
|
||||
fprintf(pPrivate, "%2d: %s\n", i, file.Desc[i]);
|
||||
fprintf(pPrivate, "%2d: %s\n", i, fdb.Desc[i]);
|
||||
|
||||
fclose(pPrivate);
|
||||
}
|
||||
|
@ -332,14 +332,15 @@ void Masterlist()
|
||||
if (area.Available && (area.LTSec.level <= CFG.security.level)) {
|
||||
|
||||
Nopper();
|
||||
sprintf(fAreas, "%s/fdb/fdb%d.data", getenv("MBSE_ROOT"), AreaNr);
|
||||
sprintf(fAreas, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), AreaNr);
|
||||
|
||||
if ((pFile = fopen (fAreas, "r")) == NULL) {
|
||||
WriteError("$Can't open Area %d (%s)! Skipping ...", AreaNr, area.Name);
|
||||
} else {
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, pFile);
|
||||
popdown = 0;
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
if ((!file.Deleted) && (!file.Missing)) {
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
if (!fdb.Deleted) {
|
||||
/*
|
||||
* The next is to reduce system load.
|
||||
*/
|
||||
@ -348,16 +349,16 @@ void Masterlist()
|
||||
msleep(1);
|
||||
AllFiles++;
|
||||
AllAreaFiles++;
|
||||
AllAreaBytes += file.Size;
|
||||
down = file.TimesDL + file.TimesFTP + file.TimesReq;
|
||||
AllAreaBytes += fdb.Size;
|
||||
down = fdb.TimesDL;
|
||||
if (down > popdown) {
|
||||
popdown = down;
|
||||
sprintf(pop, "%s", file.Name);
|
||||
sprintf(pop, "%s", fdb.Name);
|
||||
}
|
||||
if (((t_start - file.UploadDate) / 84400) <= CFG.newdays) {
|
||||
if (((t_start - fdb.UploadDate) / 84400) <= CFG.newdays) {
|
||||
NewFiles++;
|
||||
NewAreaFiles++;
|
||||
NewAreaBytes += file.Size;
|
||||
NewAreaBytes += fdb.Size;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -392,28 +393,27 @@ void Masterlist()
|
||||
BotBox(fp, TRUE);
|
||||
BotBox(np, NewAreaFiles);
|
||||
|
||||
fseek(pFile, 0, SEEK_SET);
|
||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||
if((!file.Deleted) && (!file.Missing)) {
|
||||
New = (((t_start - file.UploadDate) / 84400) <= CFG.newdays);
|
||||
fseek(pFile, fdbhdr.hdrsize, SEEK_SET);
|
||||
while (fread(&fdb, fdbhdr.recsize, 1, pFile) == 1) {
|
||||
if (!fdb.Deleted) {
|
||||
New = (((t_start - fdb.UploadDate) / 84400) <= CFG.newdays);
|
||||
sprintf(temp, "%-12s%10lu K %s [%04ld] Uploader: %s",
|
||||
file.Name, (long)(file.Size / 1024), StrDateDMY(file.UploadDate),
|
||||
file.TimesDL + file.TimesFTP + file.TimesReq,
|
||||
strlen(file.Uploader)?file.Uploader:"");
|
||||
fdb.Name, (long)(fdb.Size / 1024), StrDateDMY(fdb.UploadDate), fdb.TimesDL,
|
||||
strlen(fdb.Uploader)?fdb.Uploader:"");
|
||||
fprintf(fp, "%s\r\n", temp);
|
||||
if (New)
|
||||
fprintf(np, "%s\r\n", temp);
|
||||
|
||||
for (z = 0; z <= 25; z++) {
|
||||
if (strlen(file.Desc[z])) {
|
||||
if ((file.Desc[z][0] == '@') && (file.Desc[z][1] == 'X')) {
|
||||
fprintf(fp, " %s\r\n",file.Desc[z]+4);
|
||||
if (strlen(fdb.Desc[z])) {
|
||||
if ((fdb.Desc[z][0] == '@') && (fdb.Desc[z][1] == 'X')) {
|
||||
fprintf(fp, " %s\r\n",fdb.Desc[z]+4);
|
||||
if (New)
|
||||
fprintf(np, " %s\r\n",file.Desc[z]+4);
|
||||
fprintf(np, " %s\r\n",fdb.Desc[z]+4);
|
||||
} else {
|
||||
fprintf(fp, " %s\r\n",file.Desc[z]);
|
||||
fprintf(fp, " %s\r\n",fdb.Desc[z]);
|
||||
if (New)
|
||||
fprintf(np, " %s\r\n",file.Desc[z]);
|
||||
fprintf(np, " %s\r\n",fdb.Desc[z]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -68,7 +68,6 @@ int main(int argc, char **argv)
|
||||
printf("From system %s\n", rep.From);
|
||||
printf("Replace %s\n", rep.Replace);
|
||||
printf("Magic %s\n", rep.Magic);
|
||||
printf("Cost %ld\n", rep.Cost);
|
||||
printf("Announce ");
|
||||
if (rep.Announce)
|
||||
printf("yes\n");
|
||||
|
@ -232,9 +232,8 @@ void FileScreen(void)
|
||||
mvprintw(12,59, "21. DL days");
|
||||
mvprintw(13,59, "22. FD days");
|
||||
mvprintw(14,59, "23. Move area");
|
||||
mvprintw(15,59, "24. Cost");
|
||||
mvprintw(16,59, "25. Archiver");
|
||||
mvprintw(17,59, "26. Upload");
|
||||
mvprintw(15,59, "24. Archiver");
|
||||
mvprintw(16,59, "25. Upload");
|
||||
}
|
||||
|
||||
|
||||
@ -303,11 +302,10 @@ int EditFileRec(int Area)
|
||||
show_int(12,73, area.DLdays);
|
||||
show_int(13,73, area.FDdays);
|
||||
show_int(14,73, area.MoveArea);
|
||||
show_int(15,73, area.Cost);
|
||||
show_str(16,73, 5, area.Archiver);
|
||||
show_int(17,73, area.Upload);
|
||||
show_str(15,73, 5, area.Archiver);
|
||||
show_int(16,73, area.Upload);
|
||||
|
||||
switch(select_menu(26)) {
|
||||
switch(select_menu(25)) {
|
||||
case 0: crc1 = 0xffffffff;
|
||||
crc1 = upd_crc32((char *)&area, crc1, areahdr.recsize);
|
||||
if (crc != crc1) {
|
||||
@ -366,14 +364,15 @@ int EditFileRec(int Area)
|
||||
case 6: E_STR( 11,16,64, area.FilesBbs, "The path and name of \"files.bbs\" if area is on CDROM")
|
||||
case 7: Available = edit_bool(12, 16, area.Available, (char *)"Is this area ^available^");
|
||||
temp = calloc(PATH_MAX, sizeof(char));
|
||||
sprintf(temp, "%s/fdb/fdb%d.data", getenv("MBSE_ROOT"), Area);
|
||||
sprintf(temp, "%s/fdb/file%d.data", getenv("MBSE_ROOT"), Area);
|
||||
if (area.Available && !Available) {
|
||||
/*
|
||||
* Attempt to disable this area, but check first.
|
||||
*/
|
||||
if ((fp = fopen(temp, "r"))) {
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, fp);
|
||||
fseek(fp, 0, SEEK_END);
|
||||
files = ftell(fp) / sizeof(file);
|
||||
files = ((ftell(fp) - fdbhdr.hdrsize) / fdbhdr.recsize);
|
||||
if (files) {
|
||||
errmsg("There are stil %d files in this area", files);
|
||||
Available = TRUE;
|
||||
@ -444,11 +443,10 @@ int EditFileRec(int Area)
|
||||
case 21:E_INT( 12,73, area.DLdays, "The not ^downloaded days^ to move/kill files")
|
||||
case 22:E_INT( 13,73, area.FDdays, "The ^file age^ in days to move/kill files")
|
||||
case 23:E_INT( 14,73, area.MoveArea, "The ^area to move^ files to, 0 is kill")
|
||||
case 24:E_INT( 15,73, area.Cost, "The ^cost^ to download a file")
|
||||
case 25:strcpy(area.Archiver, PickArchive((char *)"8.4"));
|
||||
case 24:strcpy(area.Archiver, PickArchive((char *)"8.4"));
|
||||
FileScreen();
|
||||
break;
|
||||
case 26:E_INT( 17,73, area.Upload, "The ^upload^ area, 0 if upload in this area")
|
||||
case 25:E_INT( 16,73, area.Upload, "The ^upload^ area, 0 if upload in this area")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
253
mbsetup/m_fdb.c
253
mbsetup/m_fdb.c
@ -44,71 +44,61 @@ void EditFile(void);
|
||||
|
||||
void FHeader(void)
|
||||
{
|
||||
clr_index();
|
||||
set_color(WHITE, BLACK);
|
||||
mvprintw( 5, 2, "14. EDIT FILE");
|
||||
set_color(CYAN, BLACK);
|
||||
mvprintw( 7, 2, " FileName");
|
||||
mvprintw( 8, 2, " Long fn");
|
||||
mvprintw( 9, 2, " FileSize");
|
||||
mvprintw(10, 2, " FileDate");
|
||||
mvprintw(11, 2, " Last DL.");
|
||||
mvprintw(12, 2, " Upl.Date");
|
||||
mvprintw(13, 2, "1. Uploader");
|
||||
mvprintw(14, 2, "2. Times DL");
|
||||
mvprintw(15, 2, "3. Times FTP");
|
||||
mvprintw(16, 2, "4. Times Req");
|
||||
mvprintw(17, 2, "5. Password");
|
||||
mvprintw(18, 2, "6. Cost");
|
||||
clr_index();
|
||||
set_color(WHITE, BLACK);
|
||||
mvprintw( 5, 2, "14. EDIT FILE");
|
||||
set_color(CYAN, BLACK);
|
||||
mvprintw( 7, 2, " FileName");
|
||||
mvprintw( 8, 2, " Long fn");
|
||||
mvprintw( 9, 2, " FileSize");
|
||||
mvprintw(10, 2, " FileDate");
|
||||
mvprintw(11, 2, " Last DL.");
|
||||
mvprintw(12, 2, " Upl.Date");
|
||||
mvprintw(13, 2, " TIC area");
|
||||
mvprintw(14, 2, " Magic");
|
||||
mvprintw(15, 2, "1. Uploader");
|
||||
mvprintw(16, 2, "2. Times DL");
|
||||
mvprintw(17, 2, "3. Password");
|
||||
|
||||
mvprintw(14,42, "7. Free");
|
||||
mvprintw(15,42, "8. Deleted");
|
||||
mvprintw(16,42, " Missing");
|
||||
mvprintw(17,42, "9. No Kill");
|
||||
mvprintw(18,42, "10. Announced");
|
||||
mvprintw(15,61, "4. Deleted");
|
||||
mvprintw(16,61, "5. No Kill");
|
||||
mvprintw(17,61, "6. Announced");
|
||||
}
|
||||
|
||||
|
||||
|
||||
void EditFile()
|
||||
{
|
||||
FHeader();
|
||||
FHeader();
|
||||
|
||||
for (;;) {
|
||||
set_color(WHITE, BLACK);
|
||||
show_str( 7,16,12, file.Name);
|
||||
show_str( 8,16,64, file.LName);
|
||||
show_int( 9,16, file.Size);
|
||||
mvprintw(10,16, (char *)"%s %s", StrDateDMY(file.FileDate), StrTimeHM(file.FileDate));
|
||||
mvprintw(11,16, (char *)"%s %s", StrDateDMY(file.LastDL), StrTimeHM(file.LastDL));
|
||||
mvprintw(12,16, (char *)"%s %s", StrDateDMY(file.UploadDate), StrTimeHM(file.UploadDate));
|
||||
show_str(13,16,36, file.Uploader);
|
||||
show_int(14,16, file.TimesDL);
|
||||
show_int(15,16, file.TimesFTP);
|
||||
show_int(16,16, file.TimesReq);
|
||||
show_str(17,16,15, file.Password);
|
||||
show_int(18,16, file.Cost);
|
||||
for (;;) {
|
||||
set_color(WHITE, BLACK);
|
||||
show_str( 7,16,12, fdb.Name);
|
||||
show_str( 8,16,64, fdb.LName);
|
||||
show_int( 9,16, fdb.Size);
|
||||
mvprintw(10,16, (char *)"%s %s", StrDateDMY(fdb.FileDate), StrTimeHM(fdb.FileDate));
|
||||
mvprintw(11,16, (char *)"%s %s", StrDateDMY(fdb.LastDL), StrTimeHM(fdb.LastDL));
|
||||
mvprintw(12,16, (char *)"%s %s", StrDateDMY(fdb.UploadDate), StrTimeHM(fdb.UploadDate));
|
||||
show_str(13,16,20, fdb.TicArea);
|
||||
show_str(14,16,20, fdb.Magic);
|
||||
show_str(15,16,36, fdb.Uploader);
|
||||
show_int(16,16, fdb.TimesDL);
|
||||
show_str(17,16,15, fdb.Password);
|
||||
|
||||
show_bool(14,56, file.Free);
|
||||
show_bool(15,56, file.Deleted);
|
||||
show_bool(16,56, file.Missing);
|
||||
show_bool(17,56, file.NoKill);
|
||||
show_bool(18,56, file.Announced);
|
||||
show_bool(15,75, fdb.Deleted);
|
||||
show_bool(16,75, fdb.NoKill);
|
||||
show_bool(17,75, fdb.Announced);
|
||||
|
||||
switch(select_menu(10)) {
|
||||
case 0: return;
|
||||
case 1: E_STR( 13,16,35, file.Uploader, "The ^uploader^ of this file")
|
||||
case 2: E_INT( 14,16, file.TimesDL, "The number of times file is sent with ^download^")
|
||||
case 3: E_INT( 15,16, file.TimesFTP, "The number of times file is sent with ^FTP or WWW^")
|
||||
case 4: E_INT( 16,16, file.TimesReq, "The number of times file is sent with ^filerequest^")
|
||||
case 5: E_STR( 17,16,15, file.Password, "The ^password^ to protect this file with")
|
||||
case 6: E_INT( 18,16, file.Cost, "The ^cost^ of this file")
|
||||
case 7: E_BOOL(14,56, file.Free, "If this file is a ^free^ download")
|
||||
case 8: E_BOOL(15,56, file.Deleted, "Should this this file be ^deleted^")
|
||||
case 9: E_BOOL(17,56, file.NoKill, "File can't be ^killed^ automatic")
|
||||
case 10:E_BOOL(18,56, file.Announced, "File is ^announced^ as new file")
|
||||
}
|
||||
switch(select_menu(6)) {
|
||||
case 0: return;
|
||||
case 1: E_STR( 15,16,35, fdb.Uploader, "The ^uploader^ of this file")
|
||||
case 2: E_INT( 16,16, fdb.TimesDL, "The number of times file is sent with ^download^")
|
||||
case 3: E_STR( 17,16,15, fdb.Password, "The ^password^ to protect this file with")
|
||||
case 4: E_BOOL(15,75, fdb.Deleted, "Should this this file be ^deleted^")
|
||||
case 5: E_BOOL(16,75, fdb.NoKill, "File can't be ^killed^ automatic")
|
||||
case 6: E_BOOL(17,75, fdb.Announced, "File is ^announced^ as new file")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -126,7 +116,7 @@ void E_F(long areanr)
|
||||
|
||||
clr_index();
|
||||
|
||||
sprintf(temp, "%s/fdb/fdb%ld.data", getenv("MBSE_ROOT"), areanr);
|
||||
sprintf(temp, "%s/fdb/file%ld.data", getenv("MBSE_ROOT"), areanr);
|
||||
if ((fil = fopen(temp, "r+")) == NULL) {
|
||||
working(2, 0, 0);
|
||||
return;
|
||||
@ -134,8 +124,9 @@ void E_F(long areanr)
|
||||
if (! check_free())
|
||||
return;
|
||||
|
||||
fread(&fdbhdr, sizeof(fdbhdr), 1, fil);
|
||||
fseek(fil, 0, SEEK_END);
|
||||
records = ftell(fil) / sizeof(file);
|
||||
records = ((ftell(fil) - fdbhdr.hdrsize) / fdbhdr.recsize);
|
||||
o = 0;
|
||||
|
||||
for (;;) {
|
||||
@ -154,41 +145,41 @@ void E_F(long areanr)
|
||||
|
||||
for (i = 1; i <= 10; i++) {
|
||||
if ((o + i) <= records) {
|
||||
offset = ((o + i) - 1) * sizeof(file);
|
||||
offset = (((o + i) - 1) * fdbhdr.recsize) + fdbhdr.hdrsize;
|
||||
fseek(fil, offset, SEEK_SET);
|
||||
fread(&file, sizeof(file), 1, fil);
|
||||
fread(&fdb, fdbhdr.recsize, 1, fil);
|
||||
|
||||
set_color(WHITE, BLACK);
|
||||
mvprintw(y, 1, (char *)"%4d.", o + i);
|
||||
|
||||
sprintf(temp, "%s/%s", area.Path, file.LName);
|
||||
sprintf(temp, "%s/%s", area.Path, fdb.LName);
|
||||
Ondisk = ((stat(temp, &statfile)) != -1);
|
||||
|
||||
if (file.Deleted)
|
||||
if (fdb.Deleted)
|
||||
set_color(LIGHTBLUE, BLACK);
|
||||
else if (Ondisk)
|
||||
set_color(CYAN, BLACK);
|
||||
else
|
||||
set_color(LIGHTRED, BLACK);
|
||||
mvprintw(y, 8, (char *)"%-14s", file.Name);
|
||||
mvprintw(y, 8, (char *)"%-14s", fdb.Name);
|
||||
|
||||
if (Ondisk) {
|
||||
if (file.Size == statfile.st_size)
|
||||
if (fdb.Size == statfile.st_size)
|
||||
set_color(CYAN, BLACK);
|
||||
else
|
||||
set_color(LIGHTRED, BLACK);
|
||||
mvprintw(y,23, (char *)"%8ld", file.Size);
|
||||
mvprintw(y,23, (char *)"%8ld", fdb.Size);
|
||||
|
||||
if (file.FileDate == statfile.st_mtime)
|
||||
if (fdb.FileDate == statfile.st_mtime)
|
||||
set_color(CYAN, BLACK);
|
||||
else
|
||||
set_color(LIGHTRED, BLACK);
|
||||
Time = file.FileDate;
|
||||
Time = fdb.FileDate;
|
||||
mvprintw(y,32, (char *)"%s %s", StrDateDMY(Time), StrTimeHM(Time));
|
||||
}
|
||||
|
||||
set_color(CYAN, BLACK);
|
||||
sprintf(temp, "%s", file.Desc[0]);
|
||||
sprintf(temp, "%s", fdb.Desc[0]);
|
||||
temp[30] = '\0';
|
||||
mvprintw(y,49, (char *)"%s", temp);
|
||||
y++;
|
||||
@ -234,26 +225,23 @@ void E_F(long areanr)
|
||||
|
||||
if ((atoi(menu) > 0) && (atoi(menu) <= records)) {
|
||||
working(1, 0, 0);
|
||||
offset = (atoi(menu) - 1) * sizeof(file);
|
||||
offset = ((atoi(menu) - 1) * fdbhdr.recsize) + fdbhdr.hdrsize;
|
||||
fseek(fil, offset, SEEK_SET);
|
||||
fread(&file, sizeof(file), 1, fil);
|
||||
fread(&fdb, fdbhdr.recsize, 1, fil);
|
||||
crc = 0xffffffff;
|
||||
crc = upd_crc32((char *)&file, crc, sizeof(file));
|
||||
|
||||
sprintf(temp, "%s/%s", area.Path, file.LName);
|
||||
if (stat(temp, &statfile) == -1)
|
||||
file.Missing = TRUE;
|
||||
crc = upd_crc32((char *)&fdb, crc, fdbhdr.recsize);
|
||||
|
||||
sprintf(temp, "%s/%s", area.Path, fdb.LName);
|
||||
EditFile();
|
||||
|
||||
crc1 = 0xffffffff;
|
||||
crc1 = upd_crc32((char *)&file, crc1, sizeof(file));
|
||||
crc1 = upd_crc32((char *)&fdb, crc1, fdbhdr.recsize);
|
||||
|
||||
if (crc != crc1) {
|
||||
if (yes_no((char *)"Record is changed, save") == 1) {
|
||||
working(1, 0, 0);
|
||||
fseek(fil, offset, SEEK_SET);
|
||||
fwrite(&file, sizeof(file), 1, fil);
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, fil);
|
||||
working(6, 0, 0);
|
||||
}
|
||||
}
|
||||
@ -354,3 +342,118 @@ void EditFDB()
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Init files database. Since version 0.51.2 the format is changed.
|
||||
* Check this and automagic upgrade the database.
|
||||
*/
|
||||
void InitFDB(void)
|
||||
{
|
||||
int records, i;
|
||||
long Area = 0;
|
||||
char *temp, Magic[21];
|
||||
FILE *fp1, *fp2, *fil, *ft, *fp;
|
||||
DIR *dp;
|
||||
struct dirent *de;
|
||||
struct OldFILERecord old;
|
||||
struct stat sb;
|
||||
|
||||
records = CountFilearea();
|
||||
if (records <= 0)
|
||||
return;
|
||||
|
||||
temp = calloc(PATH_MAX, sizeof(char));
|
||||
sprintf(temp, "%s/etc/fareas.data", getenv("MBSE_ROOT"));
|
||||
if ((fil = fopen(temp, "r")) != NULL) {
|
||||
fread(&areahdr, sizeof(areahdr), 1, fil);
|
||||
|
||||
while (fread(&area, areahdr.recsize, 1, fil)) {
|
||||
Area++;
|
||||
if (area.Available) {
|
||||
sprintf(temp, "%s/fdb/fdb%ld.data", getenv("MBSE_ROOT"), Area);
|
||||
if ((fp1 = fopen(temp, "r")) != NULL) {
|
||||
/*
|
||||
* Old area available, upgrade.
|
||||
*/
|
||||
sprintf(temp, "%s/fdb/file%ld.data", getenv("MBSE_ROOT"), Area);
|
||||
if ((fp2 = fopen(temp, "w+")) == NULL) {
|
||||
WriteError("$Can't create %s", temp);
|
||||
} else {
|
||||
fdbhdr.hdrsize = sizeof(fdbhdr);
|
||||
fdbhdr.recsize = sizeof(fdb);
|
||||
fwrite(&fdbhdr, sizeof(fdbhdr), 1, fp2);
|
||||
|
||||
while (fread(&old, sizeof(old), 1, fp1)) {
|
||||
Nopper();
|
||||
memset(&fdb, 0, fdbhdr.recsize);
|
||||
strncpy(fdb.Name, old.Name, sizeof(fdb.Name) -1);
|
||||
strncpy(fdb.LName, old.LName, sizeof(fdb.LName) -1);
|
||||
sprintf(temp, "%s/etc/tic.data", getenv("MBSE_ROOT"));
|
||||
if ((ft = fopen(temp, "r")) != NULL) {
|
||||
fread(&tichdr, sizeof(tichdr), 1, ft);
|
||||
while (fread(&tic, tichdr.recsize, 1, ft)) {
|
||||
if (StringCRC32(tic.Name) == old.TicAreaCRC) {
|
||||
strncpy(fdb.TicArea, tic.Name, sizeof(fdb.TicArea) -1);
|
||||
break;
|
||||
}
|
||||
fseek(ft, tichdr.syssize, SEEK_CUR);
|
||||
}
|
||||
fclose(ft);
|
||||
}
|
||||
fdb.Size = old.Size;
|
||||
fdb.Crc32 = old.Crc32;
|
||||
strncpy(fdb.Uploader, old.Uploader, sizeof(fdb.Uploader) -1);
|
||||
fdb.UploadDate = old.UploadDate;
|
||||
fdb.FileDate = old.FileDate;
|
||||
fdb.LastDL = old.LastDL;
|
||||
fdb.TimesDL = old.TimesDL + old.TimesFTP + old.TimesReq;
|
||||
strncpy(fdb.Password, old.Password, sizeof(fdb.Password) -1);
|
||||
for (i = 0; i < 25; i++)
|
||||
strncpy(fdb.Desc[i], old.Desc[i], 48);
|
||||
|
||||
/*
|
||||
* Search the magic directory to see if this file is a magic file.
|
||||
*/
|
||||
sprintf(temp, "%s/magic", getenv("MBSE_ROOT"));
|
||||
if ((dp = opendir(temp)) != NULL) {
|
||||
while ((de = readdir(dp))) {
|
||||
if (de->d_name[0] != '.') {
|
||||
sprintf(temp, "%s/magic/%s", getenv("MBSE_ROOT"), de->d_name);
|
||||
/*
|
||||
* Only regular files without execute permission are magic requests.
|
||||
*/
|
||||
if ((lstat(temp, &sb) != -1) && (S_ISREG(sb.st_mode)) && (! (sb.st_mode & S_IXUSR))) {
|
||||
if ((fp = fopen(temp, "r"))) {
|
||||
fgets(Magic, sizeof(Magic) -1, fp);
|
||||
Striplf(Magic);
|
||||
if ((strcasecmp(Magic, fdb.Name) == 0) || (strcasecmp(Magic, fdb.LName) == 0)) {
|
||||
strncpy(fdb.Magic, de->d_name, sizeof(fdb.Magic) -1);
|
||||
}
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir(dp);
|
||||
}
|
||||
fdb.Deleted = old.Deleted;
|
||||
fdb.NoKill = old.NoKill;
|
||||
fdb.Announced = old.Announced;
|
||||
fdb.Double = old.Double;
|
||||
fwrite(&fdb, fdbhdr.recsize, 1, fp2);
|
||||
}
|
||||
fclose(fp2);
|
||||
Syslog('+', "Upgraded file area database %d", Area);
|
||||
}
|
||||
fclose(fp1);
|
||||
sprintf(temp, "%s/fdb/fdb%ld.data", getenv("MBSE_ROOT"), Area);
|
||||
unlink(temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
fclose(fil);
|
||||
}
|
||||
free(temp);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,7 +1,10 @@
|
||||
#ifndef _M_FDB_H
|
||||
#define _M_FDB_H
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
void EditFDB(void);
|
||||
void InitFDB(void);
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -219,7 +219,6 @@ int AppendFGroup(void)
|
||||
if ((fil = fopen(ffile, "a")) != NULL) {
|
||||
memset(&fgroup, 0, sizeof(fgroup));
|
||||
fgroup.StartDate = time(NULL);
|
||||
fgroup.DivideCost = TRUE;
|
||||
fgroup.FileGate = TRUE;
|
||||
fgroup.Secure = TRUE;
|
||||
fgroup.VirScan = TRUE;
|
||||
@ -280,28 +279,24 @@ void FgScreen(void)
|
||||
mvprintw(18, 2, "13. Deleted");
|
||||
mvprintw(19, 2, "14. Start at");
|
||||
|
||||
mvprintw(11,32, "15. Unit Cost");
|
||||
mvprintw(12,32, "16. Unit Size");
|
||||
mvprintw(13,32, "17. Add Prom.");
|
||||
mvprintw(14,32, "18. Divide");
|
||||
mvprintw(15,32, "19. Auto chng");
|
||||
mvprintw(16,32, "20. User chng");
|
||||
mvprintw(17,32, "21. Replace");
|
||||
mvprintw(18,32, "22. Dupecheck");
|
||||
mvprintw(19,32, "23. Secure");
|
||||
mvprintw(12,32, "15. Auto chng");
|
||||
mvprintw(13,32, "16. User chng");
|
||||
mvprintw(14,32, "17. Replace");
|
||||
mvprintw(15,32, "18. Dupecheck");
|
||||
mvprintw(16,32, "19. Secure");
|
||||
mvprintw(17,32, "20. Touch");
|
||||
mvprintw(18,32, "21. Virscan");
|
||||
mvprintw(19,32, "22. Announce");
|
||||
|
||||
mvprintw( 9,56, "24. Touch");
|
||||
mvprintw(10,56, "25. Virscan");
|
||||
mvprintw(11,56, "26. Announce");
|
||||
mvprintw(12,56, "27. Upd magic");
|
||||
mvprintw(13,56, "28. File ID");
|
||||
mvprintw(14,56, "29. Conv. all");
|
||||
mvprintw(15,56, "30. Send orig");
|
||||
mvprintw(16,56, "31. DL sec");
|
||||
mvprintw(17,56, "32. UP sec");
|
||||
mvprintw(18,56, "33. LT sec");
|
||||
mvprintw(19,56, "34. Upl. area");
|
||||
mvprintw(20,56, "35. Link sec");
|
||||
mvprintw(11,56, "23. Upd magic");
|
||||
mvprintw(12,56, "24. File ID");
|
||||
mvprintw(13,56, "25. Conv. all");
|
||||
mvprintw(14,56, "26. Send orig");
|
||||
mvprintw(15,56, "27. DL sec");
|
||||
mvprintw(16,56, "28. UP sec");
|
||||
mvprintw(17,56, "29. LT sec");
|
||||
mvprintw(18,56, "30. Upl. area");
|
||||
mvprintw(19,56, "31. Link sec");
|
||||
}
|
||||
|
||||
|
||||
@ -356,29 +351,25 @@ int EditFGrpRec(int Area)
|
||||
show_bool(18,16, fgroup.Deleted);
|
||||
show_int( 19,16, fgroup.StartArea);
|
||||
|
||||
show_int( 11,46, fgroup.UnitCost);
|
||||
show_int( 12,46, fgroup.UnitSize);
|
||||
show_int( 13,46, fgroup.AddProm);
|
||||
show_bool(14,46, fgroup.DivideCost);
|
||||
show_bool(15,46, fgroup.AutoChange);
|
||||
show_bool(16,46, fgroup.UserChange);
|
||||
show_bool(17,46, fgroup.Replace);
|
||||
show_bool(18,46, fgroup.DupCheck);
|
||||
show_bool(19,46, fgroup.Secure);
|
||||
show_bool(12,46, fgroup.AutoChange);
|
||||
show_bool(13,46, fgroup.UserChange);
|
||||
show_bool(14,46, fgroup.Replace);
|
||||
show_bool(15,46, fgroup.DupCheck);
|
||||
show_bool(16,46, fgroup.Secure);
|
||||
show_bool(17,46, fgroup.Touch);
|
||||
show_bool(18,46, fgroup.VirScan);
|
||||
show_bool(19,46, fgroup.Announce);
|
||||
|
||||
show_bool( 9,70, fgroup.Touch);
|
||||
show_bool(10,70, fgroup.VirScan);
|
||||
show_bool(11,70, fgroup.Announce);
|
||||
show_bool(12,70, fgroup.UpdMagic);
|
||||
show_bool(13,70, fgroup.FileId);
|
||||
show_bool(14,70, fgroup.ConvertAll);
|
||||
show_bool(15,70, fgroup.SendOrg);
|
||||
show_int( 16,70, fgroup.DLSec.level);
|
||||
show_int( 17,70, fgroup.UPSec.level);
|
||||
show_int( 18,70, fgroup.LTSec.level);
|
||||
show_int( 19,70, fgroup.Upload);
|
||||
show_bool(11,70, fgroup.UpdMagic);
|
||||
show_bool(12,70, fgroup.FileId);
|
||||
show_bool(13,70, fgroup.ConvertAll);
|
||||
show_bool(14,70, fgroup.SendOrg);
|
||||
show_int( 15,70, fgroup.DLSec.level);
|
||||
show_int( 16,70, fgroup.UPSec.level);
|
||||
show_int( 17,70, fgroup.LTSec.level);
|
||||
show_int( 18,70, fgroup.Upload);
|
||||
|
||||
j = select_menu(35);
|
||||
j = select_menu(31);
|
||||
switch(j) {
|
||||
case 0: if (!fgroup.StartArea && strlen(fgroup.AreaFile)) {
|
||||
errmsg("Areas file defined but no BBS start area");
|
||||
@ -450,38 +441,34 @@ int EditFGrpRec(int Area)
|
||||
E_BOOL(18,16, fgroup.Deleted, "Is this file group ^Deleted^")
|
||||
case 14:E_INT( 19,16, fgroup.StartArea, "The ^start area^ to create new BBS areas")
|
||||
|
||||
case 15:E_INT( 11,46, fgroup.UnitCost, "The ^cost per size unit^ files received in this tic group")
|
||||
case 16:E_INT( 12,46, fgroup.UnitSize, "The ^unit size^ in KBytes, 0 means cost per file in this tic group")
|
||||
case 17:E_INT( 13,46, fgroup.AddProm, "The ^Promillage^ to add or substract of the filecost")
|
||||
case 18:E_BOOL(14,46, fgroup.DivideCost, "^Divide^ the cost over all downlinks or charge each link full cost")
|
||||
case 19:E_BOOL(15,46, fgroup.AutoChange, "^Automatic change areas^ when a new arealist is received")
|
||||
case 20:tmp = edit_bool(16,46, fgroup.UserChange, (char *)"Create new areas when ^users^ request new tic areas");
|
||||
case 15:E_BOOL(12,46, fgroup.AutoChange, "^Automatic change areas^ when a new arealist is received")
|
||||
case 16:tmp = edit_bool(13,46, fgroup.UserChange, (char *)"Create new areas when ^users^ request new tic areas");
|
||||
if (tmp && !fgroup.UpLink.zone)
|
||||
errmsg("It looks like you are at the toplevel, no Uplink defined");
|
||||
else
|
||||
fgroup.UserChange = tmp;
|
||||
break;
|
||||
case 21:E_BOOL(17,46, fgroup.Replace, "Set ^Replace^ in new created tic areas")
|
||||
case 22:E_BOOL(18,46, fgroup.DupCheck, "Set ^Dupe check^ in new created tic areas")
|
||||
case 23:E_BOOL(19,46, fgroup.Secure, "Set ^Secure^ tic processing in new created tic areas")
|
||||
case 17:E_BOOL(14,46, fgroup.Replace, "Set ^Replace^ in new created tic areas")
|
||||
case 18:E_BOOL(15,46, fgroup.DupCheck, "Set ^Dupe check^ in new created tic areas")
|
||||
case 19:E_BOOL(16,46, fgroup.Secure, "Set ^Secure^ tic processing in new created tic areas")
|
||||
case 20:E_BOOL(17,46, fgroup.Touch, "Set ^Touch filedate^ in new created tic areas")
|
||||
case 21:E_BOOL(18,46, fgroup.VirScan, "Set ^Virus scanner^ in new created tic areas")
|
||||
case 22:E_BOOL(19,46, fgroup.Announce, "Set ^Announce files^ in new created tic areas")
|
||||
|
||||
case 24:E_BOOL( 9,70, fgroup.Touch, "Set ^Touch filedate^ in new created tic areas")
|
||||
case 25:E_BOOL(10,70, fgroup.VirScan, "Set ^Virus scanner^ in new created tic areas")
|
||||
case 26:E_BOOL(11,70, fgroup.Announce, "Set ^Announce files^ in new created tic areas")
|
||||
case 27:E_BOOL(12,70, fgroup.UpdMagic, "Set ^Update magic^ in new created tic areas")
|
||||
case 28:E_BOOL(13,70, fgroup.FileId, "Set ^FILE_ID.DIZ extract^ in new created tic areas")
|
||||
case 29:tmp = edit_bool(14,70, fgroup.ConvertAll, (char *)"Set ^Convert All^ setting in new created tic areas");
|
||||
case 23:E_BOOL(11,70, fgroup.UpdMagic, "Set ^Update magic^ in new created tic areas")
|
||||
case 24:E_BOOL(12,70, fgroup.FileId, "Set ^FILE_ID.DIZ extract^ in new created tic areas")
|
||||
case 25:tmp = edit_bool(13,70, fgroup.ConvertAll, (char *)"Set ^Convert All^ setting in new created tic areas");
|
||||
if (tmp && !fgroup.ConvertAll && (strlen(fgroup.Convert) == 0))
|
||||
errmsg("No archiver configured to convert to, edit 9 first");
|
||||
else
|
||||
fgroup.ConvertAll = tmp;
|
||||
break;
|
||||
case 30:E_BOOL(15,70, fgroup.SendOrg, "Set ^Send original^ setting in new created tic areas")
|
||||
case 31:E_SEC( 16,70, fgroup.DLSec, "10.1.31 FILE GROUP DOWNLOAD SECURITY", FgScreen)
|
||||
case 32:E_SEC( 17,70, fgroup.UPSec, "10.1.32 FILE GROUP UPLOAD SECURITY", FgScreen)
|
||||
case 33:E_SEC( 18,70, fgroup.LTSec, "10.1.33 FILE GROUP LIST SECURITY", FgScreen)
|
||||
case 34:E_INT( 19,70, fgroup.Upload, "Set the default ^Upload area^ in new created file areas")
|
||||
case 35:fgroup.LinkSec = edit_asec(fgroup.LinkSec, (char *)"10.1.35 DEFAULT NEW TIC AREAS SECURITY");
|
||||
case 26:E_BOOL(14,70, fgroup.SendOrg, "Set ^Send original^ setting in new created tic areas")
|
||||
case 27:E_SEC( 15,70, fgroup.DLSec, "10.1.27 FILE GROUP DOWNLOAD SECURITY", FgScreen)
|
||||
case 28:E_SEC( 16,70, fgroup.UPSec, "10.1.28 FILE GROUP UPLOAD SECURITY", FgScreen)
|
||||
case 29:E_SEC( 17,70, fgroup.LTSec, "10.1.29 FILE GROUP LIST SECURITY", FgScreen)
|
||||
case 30:E_INT( 18,70, fgroup.Upload, "Set the default ^Upload area^ in new created file areas")
|
||||
case 31:fgroup.LinkSec = edit_asec(fgroup.LinkSec, (char *)"10.1.31 DEFAULT NEW TIC AREAS SECURITY");
|
||||
FgScreen();
|
||||
break;
|
||||
}
|
||||
@ -726,10 +713,6 @@ int tic_group_doc(FILE *fp, FILE *toc, int page)
|
||||
fprintf(fp, " Use Aka %s\n", aka2str(fgroup.UseAka));
|
||||
fprintf(fp, " Uplink %s\n", aka2str(fgroup.UpLink));
|
||||
fprintf(fp, " Areas file %s\n", fgroup.AreaFile);
|
||||
fprintf(fp, " Divice cost %s\n", getboolean(fgroup.DivideCost));
|
||||
fprintf(fp, " Unit cost %ld\n", fgroup.UnitCost);
|
||||
fprintf(fp, " Unit size %ld\n", fgroup.UnitSize);
|
||||
fprintf(fp, " Add promille %ld\n", fgroup.AddProm);
|
||||
fprintf(fp, " Start area %ld\n", fgroup.StartArea);
|
||||
fprintf(fp, " Banner file %s\n", fgroup.Banner);
|
||||
fprintf(fp, " Def. archiver %s\n", fgroup.Convert);
|
||||
|
@ -440,15 +440,7 @@ void E_Files(void)
|
||||
mvprintw(14, 6, "8. Advanced TIC");
|
||||
mvprintw(15, 6, "9. Advanced SB");
|
||||
mvprintw(16, 6, "10. To line in TIC");
|
||||
|
||||
mvprintw( 7,46, "11. File forward");
|
||||
mvprintw( 8,46, "12. Billing (CSO)");
|
||||
mvprintw( 9,46, "13. Bill direct");
|
||||
mvprintw(10,46, "14. Credit");
|
||||
mvprintw(11,46, "15. Debit");
|
||||
mvprintw(12,46, "16. Add %");
|
||||
mvprintw(13,46, "17. Warn level");
|
||||
mvprintw(14,46, "18. Stop level");
|
||||
mvprintw(17, 6, "11. File forward");
|
||||
|
||||
for (;;) {
|
||||
set_color(WHITE, BLACK);
|
||||
@ -462,35 +454,21 @@ void E_Files(void)
|
||||
show_bool(14,26, nodes.AdvTic);
|
||||
show_bool(15,26, nodes.TIC_AdvSB);
|
||||
show_bool(16,26, nodes.TIC_To);
|
||||
show_bool( 7,66, nodes.FileFwd);
|
||||
show_bool( 8,66, nodes.Billing);
|
||||
show_bool( 9,66, nodes.BillDirect);
|
||||
show_int( 10,66, nodes.Credit);
|
||||
show_int( 11,66, nodes.Debet);
|
||||
show_int( 12,66, nodes.AddPerc);
|
||||
show_int( 13,66, nodes.WarnLevel);
|
||||
show_int( 14,66, nodes.StopLevel);
|
||||
show_bool(17,26, nodes.FileFwd);
|
||||
|
||||
switch(select_menu(18)) {
|
||||
case 0: return;
|
||||
case 1: E_STR( 7,26,15,nodes.Fpasswd, "The ^TIC^ files ^password^ for this node")
|
||||
case 2: E_STR( 8,26,15,nodes.Apasswd, "The filemanager ^password^ for this node")
|
||||
case 3: E_STR( 9,26,8, nodes.UplFmgrPgm, "The name of the uplink ^filemanager^ program")
|
||||
case 4: E_STR( 10,26,15,nodes.UplFmgrPass,"The uplink filemanager ^password^")
|
||||
case 5: E_BOOL(11,26, nodes.AddPlus, "Add ^+^ in uplink manager requests for new areas")
|
||||
case 6: E_BOOL(12,26, nodes.Message, "Send ^messages^ with files send to this node")
|
||||
case 7: E_BOOL(13,26, nodes.Tic, "Send ^TIC^ files to this node")
|
||||
case 8: E_BOOL(14,26, nodes.AdvTic, "Send ^advanced^ TIC files to this node")
|
||||
case 9: E_BOOL(15,26, nodes.TIC_AdvSB, "Send ^advanced Seen-By^ lines in ticfiles to this node")
|
||||
case 10:E_BOOL(16,26, nodes.TIC_To, "Send ^To^ line in ticfiles to this node")
|
||||
case 11:E_BOOL( 7,66, nodes.FileFwd, "^Forward TIC^ files for this node")
|
||||
case 12:E_BOOL( 8,66, nodes.Billing, "Send ^bills^ to this node, Costsharing is active")
|
||||
case 13:E_BOOL( 9,66, nodes.BillDirect, "Send bills ^direct^ after file processing")
|
||||
case 14:E_INT( 10,66, nodes.Credit, "The ^credit^ this node has for costsharing")
|
||||
case 15:E_INT( 11,66, nodes.Debet, "The ^debit^ in cents we have credit from this node")
|
||||
case 16:E_INT( 12,66, nodes.AddPerc, "The + or - ^promille^ factor for this node")
|
||||
case 17:E_INT( 13,66, nodes.WarnLevel, "Credit level in cents to ^Warn^ node for low credit")
|
||||
case 18:E_INT( 14,66, nodes.StopLevel, "Credit level in cents to ^Stop^ sending files")
|
||||
switch(select_menu(11)) {
|
||||
case 0: return;
|
||||
case 1: E_STR( 7,26,15,nodes.Fpasswd, "The ^TIC^ files ^password^ for this node")
|
||||
case 2: E_STR( 8,26,15,nodes.Apasswd, "The filemanager ^password^ for this node")
|
||||
case 3: E_STR( 9,26,8, nodes.UplFmgrPgm, "The name of the uplink ^filemanager^ program")
|
||||
case 4: E_STR( 10,26,15,nodes.UplFmgrPass,"The uplink filemanager ^password^")
|
||||
case 5: E_BOOL(11,26, nodes.AddPlus, "Add ^+^ in uplink manager requests for new areas")
|
||||
case 6: E_BOOL(12,26, nodes.Message, "Send ^messages^ with files send to this node")
|
||||
case 7: E_BOOL(13,26, nodes.Tic, "Send ^TIC^ files to this node")
|
||||
case 8: E_BOOL(14,26, nodes.AdvTic, "Send ^advanced^ TIC files to this node")
|
||||
case 9: E_BOOL(15,26, nodes.TIC_AdvSB, "Send ^advanced Seen-By^ lines in ticfiles to this node")
|
||||
case 10:E_BOOL(16,26, nodes.TIC_To, "Send ^To^ line in ticfiles to this node")
|
||||
case 11:E_BOOL(17,26, nodes.FileFwd, "^Forward TIC^ files for this node")
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1486,8 +1464,6 @@ int node_doc(FILE *fp, FILE *toc, int page)
|
||||
fprintf(fp, " Advanced TIC %s\n", getboolean(nodes.AdvTic));
|
||||
fprintf(fp, " Advanded SB %s", getboolean(nodes.TIC_AdvSB));
|
||||
fprintf(fp, " Sent To lines %s", getboolean(nodes.TIC_To));
|
||||
fprintf(fp, " Billing %s\n", getboolean(nodes.Billing));
|
||||
fprintf(fp, " Bill direct %s", getboolean(nodes.BillDirect));
|
||||
fprintf(fp, " Uplink add + %s\n", getboolean(nodes.AddPlus));
|
||||
fprintf(fp, " Security flags %s\n\n", getflag(nodes.Security.flags, nodes.Security.notflags));
|
||||
|
||||
@ -1525,11 +1501,6 @@ int node_doc(FILE *fp, FILE *toc, int page)
|
||||
fprintf(fp, " Total files %-8lu %-8lu %-8lu %-8lu\n", nodes.FilesSent.total, nodes.F_KbSent.total, nodes.FilesRcvd.total, nodes.F_KbSent.total);
|
||||
fprintf(fp, " Total mail %-8lu %-8lu\n\n", nodes.MailSent.total, nodes.MailRcvd.total);
|
||||
|
||||
if (nodes.Billing) {
|
||||
fprintf(fp, " Credit units %-8ld Warnlevel %ld\n", nodes.Credit, nodes.WarnLevel);
|
||||
fprintf(fp, " Debit units %-8ld Stoplevel %ld\n", nodes.Debet, nodes.StopLevel);
|
||||
fprintf(fp, " Add promille %ld\n\n", nodes.AddPerc);
|
||||
}
|
||||
fprintf(fp, " File groups:\n ");
|
||||
groups = nodeshdr.filegrp / sizeof(group);
|
||||
for (i = 0; i < groups; i++) {
|
||||
|
@ -384,6 +384,7 @@ void initdatabases(void)
|
||||
InitUsers();
|
||||
InitVirus();
|
||||
InitRoute();
|
||||
InitFDB();
|
||||
|
||||
if (!init) {
|
||||
clr_index();
|
||||
|
Reference in New Issue
Block a user