beta 16
This commit is contained in:
parent
095ed229a5
commit
8130150b03
|
|
@ -1,11 +1,15 @@
|
||||||
W.I.P
|
Version 2.8.1b16 -- 8 Nov 2003
|
||||||
|
This version fixes 2 major bugs in beta 15 release.
|
||||||
fspd: update mtime for directory listing after .FSP_CONTENT write
|
fspd: update mtime for directory listing after .FSP_CONTENT write
|
||||||
flscmd: do not list file size > 2GB as negative, same for block count
|
flscmd: do not list file size > 2GB as negative, same for block count
|
||||||
fspscan: install it when doing make install
|
fspscan: install it when doing make install
|
||||||
fspd: -l logfile switch
|
fspd: -l logfile switch
|
||||||
removed crash when logfile is in use
|
fixed crash when logfile is in use. (from betat15)
|
||||||
fixed memory leak in client/util.c:get_dir_blk
|
fixed memory leak in client/util.c:get_dir_blk
|
||||||
fixed memory leak in client/util.c:open_dir
|
fixed memory leak in client/util.c:open_dir
|
||||||
|
fixed error from 2.8.1b15 in util_stat which brokes recursive
|
||||||
|
directory listings
|
||||||
|
do not delete partial file on FSP timeout in fgetcmd
|
||||||
|
|
||||||
Version 2.8.1b15 -- 15 Oct 2003
|
Version 2.8.1b15 -- 15 Oct 2003
|
||||||
Sven writes manpage for fspscan.1
|
Sven writes manpage for fspscan.1
|
||||||
|
|
|
||||||
2
TODO
2
TODO
|
|
@ -33,6 +33,7 @@ random number generator in server is low random quality on low bits.
|
||||||
Client LIBRARY
|
Client LIBRARY
|
||||||
local bind address FSP_LOCALIP
|
local bind address FSP_LOCALIP
|
||||||
remove stale lock files if not needed, port code from fspclient.
|
remove stale lock files if not needed, port code from fspclient.
|
||||||
|
FSP_TIMEOUT should be total number of seconds, not delay between retrys.
|
||||||
:low:
|
:low:
|
||||||
fver and others add support new syntax fsp://host:port/file
|
fver and others add support new syntax fsp://host:port/file
|
||||||
add sem locking method
|
add sem locking method
|
||||||
|
|
@ -45,7 +46,6 @@ do not use global variables
|
||||||
CLIENTS
|
CLIENTS
|
||||||
ALL: normalize return error codes of all clients
|
ALL: normalize return error codes of all clients
|
||||||
write new clients for new commands - fsprencmd fpasswd finfo
|
write new clients for new commands - fsprencmd fpasswd finfo
|
||||||
fgetcmd deletes partially transfered file on errors?
|
|
||||||
:low:
|
:low:
|
||||||
add support for more sane fsplist file format (as used by warez
|
add support for more sane fsplist file format (as used by warez
|
||||||
ppl) to fhostcmd
|
ppl) to fhostcmd
|
||||||
|
|
|
||||||
|
|
@ -187,10 +187,13 @@ static void displaydir PROTO2(LS *, stats, register int, num)
|
||||||
|
|
||||||
printfcn(stats, num);
|
printfcn(stats, num);
|
||||||
|
|
||||||
if (f_recursive) {
|
if (f_recursive)
|
||||||
|
{
|
||||||
savedpath = endofpath;
|
savedpath = endofpath;
|
||||||
for (lp = stats; num--; ++lp) {
|
for (lp = stats; num--; ++lp)
|
||||||
if (!(S_ISDIR(lp->lstat.st_mode))) continue;
|
{
|
||||||
|
if (!(S_ISDIR(lp->lstat.st_mode)))
|
||||||
|
continue;
|
||||||
p = lp->name;
|
p = lp->name;
|
||||||
if (p[0] == '.' && (!p[1] || (p[1] == '.' && !p[2]))) continue;
|
if (p[0] == '.' && (!p[1] || (p[1] == '.' && !p[2]))) continue;
|
||||||
if (endofpath != path && endofpath[-1] != '/') *endofpath++ = '/';
|
if (endofpath != path && endofpath[-1] != '/') *endofpath++ = '/';
|
||||||
|
|
|
||||||
|
|
@ -530,10 +530,11 @@ int util_stat PROTO2(char *, path, struct stat *, sbuf)
|
||||||
RDIRENT **dep;
|
RDIRENT **dep;
|
||||||
DDLIST *ddp;
|
DDLIST *ddp;
|
||||||
UBUF *ub;
|
UBUF *ub;
|
||||||
char *fpath, *ppath, *p1, *pfile;
|
char *fpath,*fpath2, *ppath, *p1, *pfile;
|
||||||
int cached=0;
|
int cached=0;
|
||||||
|
|
||||||
fpath = util_abs_path(path);
|
fpath = util_abs_path(path);
|
||||||
|
fpath2 = strdup(fpath);
|
||||||
|
|
||||||
if(!strcmp(fpath,env_dir)) {
|
if(!strcmp(fpath,env_dir)) {
|
||||||
ppath = fpath;
|
ppath = fpath;
|
||||||
|
|
@ -542,6 +543,7 @@ int util_stat PROTO2(char *, path, struct stat *, sbuf)
|
||||||
util_split_path(fpath,&ppath,&p1,&pfile);
|
util_split_path(fpath,&ppath,&p1,&pfile);
|
||||||
*p1='\0';
|
*p1='\0';
|
||||||
}
|
}
|
||||||
|
/* printf("ppath `%s` pfile '%s'\n",ppath,pfile); */
|
||||||
|
|
||||||
/* check if we have ppath cached */
|
/* check if we have ppath cached */
|
||||||
/* printf("Finding `%s` in cache.\n",ppath); */
|
/* printf("Finding `%s` in cache.\n",ppath); */
|
||||||
|
|
@ -555,23 +557,14 @@ int util_stat PROTO2(char *, path, struct stat *, sbuf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
free(fpath);
|
|
||||||
|
|
||||||
fpath = util_abs_path(path);
|
|
||||||
if(!strcmp(fpath,env_dir)) {
|
|
||||||
ppath = fpath;
|
|
||||||
pfile = ".";
|
|
||||||
} else {
|
|
||||||
util_split_path(fpath,&ppath,&p1,&pfile);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* if(cached) printf("Record found in cache.\n",ppath); */
|
/* if(cached) printf("Record found in cache.\n",ppath); */
|
||||||
if(statworks && !cached)
|
if(statworks && !cached)
|
||||||
{
|
{
|
||||||
/* send a new FSP_STAT command to server */
|
/* send a new FSP_STAT command to server */
|
||||||
ub = client_interact(CC_STAT,0L, strlen(fpath),
|
ub = client_interact(CC_STAT,0L, strlen(fpath2),
|
||||||
(unsigned char *) fpath+1, 0, 0);
|
(unsigned char *) fpath2+1, 0, 0);
|
||||||
if(ub->cmd == CC_STAT) {
|
if(ub->cmd == CC_STAT)
|
||||||
|
{
|
||||||
sbuf->st_uid = 0;
|
sbuf->st_uid = 0;
|
||||||
sbuf->st_gid = 0;
|
sbuf->st_gid = 0;
|
||||||
sbuf->st_atime = sbuf->st_mtime =
|
sbuf->st_atime = sbuf->st_mtime =
|
||||||
|
|
@ -588,6 +581,9 @@ int util_stat PROTO2(char *, path, struct stat *, sbuf)
|
||||||
sbuf->st_nlink = 1;
|
sbuf->st_nlink = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(fpath);
|
||||||
|
free(fpath2);
|
||||||
|
|
||||||
if(ub->buf[8]==0)
|
if(ub->buf[8]==0)
|
||||||
{
|
{
|
||||||
errno = ENOENT;
|
errno = ENOENT;
|
||||||
|
|
@ -601,14 +597,22 @@ int util_stat PROTO2(char *, path, struct stat *, sbuf)
|
||||||
}
|
}
|
||||||
} /* CC_STAT */
|
} /* CC_STAT */
|
||||||
|
|
||||||
if( (drp = util_opendir(ppath)) ) {
|
if( (drp = util_opendir(ppath)) )
|
||||||
for(dep = drp->dep; *dep; dep++) {
|
{
|
||||||
if(!strcmp((*dep)->name,pfile)) {
|
for(dep = drp->dep; *dep; dep++)
|
||||||
if((*dep)->type & RDTYPE_DIR) sbuf->st_mode = 0777 | S_IFDIR;
|
{
|
||||||
else sbuf->st_mode = 0666 | S_IFREG;
|
if(!strcmp((*dep)->name,pfile))
|
||||||
|
{
|
||||||
|
if((*dep)->type == RDTYPE_DIR)
|
||||||
|
sbuf->st_mode = 0777 | S_IFDIR;
|
||||||
|
else
|
||||||
|
sbuf->st_mode = 0666 | S_IFREG;
|
||||||
|
|
||||||
|
if((*dep)->type == RDTYPE_DIR)
|
||||||
|
sbuf->st_nlink = 2;
|
||||||
|
else
|
||||||
|
sbuf->st_nlink = 1;
|
||||||
|
|
||||||
if((*dep)->type & RDTYPE_DIR) sbuf->st_nlink = 2;
|
|
||||||
else sbuf->st_nlink = 1;
|
|
||||||
sbuf->st_uid = 0;
|
sbuf->st_uid = 0;
|
||||||
sbuf->st_gid = 0;
|
sbuf->st_gid = 0;
|
||||||
sbuf->st_size = BB_READ4((*dep)->bb_size);
|
sbuf->st_size = BB_READ4((*dep)->bb_size);
|
||||||
|
|
@ -616,6 +620,7 @@ int util_stat PROTO2(char *, path, struct stat *, sbuf)
|
||||||
sbuf->st_ctime = BB_READ4((*dep)->bb_time);
|
sbuf->st_ctime = BB_READ4((*dep)->bb_time);
|
||||||
util_closedir(drp);
|
util_closedir(drp);
|
||||||
free(fpath);
|
free(fpath);
|
||||||
|
free(fpath2);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -623,6 +628,7 @@ int util_stat PROTO2(char *, path, struct stat *, sbuf)
|
||||||
}
|
}
|
||||||
|
|
||||||
free(fpath);
|
free(fpath);
|
||||||
|
free(fpath2);
|
||||||
errno = ENOENT;
|
errno = ENOENT;
|
||||||
return(-1);
|
return(-1);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -112,16 +112,19 @@ PROTO4(char *, path, struct stat *, sbufp, int, mode, int, level)
|
||||||
fprintf(stderr,"Cannot create %s\n",name);
|
fprintf(stderr,"Cannot create %s\n",name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(fp) {
|
if(fp)
|
||||||
|
{
|
||||||
if(
|
if(
|
||||||
#ifdef COMMAND_GET
|
#ifdef COMMAND_GET
|
||||||
util_download
|
util_download
|
||||||
#else
|
#else
|
||||||
util_grab_file
|
util_grab_file
|
||||||
#endif
|
#endif
|
||||||
(path,fp, start_from) == -1) {
|
(path,fp, start_from) == -1)
|
||||||
|
{
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
unlink(name);
|
if(clobbertype==C_TEMPNAME)
|
||||||
|
unlink(name);
|
||||||
} else
|
} else
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
} else fprintf(stderr,"Cannot write %s\n",name);
|
} else fprintf(stderr,"Cannot write %s\n",name);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
dnl Process this file with autoconf to produce a working configure script.
|
dnl Process this file with autoconf to produce a working configure script.
|
||||||
dnl tested with autoconf 2.57
|
dnl tested with autoconf 2.57
|
||||||
AC_INIT(fsp,2.8.1b15,hsn@cybermail.net)
|
AC_INIT(fsp,2.8.1b16,hsn@cybermail.net)
|
||||||
AC_CONFIG_SRCDIR(server/main.c)
|
AC_CONFIG_SRCDIR(server/main.c)
|
||||||
AM_INIT_AUTOMAKE([dist-bzip2])
|
AM_INIT_AUTOMAKE([dist-bzip2])
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user