More long filename support added
This commit is contained in:
parent
cae45854ab
commit
cd7bf461e6
23
ChangeLog
23
ChangeLog
@ -4224,7 +4224,12 @@ v0.33.19 26-Oct-2001
|
|||||||
version, or change it by hand.
|
version, or change it by hand.
|
||||||
|
|
||||||
general:
|
general:
|
||||||
Made the Makefile system more simple.
|
Made the Makefile system more simple. The bbs programs now
|
||||||
|
don't run setuid anymore! This makes the system more secure
|
||||||
|
but you can't login with Fidonet style names anymore. You
|
||||||
|
can't start the bbs from telnet anymore! With a later release
|
||||||
|
this may change by adding a login wrapper, for now this is how
|
||||||
|
it works now. Take it or leave it.
|
||||||
|
|
||||||
lang:
|
lang:
|
||||||
Changed language prompts 6, 71, 429.
|
Changed language prompts 6, 71, 429.
|
||||||
@ -4276,7 +4281,7 @@ v0.33.19 26-Oct-2001
|
|||||||
login. Removed IEMSI support, this has no use anymore. New
|
login. Removed IEMSI support, this has no use anymore. New
|
||||||
users need to register with the mbnewuser program, mbsebbs is
|
users need to register with the mbnewuser program, mbsebbs is
|
||||||
only for registered users. This should fix all kinds of setuid
|
only for registered users. This should fix all kinds of setuid
|
||||||
issues with previous versions.
|
and security problems with previous versions.
|
||||||
QuickScan messages in netmail areas now only shows personal
|
QuickScan messages in netmail areas now only shows personal
|
||||||
messages.
|
messages.
|
||||||
The whoson list now uses mbtask to get the information.
|
The whoson list now uses mbtask to get the information.
|
||||||
@ -4284,6 +4289,13 @@ v0.33.19 26-Oct-2001
|
|||||||
with mode 0600.
|
with mode 0600.
|
||||||
A lot of code rewrites to make it more modular.
|
A lot of code rewrites to make it more modular.
|
||||||
The bbs datafiles that users create now have mode 0660.
|
The bbs datafiles that users create now have mode 0660.
|
||||||
|
The file taglists now work internally with long and short
|
||||||
|
filenames.
|
||||||
|
The file listings are displayed with the short filenames.
|
||||||
|
Download files are sent with short filenames.
|
||||||
|
File search is done on long and short filenames.
|
||||||
|
Uploaded files are accepted with long filenames, the short
|
||||||
|
name is created when the upload is processed.
|
||||||
|
|
||||||
mbnewusr:
|
mbnewusr:
|
||||||
New program, run by user bbs. This is only to register a new
|
New program, run by user bbs. This is only to register a new
|
||||||
@ -4316,14 +4328,17 @@ v0.33.19 26-Oct-2001
|
|||||||
the program for 10 minutes before aborting.
|
the program for 10 minutes before aborting.
|
||||||
Fixed the problem that the KillSent flag was set on processed
|
Fixed the problem that the KillSent flag was set on processed
|
||||||
netmail.
|
netmail.
|
||||||
|
The tic file import function now sorts and tests on long file-
|
||||||
|
names, with the new mangle function an DOS 8.3 filename is
|
||||||
|
also stored in the file database.
|
||||||
|
|
||||||
mbfile:
|
mbfile:
|
||||||
During check the file databases are reset to filemode 0660.
|
During check the file databases are reset to filemode 0660.
|
||||||
Implemented "mbfile adopt" function.
|
Implemented "mbfile adopt" function.
|
||||||
Started working on long filename support. The real name on
|
Started working on long filename support. The real name on
|
||||||
disk is the long filename, the database records also holds
|
disk is the long filename, the database records also holds
|
||||||
an uppercase 8.3 filename. In most cases this is just the
|
an uppercase mangled 8.3 filename. In most cases this is just
|
||||||
same name in upper and lowercase. Name mangling like Win$
|
the same name in upper and lowercase. Name mangling like Win$
|
||||||
is performed on the long filenames.
|
is performed on the long filenames.
|
||||||
Implemented "mbfile import" function, this imports complete
|
Implemented "mbfile import" function, this imports complete
|
||||||
areas from files.bbs information.
|
areas from files.bbs information.
|
||||||
|
@ -917,8 +917,8 @@ char *strcasestr(char *, char *);
|
|||||||
/*
|
/*
|
||||||
* mangle.c
|
* mangle.c
|
||||||
*/
|
*/
|
||||||
void mangle_name_83( char *);
|
void mangle_name_83( char *); /* Mangle name to 8.3 format */
|
||||||
int name_mangle(char *, int);
|
void name_mangle(char *); /* Mangle name or make uppercase */
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
211
lib/mangle.c
211
lib/mangle.c
@ -44,7 +44,6 @@ int str_checksum(const char *);
|
|||||||
char *safe_strcpy(char *, const char *, size_t);
|
char *safe_strcpy(char *, const char *, size_t);
|
||||||
static void init_chartest(void);
|
static void init_chartest(void);
|
||||||
static int is_reserved_msdos(char *);
|
static int is_reserved_msdos(char *);
|
||||||
static int is_illegal_name(char *);
|
|
||||||
int is_8_3(char *);
|
int is_8_3(char *);
|
||||||
|
|
||||||
|
|
||||||
@ -162,7 +161,7 @@ char *safe_strcpy(char *dest,const char *src, size_t maxlength)
|
|||||||
len = strlen(src);
|
len = strlen(src);
|
||||||
|
|
||||||
if (len > maxlength) {
|
if (len > maxlength) {
|
||||||
Syslog('f', "ERROR: string overflow by %d in safe_strcpy [%.50s]", (int)(len-maxlength), src);
|
WriteError("ERROR: string overflow by %d in safe_strcpy [%.50s]", (int)(len-maxlength), src);
|
||||||
len = maxlength;
|
len = maxlength;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -256,46 +255,6 @@ static int is_reserved_msdos( char *fname )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ************************************************************************** **
|
|
||||||
* Determine whether or not a given name contains illegal characters, even
|
|
||||||
* long names.
|
|
||||||
*
|
|
||||||
* Input: name - The name to be tested.
|
|
||||||
*
|
|
||||||
* Output: True if an illegal character was found in <name>, else False.
|
|
||||||
*
|
|
||||||
* Notes: This is used to test a name on the host system, long or short,
|
|
||||||
* for characters that would be illegal on most client systems,
|
|
||||||
* particularly DOS and Windows systems. Unix and AmigaOS, for
|
|
||||||
* example, allow a filenames which contain such oddities as
|
|
||||||
* quotes ("). If a name is found which does contain an illegal
|
|
||||||
* character, it is mangled even if it conforms to the 8.3
|
|
||||||
* format.
|
|
||||||
*
|
|
||||||
* ************************************************************************** **
|
|
||||||
*/
|
|
||||||
static int is_illegal_name(char *name)
|
|
||||||
{
|
|
||||||
unsigned char *s;
|
|
||||||
|
|
||||||
if (!name)
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
if (!ct_initialized)
|
|
||||||
init_chartest();
|
|
||||||
|
|
||||||
s = (unsigned char *)name;
|
|
||||||
while (*s) {
|
|
||||||
if (isillegal(*s))
|
|
||||||
return TRUE;
|
|
||||||
else
|
|
||||||
s++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ************************************************************************** **
|
/* ************************************************************************** **
|
||||||
* Return True if the name is a valid DOS name in 8.3 DOS format.
|
* Return True if the name is a valid DOS name in 8.3 DOS format.
|
||||||
@ -311,48 +270,45 @@ static int is_illegal_name(char *name)
|
|||||||
*/
|
*/
|
||||||
int is_8_3( char *fname)
|
int is_8_3( char *fname)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
int l;
|
int l, i;
|
||||||
char *p;
|
char *p;
|
||||||
char *dot_pos;
|
char *dot_pos;
|
||||||
char *slash_pos = strrchr( fname, '/' );
|
char *slash_pos = strrchr( fname, '/' );
|
||||||
|
|
||||||
/* If there is a directory path, skip it. */
|
/* If there is a directory path, skip it. */
|
||||||
if (slash_pos)
|
if (slash_pos)
|
||||||
fname = slash_pos + 1;
|
fname = slash_pos + 1;
|
||||||
len = strlen(fname);
|
len = strlen(fname);
|
||||||
|
|
||||||
// Syslog('f', "Checking %s for 8.3", fname);
|
Syslog('f', "Checking %s for 8.3", fname);
|
||||||
|
|
||||||
/* Can't be 0 chars or longer than 12 chars */
|
/* Can't be 0 chars or longer than 12 chars */
|
||||||
if( (len == 0) || (len > 12) )
|
if ((len == 0) || (len > 12)) {
|
||||||
|
Syslog('f', "filename length not right");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Mustn't be an MS-DOS Special file such as lpt1 or even lpt1.txt */
|
/* Mustn't be an MS-DOS Special file such as lpt1 or even lpt1.txt */
|
||||||
if (is_reserved_msdos(fname))
|
if (is_reserved_msdos(fname)) {
|
||||||
|
Syslog('f', "is reserved msdos name");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check that all characters are the correct case, if asked to do so. */
|
init_chartest();
|
||||||
// if (strhaslower(fname))
|
for (i = 0; i < strlen(fname); i++) {
|
||||||
// return FALSE;
|
if (isillegal(fname[i])) {
|
||||||
|
Syslog('f', "Illegal character in filename");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Can't contain invalid dos chars */
|
/* Can't contain invalid dos chars */
|
||||||
/* Windows use the ANSI charset.
|
|
||||||
But filenames are translated in the PC charset.
|
|
||||||
This Translation may be more or less relaxed depending
|
|
||||||
the Windows application. */
|
|
||||||
|
|
||||||
/* %%% A nice improvment to name mangling would be to translate
|
|
||||||
filename to ANSI charset on the smb server host */
|
|
||||||
|
|
||||||
p = fname;
|
p = fname;
|
||||||
dot_pos = NULL;
|
dot_pos = NULL;
|
||||||
while (*p) {
|
while (*p) {
|
||||||
if (*p == '.' && !dot_pos)
|
if (*p == '.' && !dot_pos)
|
||||||
dot_pos = (char *)p;
|
dot_pos = (char *)p;
|
||||||
// else
|
|
||||||
// if (!isdoschar(*p))
|
|
||||||
// return FALSE;
|
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -367,23 +323,27 @@ int is_8_3( char *fname)
|
|||||||
return(0 == strcmp( fname, "." ) || 0 == strcmp( fname, ".." ));
|
return(0 == strcmp( fname, "." ) || 0 == strcmp( fname, ".." ));
|
||||||
|
|
||||||
/* base can't be greater than 8 */
|
/* base can't be greater than 8 */
|
||||||
if (l > 8)
|
if (l > 8) {
|
||||||
|
Syslog('f', "filebase longer then 8 chars");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* see smb.conf(5) for a description of the 'strip dot' parameter. */
|
if (len - l == 1 && !strchr( dot_pos + 1, '.' )) {
|
||||||
/* strip_dot defaults to no */
|
|
||||||
if (/* lp_strip_dot() && */ len - l == 1 && !strchr( dot_pos + 1, '.' )) {
|
|
||||||
*dot_pos = 0;
|
*dot_pos = 0;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* extension must be between 1 and 3 */
|
/* extension must be between 1 and 3 */
|
||||||
if ((len - l < 2 ) || (len - l > 4))
|
if ((len - l < 2 ) || (len - l > 4)) {
|
||||||
|
Syslog('f', "extension length not right");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* extensions may not have a dot */
|
/* extensions may not have a dot */
|
||||||
if (strchr( dot_pos+1, '.' ))
|
if (strchr( dot_pos+1, '.' )) {
|
||||||
|
Syslog('f', "extension with a dot in it");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* must be in 8.3 format */
|
/* must be in 8.3 format */
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -398,8 +358,8 @@ int is_8_3( char *fname)
|
|||||||
*/
|
*/
|
||||||
void mangle_name_83(char *s)
|
void mangle_name_83(char *s)
|
||||||
{
|
{
|
||||||
int csum;
|
int csum, i;
|
||||||
char *p;
|
char *p, *q;
|
||||||
char extension[4];
|
char extension[4];
|
||||||
char base[9];
|
char base[9];
|
||||||
int baselen = 0;
|
int baselen = 0;
|
||||||
@ -408,6 +368,53 @@ void mangle_name_83(char *s)
|
|||||||
extension[0] = 0;
|
extension[0] = 0;
|
||||||
base[0] = 0;
|
base[0] = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* First, convert some common Unix extensions to extensions of 3
|
||||||
|
* characters. If none fits, don't change anything now.
|
||||||
|
*/
|
||||||
|
if (strcmp(q = s + strlen(s) - strlen(".tar.gz"), ".tar.gz") == 0) {
|
||||||
|
*q = '\0';
|
||||||
|
q = (char *)"tgz";
|
||||||
|
Syslog('f', "mangle_name_83 tar.gz => tgz");
|
||||||
|
} else if (strcmp(q = s + strlen(s) - strlen(".tar.z"), ".tar.z") == 0) {
|
||||||
|
*q = '\0';
|
||||||
|
q = (char *)"tgz";
|
||||||
|
Syslog('f', "mangle_name_83 tar.z => tgz");
|
||||||
|
} else if (strcmp(q = s + strlen(s) - strlen(".tar.Z"), ".tar.Z") == 0) {
|
||||||
|
*q = '\0';
|
||||||
|
q = (char *)"taz";
|
||||||
|
Syslog('f', "mangle_name_83 tar.Z => taz");
|
||||||
|
} else if (strcmp(q = s + strlen(s) - strlen(".html"), ".html") == 0) {
|
||||||
|
*q = '\0';
|
||||||
|
q = (char *)"htm";
|
||||||
|
Syslog('f', "mangle_name_83 html => htm");
|
||||||
|
} else if (strcmp(q = s + strlen(s) - strlen(".shtml"), ".shtml") == 0) {
|
||||||
|
*q = '\0';
|
||||||
|
q = (char *)"stm";
|
||||||
|
Syslog('f', "mangle_name_83 shtml => stm");
|
||||||
|
} else if (strcmp(q = s + strlen(s) - strlen(".conf"), ".conf") == 0) {
|
||||||
|
*q = '\0';
|
||||||
|
q = (char *)"cnf";
|
||||||
|
Syslog('f', "mangle_name_83 conf => cnf");
|
||||||
|
} else {
|
||||||
|
q = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (q) {
|
||||||
|
/*
|
||||||
|
* Extension is modified, apply changes
|
||||||
|
*/
|
||||||
|
p = s + strlen(s);
|
||||||
|
*p++ = '.';
|
||||||
|
for (i = 0; i < strlen(q); i++)
|
||||||
|
*p++ = q[i];
|
||||||
|
*p++ = '\0';
|
||||||
|
Syslog('f', "name with new extension => \"%s\"", s);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Now start name mangling
|
||||||
|
*/
|
||||||
p = strrchr(s,'.');
|
p = strrchr(s,'.');
|
||||||
if (p && (strlen(p+1) < (size_t)4)) {
|
if (p && (strlen(p+1) < (size_t)4)) {
|
||||||
int all_normal = (!strhaslower(p+1)); /* XXXXXXXXX */
|
int all_normal = (!strhaslower(p+1)); /* XXXXXXXXX */
|
||||||
@ -422,11 +429,10 @@ void mangle_name_83(char *s)
|
|||||||
csum = str_checksum(s);
|
csum = str_checksum(s);
|
||||||
|
|
||||||
tu(s);
|
tu(s);
|
||||||
// Syslog('f', "Mangling name %s to ",s);
|
|
||||||
|
|
||||||
if (p) {
|
if (p) {
|
||||||
if( p == s )
|
if (p == s)
|
||||||
safe_strcpy( extension, "___", 3 );
|
safe_strcpy(extension, "___", 3);
|
||||||
else {
|
else {
|
||||||
*p++ = 0;
|
*p++ = 0;
|
||||||
while (*p && extlen < 3) {
|
while (*p && extlen < 3) {
|
||||||
@ -447,63 +453,48 @@ void mangle_name_83(char *s)
|
|||||||
}
|
}
|
||||||
base[baselen] = 0;
|
base[baselen] = 0;
|
||||||
|
|
||||||
csum = csum % (MANGLE_BASE*MANGLE_BASE);
|
csum = csum % (MANGLE_BASE * MANGLE_BASE);
|
||||||
sprintf(s, "%s%c%c%c", base, magic_char, mangle(csum/MANGLE_BASE), mangle(csum));
|
sprintf(s, "%s%c%c%c", base, magic_char, mangle(csum / MANGLE_BASE), mangle(csum));
|
||||||
|
|
||||||
if( *extension ) {
|
if( *extension ) {
|
||||||
(void)strcat(s, ".");
|
(void)strcat(s, ".");
|
||||||
(void)strcat(s, extension);
|
(void)strcat(s, extension);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Syslog('f', "%s", s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* Convert a filename to DOS format. Return True if successful.
|
* Convert a filename to DOS format.
|
||||||
*
|
*
|
||||||
* Input: OutName - Source *and* destination buffer.
|
* Input: OutName - Source *and* destination buffer.
|
||||||
*
|
*
|
||||||
* NOTE that OutName must point to a memory space that
|
* NOTE that OutName must point to a memory space that
|
||||||
* is at least 13 bytes in size!
|
* is at least 13 bytes in size! That should always be
|
||||||
*
|
* the case of course.
|
||||||
* need83 - If False, name mangling will be skipped unless the
|
|
||||||
* name contains illegal characters. Mapping will still
|
|
||||||
* be done, if appropriate. This is probably used to
|
|
||||||
* signal that a client does not require name mangling,
|
|
||||||
* thus skipping the name mangling even on shares which
|
|
||||||
* have name-mangling turned on.
|
|
||||||
*
|
|
||||||
* Output: Returns False only if the name wanted mangling but the share does
|
|
||||||
* not have name mangling turned on.
|
|
||||||
*
|
*
|
||||||
* ****************************************************************************
|
* ****************************************************************************
|
||||||
*/
|
*/
|
||||||
int name_mangle(char *OutName, int need83)
|
void name_mangle(char *OutName)
|
||||||
{
|
{
|
||||||
Syslog('f', "name_mangle(%s, need83 = %s)", OutName, need83 ? "TRUE" : "FALSE");
|
char *p;
|
||||||
|
|
||||||
|
p = xstrcpy(OutName);
|
||||||
|
/*
|
||||||
|
* check if it's already in 8.3 format
|
||||||
|
*/
|
||||||
|
if (!is_8_3(OutName)) {
|
||||||
|
Syslog('f', "is 8.3 = FALSE");
|
||||||
|
mangle_name_83(OutName);
|
||||||
|
} else {
|
||||||
/*
|
/*
|
||||||
* Check for characters legal in Unix and illegal in DOS/Win
|
* No mangling needed, convert to uppercase
|
||||||
*/
|
*/
|
||||||
if (!need83 && is_illegal_name(OutName))
|
tu(OutName);
|
||||||
need83 = TRUE;
|
}
|
||||||
|
|
||||||
/*
|
Syslog('f',"name_mangle(%s) ==> [%s]", p, OutName);
|
||||||
* check if it's already in 8.3 format
|
free(p);
|
||||||
*/
|
|
||||||
if (need83 && !is_8_3(OutName)) {
|
|
||||||
mangle_name_83(OutName);
|
|
||||||
} else {
|
|
||||||
/*
|
|
||||||
* No mangling needed, convert to uppercase
|
|
||||||
*/
|
|
||||||
tu(OutName);
|
|
||||||
}
|
|
||||||
|
|
||||||
Syslog('f',"name_mangle() ==> [%s]", OutName);
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,7 +42,8 @@ typedef struct _TagRec {
|
|||||||
int Active; /* Not deleted from taglist */
|
int Active; /* Not deleted from taglist */
|
||||||
int Cost; /* Free download */
|
int Cost; /* Free download */
|
||||||
off_t Size; /* File Size */
|
off_t Size; /* File Size */
|
||||||
char File[81]; /* File Name */
|
char SFile[13]; /* Short File Name */
|
||||||
|
char LFile[81]; /* Long FIle Name */
|
||||||
} _Tag;
|
} _Tag;
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
*
|
*
|
||||||
* File ..................: mbfido/addbbs.c
|
* $Id$
|
||||||
* Purpose ...............: Add TIC file to the BBS
|
* Purpose ...............: Add TIC file to the BBS
|
||||||
* Last modification date : 21-Aug-2000
|
|
||||||
*
|
*
|
||||||
*****************************************************************************
|
*****************************************************************************
|
||||||
* Copyright (C) 1997-2000
|
* Copyright (C) 1997-2000
|
||||||
@ -54,8 +53,8 @@ int Add_BBS()
|
|||||||
{
|
{
|
||||||
struct FILERecord frec;
|
struct FILERecord frec;
|
||||||
int i, Insert, Done = FALSE, Found = FALSE;
|
int i, Insert, Done = FALSE, Found = FALSE;
|
||||||
char fdbname[128], fdbtemp[128];
|
char fdbname[PATH_MAX], fdbtemp[PATH_MAX];
|
||||||
char temp1[128], temp2[128], *fname;
|
char temp1[PATH_MAX], temp2[PATH_MAX], *fname;
|
||||||
FILE *fdb, *fdt;
|
FILE *fdb, *fdt;
|
||||||
int Keep = 0, DidDelete = FALSE;
|
int Keep = 0, DidDelete = FALSE;
|
||||||
fd_list *fdl = NULL;
|
fd_list *fdl = NULL;
|
||||||
@ -64,7 +63,9 @@ int Add_BBS()
|
|||||||
* Create filedatabase record.
|
* Create filedatabase record.
|
||||||
*/
|
*/
|
||||||
memset(&frec, 0, sizeof(frec));
|
memset(&frec, 0, sizeof(frec));
|
||||||
strcpy(frec.Name, TIC.NewName);
|
strcpy(temp1, TIC.NewName);
|
||||||
|
name_mangle(temp1);
|
||||||
|
strcpy(frec.Name, temp1);
|
||||||
strcpy(frec.LName, TIC.NewName);
|
strcpy(frec.LName, TIC.NewName);
|
||||||
// strcpy(frec.TicArea, TIC.TicIn.Area); /* TIJDELIJK IVM VELDLENGTE */
|
// strcpy(frec.TicArea, TIC.TicIn.Area); /* TIJDELIJK IVM VELDLENGTE */
|
||||||
frec.Size = TIC.FileSize;
|
frec.Size = TIC.FileSize;
|
||||||
@ -100,6 +101,7 @@ int Add_BBS()
|
|||||||
WriteError("$Can't create %s", fdbname);
|
WriteError("$Can't create %s", fdbname);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
chmod(fdbname, 0660);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -129,11 +131,11 @@ int Add_BBS()
|
|||||||
if (fread(&file, sizeof(file), 1, fdb) != 1)
|
if (fread(&file, sizeof(file), 1, fdb) != 1)
|
||||||
Done = TRUE;
|
Done = TRUE;
|
||||||
if (!Done) {
|
if (!Done) {
|
||||||
if (strcmp(frec.Name, file.Name) == 0) {
|
if (strcmp(frec.LName, file.LName) == 0) {
|
||||||
Found = TRUE;
|
Found = TRUE;
|
||||||
Insert++;
|
Insert++;
|
||||||
} else
|
} else
|
||||||
if (strcmp(frec.Name, file.Name) < 0)
|
if (strcmp(frec.LName, file.LName) < 0)
|
||||||
Found = TRUE;
|
Found = TRUE;
|
||||||
else
|
else
|
||||||
Insert++;
|
Insert++;
|
||||||
@ -158,7 +160,7 @@ int Add_BBS()
|
|||||||
* name, if so, don't copy the original database
|
* name, if so, don't copy the original database
|
||||||
* record. The file is also overwritten.
|
* record. The file is also overwritten.
|
||||||
*/
|
*/
|
||||||
if (strcmp(file.Name, frec.Name) != 0)
|
if (strcmp(file.LName, frec.LName) != 0)
|
||||||
fwrite(&file, sizeof(file), 1, fdt);
|
fwrite(&file, sizeof(file), 1, fdt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,7 +180,7 @@ int Add_BBS()
|
|||||||
* then we skip the record what was origionaly
|
* then we skip the record what was origionaly
|
||||||
* in the database record.
|
* in the database record.
|
||||||
*/
|
*/
|
||||||
if (strcmp(file.Name, frec.Name) != 0)
|
if (strcmp(file.LName, frec.LName) != 0)
|
||||||
fwrite(&file, sizeof(file), 1, fdt);
|
fwrite(&file, sizeof(file), 1, fdt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,16 +230,16 @@ int Add_BBS()
|
|||||||
if ((fdb = fopen(fdbname, "r+")) != NULL) {
|
if ((fdb = fopen(fdbname, "r+")) != NULL) {
|
||||||
|
|
||||||
while (fread(&file, sizeof(file), 1, fdb) == 1) {
|
while (fread(&file, sizeof(file), 1, fdb) == 1) {
|
||||||
if (strlen(file.Name) == strlen(TIC.NewName)) {
|
if (strlen(file.LName) == strlen(TIC.NewName)) {
|
||||||
if (strcasecmp(file.Name, TIC.NewName) != 0) {
|
if (strcasecmp(file.LName, TIC.NewName) != 0) {
|
||||||
Found = TRUE;
|
Found = TRUE;
|
||||||
for (i = 0; i < strlen(TIC.NewName); i++) {
|
for (i = 0; i < strlen(TIC.NewName); i++) {
|
||||||
if ((TIC.TicIn.Replace[i] != '?') &&
|
if ((TIC.TicIn.Replace[i] != '?') &&
|
||||||
(toupper(TIC.TicIn.Replace[i]) != toupper(file.Name[i])))
|
(toupper(TIC.TicIn.Replace[i]) != toupper(file.LName[i])))
|
||||||
Found = FALSE;
|
Found = FALSE;
|
||||||
}
|
}
|
||||||
if (Found) {
|
if (Found) {
|
||||||
Syslog('+', "Replace: Deleting: %s", file.Name);
|
Syslog('+', "Replace: Deleting: %s", file.LName);
|
||||||
file.Deleted = TRUE;
|
file.Deleted = TRUE;
|
||||||
fseek(fdb, - sizeof(file), SEEK_CUR);
|
fseek(fdb, - sizeof(file), SEEK_CUR);
|
||||||
fwrite(&file, sizeof(file), 1, fdb);
|
fwrite(&file, sizeof(file), 1, fdb);
|
||||||
@ -258,19 +260,19 @@ int Add_BBS()
|
|||||||
|
|
||||||
while (fread(&file, sizeof(file), 1, fdb) == 1) {
|
while (fread(&file, sizeof(file), 1, fdb) == 1) {
|
||||||
|
|
||||||
if ((strlen(file.Name) == strlen(TIC.NewName)) && (!file.Deleted)) {
|
if ((strlen(file.LName) == strlen(TIC.NewName)) && (!file.Deleted)) {
|
||||||
Found = TRUE;
|
Found = TRUE;
|
||||||
|
|
||||||
for (i = 0; i < strlen(file.Name); i++) {
|
for (i = 0; i < strlen(file.LName); i++) {
|
||||||
if ((TIC.NewName[i] < '0') || (TIC.NewName[i] > '9')) {
|
if ((TIC.NewName[i] < '0') || (TIC.NewName[i] > '9')) {
|
||||||
if (TIC.NewName[i] != file.Name[i]) {
|
if (TIC.NewName[i] != file.LName[i]) {
|
||||||
Found = FALSE;
|
Found = FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Found) {
|
if (Found) {
|
||||||
Keep++;
|
Keep++;
|
||||||
fill_fdlist(&fdl, file.Name, file.UploadDate);
|
fill_fdlist(&fdl, file.LName, file.UploadDate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -289,8 +291,8 @@ int Add_BBS()
|
|||||||
fseek(fdb, 0, SEEK_SET);
|
fseek(fdb, 0, SEEK_SET);
|
||||||
|
|
||||||
while (fread(&file, sizeof(file), 1, fdb) == 1) {
|
while (fread(&file, sizeof(file), 1, fdb) == 1) {
|
||||||
if (strcmp(file.Name, fname) == 0) {
|
if (strcmp(file.LName, fname) == 0) {
|
||||||
Syslog('+', "Keep %d files, deleting: %s", TIC.KeepNum, file.Name);
|
Syslog('+', "Keep %d files, deleting: %s", TIC.KeepNum, file.LName);
|
||||||
file.Deleted = TRUE;
|
file.Deleted = TRUE;
|
||||||
fseek(fdb, - sizeof(file), SEEK_CUR);
|
fseek(fdb, - sizeof(file), SEEK_CUR);
|
||||||
fwrite(&file, sizeof(file), 1, fdb);
|
fwrite(&file, sizeof(file), 1, fdb);
|
||||||
@ -315,7 +317,7 @@ int Add_BBS()
|
|||||||
if (!file.Deleted)
|
if (!file.Deleted)
|
||||||
fwrite(&file, sizeof(file), 1, fdt);
|
fwrite(&file, sizeof(file), 1, fdt);
|
||||||
else {
|
else {
|
||||||
sprintf(temp2, "%s/%s", area.Path, file.Name);
|
sprintf(temp2, "%s/%s", area.Path, file.LName);
|
||||||
if (unlink(temp2) != 0)
|
if (unlink(temp2) != 0)
|
||||||
WriteError("$Can't unlink file %s", temp2);
|
WriteError("$Can't unlink file %s", temp2);
|
||||||
}
|
}
|
||||||
|
@ -277,7 +277,7 @@ void AdoptFile(int Area, char *File, char *Description)
|
|||||||
* Convert to 8.3 DOS filename
|
* Convert to 8.3 DOS filename
|
||||||
*/
|
*/
|
||||||
strcpy(temp2, File);
|
strcpy(temp2, File);
|
||||||
name_mangle(temp2, TRUE);
|
name_mangle(temp2);
|
||||||
strcpy(fdb.Name, temp2);
|
strcpy(fdb.Name, temp2);
|
||||||
strcpy(fdb.LName, File);
|
strcpy(fdb.LName, File);
|
||||||
fdb.Size = file_size(File);
|
fdb.Size = file_size(File);
|
||||||
|
@ -157,7 +157,7 @@ void Check(void)
|
|||||||
Update = FALSE;
|
Update = FALSE;
|
||||||
|
|
||||||
strcpy(temp, file.LName);
|
strcpy(temp, file.LName);
|
||||||
name_mangle(temp, TRUE);
|
name_mangle(temp);
|
||||||
if (strcmp(file.Name, temp)) {
|
if (strcmp(file.Name, temp)) {
|
||||||
Syslog('!', "Converted %s to %s", file.Name, temp);
|
Syslog('!', "Converted %s to %s", file.Name, temp);
|
||||||
strncpy(file.Name, temp, 12);
|
strncpy(file.Name, temp, 12);
|
||||||
|
@ -209,7 +209,7 @@ void ImportFiles(int Area)
|
|||||||
* Create DOS 8.3 filename
|
* Create DOS 8.3 filename
|
||||||
*/
|
*/
|
||||||
strcpy(temp, fdb.LName);
|
strcpy(temp, fdb.LName);
|
||||||
name_mangle(temp, TRUE);
|
name_mangle(temp);
|
||||||
strcpy(fdb.Name, temp);
|
strcpy(fdb.Name, temp);
|
||||||
|
|
||||||
if (do_annon)
|
if (do_annon)
|
||||||
|
@ -339,11 +339,11 @@ int AddFile(struct FILERecord fdb, int Area, char *DestPath, char *FromPath)
|
|||||||
if (fread(&file, sizeof(file), 1, fp1) != 1)
|
if (fread(&file, sizeof(file), 1, fp1) != 1)
|
||||||
Done = TRUE;
|
Done = TRUE;
|
||||||
if (!Done) {
|
if (!Done) {
|
||||||
if (strcmp(fdb.Name, file.Name) == 0) {
|
if (strcmp(fdb.LName, file.LName) == 0) {
|
||||||
Found = TRUE;
|
Found = TRUE;
|
||||||
Insert++;
|
Insert++;
|
||||||
} else {
|
} else {
|
||||||
if (strcmp(fdb.Name, file.Name) < 0)
|
if (strcmp(fdb.LName, file.LName) < 0)
|
||||||
Found = TRUE;
|
Found = TRUE;
|
||||||
else
|
else
|
||||||
Insert++;
|
Insert++;
|
||||||
@ -367,7 +367,7 @@ int AddFile(struct FILERecord fdb, int Area, char *DestPath, char *FromPath)
|
|||||||
* If we are importing a file with the same name,
|
* If we are importing a file with the same name,
|
||||||
* skip the original record and put the new one in place.
|
* skip the original record and put the new one in place.
|
||||||
*/
|
*/
|
||||||
if (strcmp(file.Name, fdb.Name) != 0)
|
if (strcmp(file.LName, fdb.LName) != 0)
|
||||||
fwrite(&file, sizeof(file), 1, fp2);
|
fwrite(&file, sizeof(file), 1, fp2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -378,7 +378,7 @@ int AddFile(struct FILERecord fdb, int Area, char *DestPath, char *FromPath)
|
|||||||
* Append the rest of the records
|
* Append the rest of the records
|
||||||
*/
|
*/
|
||||||
while (fread(&file, sizeof(file), 1, fp1) == 1) {
|
while (fread(&file, sizeof(file), 1, fp1) == 1) {
|
||||||
if (strcmp(file.Name, fdb.Name) != 0)
|
if (strcmp(file.LName, fdb.LName) != 0)
|
||||||
fwrite(&file, sizeof(file), 1, fp2);
|
fwrite(&file, sizeof(file), 1, fp2);
|
||||||
}
|
}
|
||||||
if (!area.AddAlpha)
|
if (!area.AddAlpha)
|
||||||
|
@ -57,20 +57,22 @@ int CheckFile(char *, int);
|
|||||||
int CheckFile(char *File, int iArea)
|
int CheckFile(char *File, int iArea)
|
||||||
{
|
{
|
||||||
FILE *pFileB;
|
FILE *pFileB;
|
||||||
int iFile = FALSE;
|
|
||||||
char *sFileArea;
|
char *sFileArea;
|
||||||
|
|
||||||
sFileArea = calloc(PATH_MAX, sizeof(char));
|
sFileArea = calloc(PATH_MAX, sizeof(char));
|
||||||
sprintf(sFileArea,"%s/fdb/fdb%d.dta", getenv("MBSE_ROOT"), iArea);
|
sprintf(sFileArea,"%s/fdb/fdb%d.dta", getenv("MBSE_ROOT"), iArea);
|
||||||
|
|
||||||
if(( pFileB = fopen(sFileArea,"r+")) == NULL) {
|
if ((pFileB = fopen(sFileArea,"r+")) == NULL) {
|
||||||
mkdir(sFileArea, 755);
|
mkdir(sFileArea, 775);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
free(sFileArea);
|
||||||
|
|
||||||
while ( fread(&file, sizeof(file), 1, pFileB) == 1) {
|
/*
|
||||||
if((strcmp(tl(file.Name), tl(File))) == 0) {
|
* Check long and short filenames, case insensitive
|
||||||
iFile = TRUE;
|
*/
|
||||||
|
while (fread(&file, sizeof(file), 1, pFileB) == 1) {
|
||||||
|
if (((strcasecmp(file.Name, File)) == 0) || ((strcasecmp(file.LName, File)) == 0)) {
|
||||||
fclose(pFileB);
|
fclose(pFileB);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -78,11 +80,7 @@ int CheckFile(char *File, int iArea)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fclose(pFileB);
|
fclose(pFileB);
|
||||||
free(sFileArea);
|
return FALSE;
|
||||||
|
|
||||||
if(!iFile)
|
|
||||||
return FALSE;
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -128,7 +126,8 @@ void File_List()
|
|||||||
T.Active = FALSE;
|
T.Active = FALSE;
|
||||||
T.Cost = file.Cost;
|
T.Cost = file.Cost;
|
||||||
T.Size = file.Size;
|
T.Size = file.Size;
|
||||||
sprintf(T.File, "%s", file.Name);
|
strncpy(T.SFile, file.Name, 12);
|
||||||
|
strncpy(T.LFile, file.LName, 80);
|
||||||
SetTag(T);
|
SetTag(T);
|
||||||
|
|
||||||
if (ShowOneFile() == 1) {
|
if (ShowOneFile() == 1) {
|
||||||
@ -136,13 +135,13 @@ void File_List()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(file.Deleted)
|
if (file.Deleted)
|
||||||
/* D E L E T E D */ /* Uploaded by: */
|
/* D E L E T E D */ /* Uploaded by: */
|
||||||
printf("%-15s %s [%ld] %s%s\n", file.Name, (char *) Language(239), file.TimesDL, (char *) Language(238), file.Uploader);
|
printf("%-12s %s [%ld] %s%s\n", file.Name, (char *) Language(239), file.TimesDL, (char *) Language(238), file.Uploader);
|
||||||
|
|
||||||
if(file.Missing)
|
if (file.Missing)
|
||||||
/* M I S S I N G */ /* Uploaded by: */
|
/* M I S S I N G */ /* Uploaded by: */
|
||||||
printf("%-15s %s [%ld] %s%s\n", file.Name, (char *) Language(240), file.TimesDL, (char *) Language(238), file.Uploader);
|
printf("%-12s %s [%ld] %s%s\n", file.Name, (char *) Language(240), file.TimesDL, (char *) Language(238), file.Uploader);
|
||||||
|
|
||||||
FileCount++; /* Increase File Counter by 1 */
|
FileCount++; /* Increase File Counter by 1 */
|
||||||
FileBytes += file.Size; /* Increase File Byte Count */
|
FileBytes += file.Size; /* Increase File Byte Count */
|
||||||
@ -207,18 +206,18 @@ void Download(void)
|
|||||||
if ((fp = OpenFileBase(Tag.Area, FALSE)) != NULL) {
|
if ((fp = OpenFileBase(Tag.Area, FALSE)) != NULL) {
|
||||||
|
|
||||||
while (fread(&file, sizeof(file), 1, fp) == 1) {
|
while (fread(&file, sizeof(file), 1, fp) == 1) {
|
||||||
if (strcmp(file.Name, Tag.File) == 0)
|
if (strcmp(file.LName, Tag.LFile) == 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(file.Name, Tag.File) == 0) {
|
if (strcmp(file.LName, Tag.LFile) == 0) {
|
||||||
Syslog('b', "Found file %s in area %d", file.Name, Tag.Area);
|
Syslog('b', "Found file %s in area %d", file.LName, Tag.Area);
|
||||||
if ((file.Deleted) || (file.Missing)) {
|
if ((file.Deleted) || (file.Missing)) {
|
||||||
pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(248));
|
pout(CFG.HiliteF, CFG.HiliteB, (char *) Language(248));
|
||||||
/* Sorry that file is unavailable for download */
|
/* Sorry that file is unavailable for download */
|
||||||
printf("%s (%s)\n", (char *) Language(248), file.Name);
|
printf("%s (%s)\n", (char *) Language(248), file.LName);
|
||||||
Tag.Active = FALSE;
|
Tag.Active = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -233,7 +232,7 @@ void Download(void)
|
|||||||
*/
|
*/
|
||||||
sprintf(symTo, "./tag/filedesc.%ld", exitinfo.Downloads % 256);
|
sprintf(symTo, "./tag/filedesc.%ld", exitinfo.Downloads % 256);
|
||||||
if ((fd = fopen(symTo, "a")) != NULL) {
|
if ((fd = fopen(symTo, "a")) != NULL) {
|
||||||
fprintf(fd, "%s\r\n", file.Name);
|
fprintf(fd, "%s (%s)\r\n", file.LName, file.Name);
|
||||||
for (i = 0; i < 25; i++) {
|
for (i = 0; i < 25; i++) {
|
||||||
if (strlen(file.Desc[i]) > 1)
|
if (strlen(file.Desc[i]) > 1)
|
||||||
fprintf(fd, " %s\r\n", file.Desc[i]);
|
fprintf(fd, " %s\r\n", file.Desc[i]);
|
||||||
@ -245,11 +244,12 @@ void Download(void)
|
|||||||
/*
|
/*
|
||||||
* Make a symlink to the users download dir.
|
* Make a symlink to the users download dir.
|
||||||
* First unlink, in case there was an old one.
|
* First unlink, in case there was an old one.
|
||||||
|
* The shortname is linked to the original longname.
|
||||||
*/
|
*/
|
||||||
chdir("./tag");
|
chdir("./tag");
|
||||||
unlink(Tag.File);
|
unlink(Tag.SFile);
|
||||||
sprintf(symFrom, "%s", Tag.File);
|
sprintf(symFrom, "%s", Tag.SFile);
|
||||||
sprintf(symTo, "%s/%s", sAreaPath, Tag.File);
|
sprintf(symTo, "%s/%s", sAreaPath, Tag.LFile);
|
||||||
if (symlink(symTo, symFrom)) {
|
if (symlink(symTo, symFrom)) {
|
||||||
WriteError("$Can't create symlink %s %s %d", symTo, symFrom, errno);
|
WriteError("$Can't create symlink %s %s %d", symTo, symFrom, errno);
|
||||||
Tag.Active = FALSE;
|
Tag.Active = FALSE;
|
||||||
@ -392,12 +392,12 @@ void Download(void)
|
|||||||
|
|
||||||
if (Tag.Active) {
|
if (Tag.Active) {
|
||||||
|
|
||||||
sprintf(symTo, "./tag/%s", Tag.File);
|
sprintf(symTo, "./tag/%s", Tag.SFile);
|
||||||
/*
|
/*
|
||||||
* If symlink is gone the file is sent.
|
* If symlink is gone the file is sent.
|
||||||
*/
|
*/
|
||||||
if ((access(symTo, R_OK)) != 0) {
|
if ((access(symTo, R_OK)) != 0) {
|
||||||
Syslog('+', "File %s from area %d sent ok", Tag.File, Tag.Area);
|
Syslog('+', "File %s from area %d sent ok", Tag.LFile, Tag.Area);
|
||||||
Tag.Active = FALSE;
|
Tag.Active = FALSE;
|
||||||
fseek(tf, - sizeof(Tag), SEEK_CUR);
|
fseek(tf, - sizeof(Tag), SEEK_CUR);
|
||||||
fwrite(&Tag, sizeof(Tag), 1, tf);
|
fwrite(&Tag, sizeof(Tag), 1, tf);
|
||||||
@ -409,7 +409,7 @@ void Download(void)
|
|||||||
SetFileArea(Tag.Area);
|
SetFileArea(Tag.Area);
|
||||||
if ((fp = OpenFileBase(Tag.Area, TRUE)) != NULL) {
|
if ((fp = OpenFileBase(Tag.Area, TRUE)) != NULL) {
|
||||||
while (fread(&file, sizeof(file), 1, fp) == 1) {
|
while (fread(&file, sizeof(file), 1, fp) == 1) {
|
||||||
if (strcmp(file.Name, Tag.File) == 0)
|
if (strcmp(file.LName, Tag.LFile) == 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Size += file.Size;
|
Size += file.Size;
|
||||||
@ -421,7 +421,7 @@ void Download(void)
|
|||||||
Count++;
|
Count++;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Syslog('+', "Failed to sent %s from area %d", Tag.File, Tag.Area);
|
Syslog('+', "Failed to sent %s from area %d", Tag.LFile, Tag.Area);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -501,12 +501,12 @@ void File_RawDir(char *OpData)
|
|||||||
|
|
||||||
if (*(dp->d_name) != '.') {
|
if (*(dp->d_name) != '.') {
|
||||||
iFileCount++;
|
iFileCount++;
|
||||||
if(stat(FileName,&statfile) != 0)
|
if (stat(FileName, &statfile) != 0)
|
||||||
printf("Can't stat file %s\n",FileName);
|
printf("Can't stat file %s\n", FileName);
|
||||||
iBytes += statfile.st_size;
|
iBytes += statfile.st_size;
|
||||||
|
|
||||||
colour(14,0);
|
colour(14,0);
|
||||||
printf("%-20s", dp->d_name);
|
printf("%-12s " , dp->d_name);
|
||||||
|
|
||||||
colour(13,0);
|
colour(13,0);
|
||||||
printf("%-12ld", (long)(statfile.st_size));
|
printf("%-12ld", (long)(statfile.st_size));
|
||||||
@ -566,7 +566,7 @@ int KeywordScan()
|
|||||||
colour(CFG.InputColourF, CFG.InputColourB);
|
colour(CFG.InputColourF, CFG.InputColourB);
|
||||||
GetstrC(Name, 80);
|
GetstrC(Name, 80);
|
||||||
|
|
||||||
if((strcmp(Name, "")) == 0)
|
if ((strcmp(Name, "")) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
strcpy(tmpname, tl(Name));
|
strcpy(tmpname, tl(Name));
|
||||||
@ -625,7 +625,8 @@ int KeywordScan()
|
|||||||
T.Active = FALSE;
|
T.Active = FALSE;
|
||||||
T.Cost = file.Cost;
|
T.Cost = file.Cost;
|
||||||
T.Size = file.Size;
|
T.Size = file.Size;
|
||||||
sprintf(T.File, "%s", file.Name);
|
strncpy(T.SFile, file.Name, 12);
|
||||||
|
strncpy(T.LFile, file.LName, 80);
|
||||||
SetTag(T);
|
SetTag(T);
|
||||||
Count++;
|
Count++;
|
||||||
if (ShowOneFile() == 1) {
|
if (ShowOneFile() == 1) {
|
||||||
@ -681,13 +682,14 @@ int FilenameScan()
|
|||||||
FILE *pAreas, *pFile;
|
FILE *pAreas, *pFile;
|
||||||
int z, y, Found, Count = 0;
|
int z, y, Found, Count = 0;
|
||||||
char *Name;
|
char *Name;
|
||||||
char *tmpname;
|
char *tmpname, *tmpname2;
|
||||||
char temp[81];
|
char temp[81];
|
||||||
_Tag T;
|
_Tag T;
|
||||||
unsigned long OldArea;
|
unsigned long OldArea;
|
||||||
|
|
||||||
Name = calloc(81, sizeof(char));
|
Name = calloc(81, sizeof(char));
|
||||||
tmpname = calloc(81, sizeof(char));
|
tmpname = calloc(81, sizeof(char));
|
||||||
|
tmpname2 = calloc(81, sizeof(char));
|
||||||
OldArea = iAreaNumber;
|
OldArea = iAreaNumber;
|
||||||
|
|
||||||
iLineCount = 2; /* Reset Line Counter to Zero */
|
iLineCount = 2; /* Reset Line Counter to Zero */
|
||||||
@ -730,6 +732,7 @@ int FilenameScan()
|
|||||||
strcat(Name, temp);
|
strcat(Name, temp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
tl(Name);
|
||||||
Syslog('+', "FilenameScan(): \"%s\"", Name);
|
Syslog('+', "FilenameScan(): \"%s\"", Name);
|
||||||
|
|
||||||
clear();
|
clear();
|
||||||
@ -752,13 +755,17 @@ int FilenameScan()
|
|||||||
|
|
||||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||||
|
|
||||||
strcpy(tmpname, tl(file.Name));
|
strcpy(tmpname, file.Name);
|
||||||
if ((strstr(tmpname, Name)) != NULL) {
|
strcpy(tmpname2, file.LName);
|
||||||
|
tl(tmpname);
|
||||||
|
tl(tmpname2);
|
||||||
|
if (((strstr(tmpname, Name)) != NULL) || ((strstr(tmpname2, Name)) != NULL)) {
|
||||||
if (!Found) {
|
if (!Found) {
|
||||||
Enter(2);
|
Enter(2);
|
||||||
if (iLC(2) == 1) {
|
if (iLC(2) == 1) {
|
||||||
free(Name);
|
free(Name);
|
||||||
free(tmpname);
|
free(tmpname);
|
||||||
|
free(tmpname2);
|
||||||
SetFileArea(OldArea);
|
SetFileArea(OldArea);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -769,12 +776,14 @@ int FilenameScan()
|
|||||||
T.Active = FALSE;
|
T.Active = FALSE;
|
||||||
T.Cost = file.Cost;
|
T.Cost = file.Cost;
|
||||||
T.Size = file.Size;
|
T.Size = file.Size;
|
||||||
sprintf(T.File, "%s", file.Name);
|
strncpy(T.SFile, file.Name, 12);
|
||||||
|
strncpy(T.LFile, file.LName, 81);
|
||||||
SetTag(T);
|
SetTag(T);
|
||||||
Count++;
|
Count++;
|
||||||
if (ShowOneFile() == 1) {
|
if (ShowOneFile() == 1) {
|
||||||
free(Name);
|
free(Name);
|
||||||
free(tmpname);
|
free(tmpname);
|
||||||
|
free(tmpname2);
|
||||||
SetFileArea(OldArea);
|
SetFileArea(OldArea);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -788,6 +797,7 @@ int FilenameScan()
|
|||||||
if (iLC(2) == 1) {
|
if (iLC(2) == 1) {
|
||||||
free(Name);
|
free(Name);
|
||||||
free(tmpname);
|
free(tmpname);
|
||||||
|
free(tmpname2);
|
||||||
SetFileArea(OldArea);
|
SetFileArea(OldArea);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -803,6 +813,7 @@ int FilenameScan()
|
|||||||
fclose(pAreas);
|
fclose(pAreas);
|
||||||
free(Name);
|
free(Name);
|
||||||
free(tmpname);
|
free(tmpname);
|
||||||
|
free(tmpname2);
|
||||||
printf("\n");
|
printf("\n");
|
||||||
if (Count)
|
if (Count)
|
||||||
Mark();
|
Mark();
|
||||||
@ -912,7 +923,8 @@ int NewfileScan(int AskStart)
|
|||||||
T.Active = FALSE;
|
T.Active = FALSE;
|
||||||
T.Cost = file.Cost;
|
T.Cost = file.Cost;
|
||||||
T.Size = file.Size;
|
T.Size = file.Size;
|
||||||
sprintf(T.File, "%s", file.Name);
|
strncpy(T.SFile, file.Name, 12);
|
||||||
|
strncpy(T.LFile, file.LName, 80);
|
||||||
SetTag(T);
|
SetTag(T);
|
||||||
|
|
||||||
Count++;
|
Count++;
|
||||||
@ -1056,7 +1068,7 @@ int Upload()
|
|||||||
/* MOET IN ALLE AREAS ZOEKEN */
|
/* MOET IN ALLE AREAS ZOEKEN */
|
||||||
if (area.Dupes) {
|
if (area.Dupes) {
|
||||||
x = CheckFile(File, Area);
|
x = CheckFile(File, Area);
|
||||||
if(x) {
|
if (x) {
|
||||||
Enter(1);
|
Enter(1);
|
||||||
/* The file already exists on the system */
|
/* The file already exists on the system */
|
||||||
pout(15, 3, (char *) Language(282));
|
pout(15, 3, (char *) Language(282));
|
||||||
@ -2008,7 +2020,7 @@ void Copy_Home()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Access(exitinfo.Security, area.DLSec) == FALSE) {
|
if (Access(exitinfo.Security, area.DLSec) == FALSE) {
|
||||||
colour(14, 0);
|
colour(14, 0);
|
||||||
printf("\n%s\n", (char *) Language(236));
|
printf("\n%s\n", (char *) Language(236));
|
||||||
Pause();
|
Pause();
|
||||||
@ -2027,7 +2039,7 @@ void Copy_Home()
|
|||||||
|
|
||||||
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
while (fread(&file, sizeof(file), 1, pFile) == 1) {
|
||||||
|
|
||||||
if (strcmp(File, file.Name) == 0) {
|
if ((strcasecmp(File, file.Name) == 0) || (strcasecmp(File, file.LName) == 0)) {
|
||||||
|
|
||||||
Found = TRUE;
|
Found = TRUE;
|
||||||
if (((file.Size + Quota()) > (CFG.iQuota * 1048576))) {
|
if (((file.Size + Quota()) > (CFG.iQuota * 1048576))) {
|
||||||
@ -2036,7 +2048,7 @@ void Copy_Home()
|
|||||||
printf("%s\n", (char *) Language(279));
|
printf("%s\n", (char *) Language(279));
|
||||||
Syslog('+', "Copy homedir, not enough quota");
|
Syslog('+', "Copy homedir, not enough quota");
|
||||||
} else {
|
} else {
|
||||||
sprintf(temp1, "%s/%s", area.Path, File);
|
sprintf(temp1, "%s/%s", area.Path, file.LName); /* Use real longname here */
|
||||||
sprintf(temp2, "%s/%s/wrk/%s", CFG.bbs_usersdir, exitinfo.Name, File);
|
sprintf(temp2, "%s/%s/wrk/%s", CFG.bbs_usersdir, exitinfo.Name, File);
|
||||||
colour(CFG.TextColourF, CFG.TextColourB);
|
colour(CFG.TextColourF, CFG.TextColourB);
|
||||||
/* Start copy: */
|
/* Start copy: */
|
||||||
@ -2130,7 +2142,7 @@ void EditTaglist()
|
|||||||
|
|
||||||
Fg--;
|
Fg--;
|
||||||
colour(Fg, 0);
|
colour(Fg, 0);
|
||||||
printf("%-14s", Tag.File);
|
printf("%-12s", Tag.SFile);
|
||||||
|
|
||||||
Fg--;
|
Fg--;
|
||||||
colour(Fg, 0);
|
colour(Fg, 0);
|
||||||
|
@ -319,14 +319,14 @@ void Mark()
|
|||||||
i = atoi(temp);
|
i = atoi(temp);
|
||||||
|
|
||||||
if ((i > 0) && (i < 100)) {
|
if ((i > 0) && (i < 100)) {
|
||||||
if ((Tagbuf[i].Area) && (strlen(Tagbuf[i].File))) {
|
if ((Tagbuf[i].Area) && (strlen(Tagbuf[i].LFile))) {
|
||||||
if (Access(exitinfo.Security, area.DLSec)) {
|
if (Access(exitinfo.Security, area.DLSec)) {
|
||||||
if ((fp = fopen("taglist", "a+")) != NULL) {
|
if ((fp = fopen("taglist", "a+")) != NULL) {
|
||||||
|
|
||||||
fseek(fp, 0, SEEK_SET);
|
fseek(fp, 0, SEEK_SET);
|
||||||
Found = FALSE;
|
Found = FALSE;
|
||||||
while (fread(&Tag, sizeof(Tag), 1, fp) == 1)
|
while (fread(&Tag, sizeof(Tag), 1, fp) == 1)
|
||||||
if ((Tag.Area == Tagbuf[i].Area) && (strcmp(Tag.File, Tagbuf[i].File) == 0)) {
|
if ((Tag.Area == Tagbuf[i].Area) && (strcmp(Tag.LFile, Tagbuf[i].LFile) == 0)) {
|
||||||
Found = TRUE;
|
Found = TRUE;
|
||||||
Syslog('b', "Tagbuf[i].File already tagged");
|
Syslog('b', "Tagbuf[i].File already tagged");
|
||||||
}
|
}
|
||||||
@ -336,7 +336,7 @@ void Mark()
|
|||||||
Tag = Tagbuf[i];
|
Tag = Tagbuf[i];
|
||||||
Tag.Active = TRUE;
|
Tag.Active = TRUE;
|
||||||
fwrite(&Tag, sizeof(Tag), 1, fp);
|
fwrite(&Tag, sizeof(Tag), 1, fp);
|
||||||
Syslog('+', "Tagged file %s from area %d", Tag.File, Tag.Area);
|
Syslog('+', "Tagged file %s from area %d", Tag.LFile, Tag.Area);
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
@ -416,37 +416,16 @@ int ShowOneFile()
|
|||||||
printf(" %02d ", Tagnr);
|
printf(" %02d ", Tagnr);
|
||||||
|
|
||||||
colour(CFG.FilenameF, CFG.FilenameB);
|
colour(CFG.FilenameF, CFG.FilenameB);
|
||||||
if(strlen(file.Name) < 25)
|
printf("%-12s", file.Name);
|
||||||
printf("%-15s", file.Name);
|
|
||||||
else {
|
|
||||||
printf("%-75s", file.Name);
|
|
||||||
if (iLC(1) == 1)
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
colour(CFG.FilesizeF, CFG.FilesizeB);
|
colour(CFG.FilesizeF, CFG.FilesizeB);
|
||||||
if(strlen(file.Name) < 25)
|
printf("%10lu ", (long)(file.Size));
|
||||||
printf("%10lu ", (long)(file.Size));
|
|
||||||
else
|
|
||||||
printf("%25lu ", (long)(file.Size));
|
|
||||||
|
|
||||||
colour(CFG.FiledateF, CFG.FiledateB);
|
colour(CFG.FiledateF, CFG.FiledateB);
|
||||||
printf("%-10s ", StrDateDMY(file.UploadDate));
|
printf("%-10s ", StrDateDMY(file.UploadDate));
|
||||||
|
|
||||||
colour(12, 0);
|
colour(12, 0);
|
||||||
if(file.TimesDL < 10)
|
printf("[%4ld] ", file.TimesDL);
|
||||||
printf(" ");
|
|
||||||
|
|
||||||
if(file.TimesDL < 100)
|
|
||||||
printf(" ");
|
|
||||||
|
|
||||||
if(file.TimesDL < 1000)
|
|
||||||
printf(" ");
|
|
||||||
|
|
||||||
if(file.TimesDL > 9999)
|
|
||||||
file.TimesDL = 9999;
|
|
||||||
|
|
||||||
printf("[%ld] ", file.TimesDL);
|
|
||||||
|
|
||||||
if((strcmp(file.Uploader, "")) == 0)
|
if((strcmp(file.Uploader, "")) == 0)
|
||||||
strcpy(file.Uploader, "SysOp");
|
strcpy(file.Uploader, "SysOp");
|
||||||
@ -891,14 +870,17 @@ int Addfile(char *File, int AreaNum, int fileid)
|
|||||||
}
|
}
|
||||||
|
|
||||||
memset(&file, 0, sizeof(file));
|
memset(&file, 0, sizeof(file));
|
||||||
strcpy(file.Name, File);
|
strcpy(file.LName, File);
|
||||||
|
strcpy(temp1, File);
|
||||||
|
name_mangle(temp1);
|
||||||
|
strcpy(file.Name, temp1);
|
||||||
sprintf(temp1,"%ld",(long)(statfile.st_size));
|
sprintf(temp1,"%ld",(long)(statfile.st_size));
|
||||||
file.Size = atoi(temp1);
|
file.Size = atoi(temp1);
|
||||||
file.FileDate = statfile.st_mtime;
|
file.FileDate = statfile.st_mtime;
|
||||||
strcpy(file.Uploader, exitinfo.sUserName);
|
strcpy(file.Uploader, exitinfo.sUserName);
|
||||||
time(&file.UploadDate);
|
file.UploadDate = time(NULL);
|
||||||
|
|
||||||
if(area.PwdUP) {
|
if (area.PwdUP) {
|
||||||
colour(9,0);
|
colour(9,0);
|
||||||
/* Do you want to password protect your upload ? [y/N]: */
|
/* Do you want to password protect your upload ? [y/N]: */
|
||||||
printf("\n%s", (char *) Language(285));
|
printf("\n%s", (char *) Language(285));
|
||||||
@ -998,7 +980,7 @@ int Addfile(char *File, int AreaNum, int fileid)
|
|||||||
iPrivate = TRUE;
|
iPrivate = TRUE;
|
||||||
fprintf(pPrivate, "****************************************************");
|
fprintf(pPrivate, "****************************************************");
|
||||||
fprintf(pPrivate, "\nUser : %s", file.Uploader);
|
fprintf(pPrivate, "\nUser : %s", file.Uploader);
|
||||||
fprintf(pPrivate, "\nFile : %s", file.Name);
|
fprintf(pPrivate, "\nFile : %s (%s)", file.LName, file.Name);
|
||||||
fprintf(pPrivate, "\nSize : %lu", (long)(file.Size));
|
fprintf(pPrivate, "\nSize : %lu", (long)(file.Size));
|
||||||
fprintf(pPrivate, "\nUpload Date : %s\n\n", StrDateDMY(file.UploadDate));
|
fprintf(pPrivate, "\nUpload Date : %s\n\n", StrDateDMY(file.UploadDate));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user