diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c index d029e6f88874bfb564b75b8418515f57377ebfed..52712f812b75325bf75f01a0d994bdf8ae2a1414 100644 --- a/src/sbbs3/ftpsrvr.c +++ b/src/sbbs3/ftpsrvr.c @@ -541,7 +541,7 @@ JSContext* js_initcx(JSObject** glob) return(NULL); } - if((sysobj=CreateSystemObject(&scfg, js_cx, js_glob))==NULL) { + if((sysobj=js_CreateSystemObject(&scfg, js_cx, js_glob))==NULL) { JS_DestroyContext(js_cx); return(NULL); } @@ -1553,6 +1553,7 @@ static void filexfer(SOCKADDR_IN* addr, SOCKET ctrl_sock, SOCKET pasv_sock, SOCK int result; int addr_len; SOCKADDR_IN server_addr; + BOOL reuseaddr; static xfer_t xfer; struct timeval tv; fd_set socket_set; @@ -1583,11 +1584,15 @@ static void filexfer(SOCKADDR_IN* addr, SOCKET ctrl_sock, SOCKET pasv_sock, SOCK if(startup->options&FTP_OPT_DEBUG_DATA) lprintf("%04d DATA socket %d opened",ctrl_sock,*data_sock); + /* Use port-1 for all data connections */ + reuseaddr=TRUE; + setsockopt(*data_sock,SOL_SOCKET,SO_REUSEADDR,(char*)&reuseaddr,sizeof(reuseaddr)); + memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_addr.s_addr = htonl(startup->interface_addr); server_addr.sin_family = AF_INET; - server_addr.sin_port = htons(0); /* 20? */ + server_addr.sin_port = htons((WORD)(startup->port-1)); /* 20? */ if((result=bind(*data_sock, (struct sockaddr *) &server_addr ,sizeof(server_addr)))!=0) { @@ -2283,10 +2288,13 @@ static void ctrl_thread(void* arg) } #ifdef JAVASCRIPT - if((js_user=CreateUserObject(&scfg, js_cx, js_glob, "user", &user))==NULL) { + if((js_user=js_CreateUserObject(&scfg, js_cx, js_glob, "user", &user))==NULL) { lprintf("%04d !JavaScript ERROR creating user object",sock); } -// js_CreateLibsObject(&scfg, js_cx, js_glob, "libraries + if(js_CreateFileAreaObject(&scfg, js_cx, js_glob, &user + ,startup->html_index_file)==NULL) { + lprintf("%04d !JavaScript ERROR creating file area object",sock); + } #endif if(sysop) @@ -2753,8 +2761,9 @@ static void ctrl_thread(void* arg) continue; } /* RETR */ - lprintf("%04d %s downloading: %s (%ld bytes)" - ,sock,user.alias,fname,flength(fname)); + lprintf("%04d %s downloading: %s (%ld bytes) in %s mode" + ,sock,user.alias,fname,flength(fname) + ,pasv_sock==INVALID_SOCKET ? "active":"passive"); sockprintf(sock,"150 Opening BINARY mode data connection for file transfer."); filexfer(&data_addr,sock,pasv_sock,&data_sock,fname,filepos ,&transfer_inprogress,&transfer_aborted,FALSE,FALSE @@ -2776,7 +2785,8 @@ static void ctrl_thread(void* arg) else /* relative */ sprintf(fname,"%s%s",local_dir,p); - lprintf("%04d %s uploading %s", sock,user.alias,fname); + lprintf("%04d %s uploading: %s in %s mode", sock,user.alias,fname + ,pasv_sock==INVALID_SOCKET ? "active":"passive"); sockprintf(sock,"150 Opening BINARY mode data connection for file transfer."); filexfer(&data_addr,sock,pasv_sock,&data_sock,fname,filepos ,&transfer_inprogress,&transfer_aborted,FALSE,FALSE @@ -3178,8 +3188,9 @@ static void ctrl_thread(void* arg) success=TRUE; delfile=TRUE; credits=FALSE; - lprintf("%04d %s downloading QWK packet (%ld bytes)" - ,sock,user.alias,flength(fname)); + lprintf("%04d %s downloading QWK packet (%ld bytes) in %s mode" + ,sock,user.alias,flength(fname) + ,pasv_sock==INVALID_SOCKET ? "active":"passive"); /* ASCII Index File */ } else if(startup->options&FTP_OPT_INDEX_FILE && !stricmp(p,startup->index_file_name) @@ -3192,8 +3203,9 @@ static void ctrl_thread(void* arg) continue; } if(!getsize && !getdate) - lprintf("%04d %s downloading index for %s" - ,sock,user.alias,vpath(lib,dir,str)); + lprintf("%04d %s downloading index for %s in %s mode" + ,sock,user.alias,vpath(lib,dir,str) + ,pasv_sock==INVALID_SOCKET ? "active":"passive"); success=TRUE; credits=FALSE; tmpfile=TRUE; @@ -3333,8 +3345,9 @@ static void ctrl_thread(void* arg) continue; } if(!getsize && !getdate) - lprintf("%04d %s downloading HTML index for %s" - ,sock,user.alias,vpath(lib,dir,str)); + lprintf("%04d %s downloading HTML index for %s in %s mode" + ,sock,user.alias,vpath(lib,dir,str) + ,pasv_sock==INVALID_SOCKET ? "active":"passive"); success=TRUE; credits=FALSE; tmpfile=TRUE; @@ -3421,8 +3434,9 @@ static void ctrl_thread(void* arg) if(fexist(fname)) { success=TRUE; if(!getsize && !getdate && !delecmd) - lprintf("%04d %s downloading: %s (%ld bytes)" - ,sock,user.alias,fname,flength(fname)); + lprintf("%04d %s downloading: %s (%ld bytes) in %s mode" + ,sock,user.alias,fname,flength(fname) + ,pasv_sock==INVALID_SOCKET ? "active":"passive"); } } } @@ -3553,8 +3567,9 @@ static void ctrl_thread(void* arg) continue; } sprintf(fname,"%sfile/%04d.rep",scfg.data_dir,user.number); - lprintf("%04d %s uploading %s" - ,sock,user.alias,fname); + lprintf("%04d %s uploading: %s in %s mode" + ,sock,user.alias,fname + ,pasv_sock==INVALID_SOCKET ? "active":"passive"); } else { if(!chk_ar(&scfg,scfg.dir[dir]->ul_ar,&user)) { lprintf("%04d !%s has insufficient access to upload to /%s/%s" @@ -3582,9 +3597,10 @@ static void ctrl_thread(void* arg) sockprintf(sock,"553 File already exists."); continue; } - lprintf("%04d %s uploading %s to /%s/%s" + lprintf("%04d %s uploading: %s to /%s/%s in %s mode" ,sock,user.alias,fname - ,scfg.lib[scfg.dir[dir]->lib]->sname,scfg.dir[dir]->code); + ,scfg.lib[scfg.dir[dir]->lib]->sname,scfg.dir[dir]->code + ,pasv_sock==INVALID_SOCKET ? "active":"passive"); } sockprintf(sock,"150 Opening BINARY mode data connection for file transfer."); filexfer(&data_addr,sock,pasv_sock,&data_sock,fname,filepos