Changed transfer protocols to use execute()

This commit is contained in:
Michiel Broek 2002-04-22 19:56:01 +00:00
parent 352224c3f4
commit 92c739f160
3 changed files with 314 additions and 295 deletions

View File

@ -4786,6 +4786,9 @@ v0.33.20 10-Feb-2002
Doors are now passed the parameter to display a prompt after Doors are now passed the parameter to display a prompt after
the door or return silently. the door or return silently.
Fixed lharc file return code to LHA. Fixed lharc file return code to LHA.
Calling file transfer protocols now uses the execute call
instead of system.
Improved error logging for file downloads.
mbnewusr: mbnewusr:
New users have the default internal fullscreen editor. New users have the default internal fullscreen editor.

View File

@ -139,11 +139,13 @@ void File_List()
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(" -- %-12s %s [%4ld] %s%s\n", file.Name, (char *) Language(239), file.TimesDL, (char *) Language(238), file.Uploader); printf(" -- %-12s %s [%4ld] %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(" -- %-12s %s [%4ld] %s%s\n", file.Name, (char *) Language(240), file.TimesDL, (char *) Language(238), file.Uploader); 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 */ FileCount++; /* Increase File Counter by 1 */
FileBytes += file.Size; /* Increase File Byte Count */ FileBytes += file.Size; /* Increase File Byte Count */
@ -167,6 +169,8 @@ void File_List()
*/ */
void Download(void) void Download(void)
{ {
DIR *dirp;
struct dirent *dp;
FILE *tf, *fp, *fd; FILE *tf, *fp, *fd;
int i, err, Count = 0; int i, err, Count = 0;
int OldArea; int OldArea;
@ -179,9 +183,10 @@ void Download(void)
Enter(2); Enter(2);
OldArea = iAreaNumber; OldArea = iAreaNumber;
WhosDoingWhat(DOWNLOAD); WhosDoingWhat(DOWNLOAD);
unlink("./tag/filedesc.txt"); system("rm -f ./tag/*");
if ((tf = fopen("taglist", "r+")) == NULL) { if ((tf = fopen("taglist", "r+")) == NULL) {
Syslog('+', "Download command but no files marked");
/* No files marked for download. */ /* No files marked for download. */
pout(12, 0, (char *) Language(258)); pout(12, 0, (char *) Language(258));
Enter(2); Enter(2);
@ -206,7 +211,6 @@ void Download(void)
*/ */
memset(&file, 0, sizeof(file)); memset(&file, 0, sizeof(file));
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.LName, Tag.LFile) == 0) if (strcmp(file.LName, Tag.LFile) == 0)
break; break;
@ -221,8 +225,9 @@ void Download(void)
/* Sorry that file is unavailable for download */ /* Sorry that file is unavailable for download */
printf("%s (%s)\n", (char *) Language(248), file.LName); printf("%s (%s)\n", (char *) Language(248), file.LName);
Tag.Active = FALSE; Tag.Active = FALSE;
Syslog('+', "File %s in area %d unavailable for download, %s",
file.LName, Tag.Area, file.Deleted?"deleted":"missing");
} }
} }
if (Tag.Active) { if (Tag.Active) {
@ -241,6 +246,9 @@ void Download(void)
} }
fprintf(fd, "\r\n"); fprintf(fd, "\r\n");
fclose(fd); fclose(fd);
Syslog('b', "Added info to %s", symTo);
} else {
WriteError("Can't add info to %s", symTo);
} }
/* /*
@ -255,6 +263,15 @@ void Download(void)
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;
} else {
Syslog('b', "Created symlink %s -> %s", symFrom, symTo);
}
if ((access(symFrom, R_OK)) != 0) {
/*
* Extra check, is symlink really there?
*/
WriteError("Symlink %s check failed, unmarking download", symFrom);
Tag.Active = FALSE;
} }
Home(); Home();
} }
@ -266,6 +283,7 @@ void Download(void)
*/ */
fseek(tf, - sizeof(Tag), SEEK_CUR); fseek(tf, - sizeof(Tag), SEEK_CUR);
fwrite(&Tag, sizeof(Tag), 1, tf); fwrite(&Tag, sizeof(Tag), 1, tf);
Syslog('b', "Download file %s marked inactive in taglist", Tag.LFile);
} else { } else {
/* /*
* Count file and sizes. * Count file and sizes.
@ -274,7 +292,6 @@ void Download(void)
Size += file.Size; Size += file.Size;
if ((!file.Free) && (!area.Free)) if ((!file.Free) && (!area.Free))
CostSize += file.Size; CostSize += file.Size;
} }
} }
} }
@ -292,6 +309,7 @@ void Download(void)
Pause(); Pause();
free(symTo); free(symTo);
free(symFrom); free(symFrom);
Syslog('+', "No files left to download");
return; return;
} }
@ -326,26 +344,18 @@ void Download(void)
/* Protocol : */ /* Protocol : */
pout( 3, 0, (char *) Language(351)); printf("%s\n", sProtName); pout( 3, 0, (char *) Language(351)); printf("%s\n", sProtName);
Syslog('+', "Download tagged files start"); Syslog('+', "Download tagged files start, protocol: %s", sProtName);
printf("%s\n\n", sProtAdvice); printf("%s\n\n", sProtAdvice);
fflush(stdout); fflush(stdout);
fflush(stdin); fflush(stdin);
/* HERE WE SHOULD MAKE A DIFFERENCE BETWEEN BATCHING AND NON
* BATCHING PROTOCOLS.
*/
/* /*
* Wait a while before download * Wait a while before download
*/ */
sleep(2); sleep(2);
ElapstimeStart = time(NULL); ElapstimeStart = time(NULL);
temp = calloc(PATH_MAX, sizeof(char));
sprintf(temp, "%s ./tag/*", sProtDn);
Syslog('+', "Download command %s", temp);
/* /*
* Transfer the files. Set the Client/Server time at the maximum * Transfer the files. Set the Client/Server time at the maximum
* time the user has plus 10 minutes. The overall timer 10 seconds * time the user has plus 10 minutes. The overall timer 10 seconds
@ -353,21 +363,44 @@ void Download(void)
*/ */
alarm_set(((exitinfo.iTimeLeft + 10) * 60) - 10); alarm_set(((exitinfo.iTimeLeft + 10) * 60) - 10);
Altime((exitinfo.iTimeLeft + 10) * 60); Altime((exitinfo.iTimeLeft + 10) * 60);
if ((err = system(temp)) != 0) {
/* temp = calloc(PATH_MAX, sizeof(char));
* Only log the error, we might have sent some files sprintf(temp, "%s/%s/tag", CFG.bbs_usersdir, exitinfo.Name);
* instead of nothing. if ((dirp = opendir(temp)) == NULL) {
*/ WriteError("$Download: Can't open dir: %s", temp);
free(temp);
} else {
chdir(temp);
free(temp);
temp = NULL;
while ((dp = readdir(dirp)) != NULL ) {
if (*(dp->d_name) != '.') {
if (temp != NULL) {
temp = xstrcat(temp, (char *)" ");
temp = xstrcat(temp, dp->d_name);
} else {
temp = xstrcpy(dp->d_name);
}
}
}
if (temp != NULL) {
if ((err = execute(sProtDn, temp, NULL, NULL, NULL, NULL))) {
perror(""); perror("");
colour(CFG.HiliteF, CFG.HiliteB); colour(CFG.HiliteF, CFG.HiliteB);
WriteError("Download error %d, prot: %s", err, sProtDn); WriteError("Download error %d, prot: %s", err, sProtDn);
} }
free(temp);
} else {
WriteError("No filebatch created");
}
closedir(dirp);
}
Altime(0); Altime(0);
alarm_off(); alarm_off();
alarm_on(); alarm_on();
fflush(stdout); fflush(stdout);
fflush(stdin); fflush(stdin);
free(temp); Home();
ElapstimeFin = time(NULL); ElapstimeFin = time(NULL);
/* /*
@ -389,11 +422,8 @@ void Download(void)
Count = Size = 0; Count = Size = 0;
if ((tf = fopen("taglist", "r+")) != NULL) { if ((tf = fopen("taglist", "r+")) != NULL) {
while (fread(&Tag, sizeof(Tag), 1, tf) == 1) { while (fread(&Tag, sizeof(Tag), 1, tf) == 1) {
if (Tag.Active) { if (Tag.Active) {
sprintf(symTo, "./tag/%s", Tag.SFile); sprintf(symTo, "./tag/%s", Tag.SFile);
/* /*
* If symlink is gone the file is sent. * If symlink is gone the file is sent.
@ -405,8 +435,7 @@ void Download(void)
fwrite(&Tag, sizeof(Tag), 1, tf); fwrite(&Tag, sizeof(Tag), 1, tf);
/* /*
* Update the download counter and the * Update the download counter and the last download date.
* last download date.
*/ */
SetFileArea(Tag.Area); SetFileArea(Tag.Area);
if ((fp = OpenFileBase(Tag.Area, TRUE)) != NULL) { if ((fp = OpenFileBase(Tag.Area, TRUE)) != NULL) {
@ -427,7 +456,6 @@ void Download(void)
} }
} }
} }
} }
/* /*
@ -1117,8 +1145,6 @@ int Upload()
return 0; return 0;
} }
sprintf(temp, "%s", sProtUp);
Syslog('+', "Upload command %s", temp);
fflush(stdout); fflush(stdout);
fflush(stdin); fflush(stdin);
sleep(2); sleep(2);
@ -1131,7 +1157,7 @@ int Upload()
*/ */
Altime(7200); Altime(7200);
alarm_set(7190); alarm_set(7190);
if ((err = system(temp))) { if ((err = execute(sProtUp, (char *)"", NULL, NULL, NULL, NULL))) {
/* /*
* Log any errors * Log any errors
*/ */
@ -1234,7 +1260,6 @@ int DownloadDirect(char *Name, int Wait)
{ {
int err, rc; int err, rc;
char *symTo, *symFrom; char *symTo, *symFrom;
char *temp;
long Size; long Size;
time_t ElapstimeStart, ElapstimeFin, iTime; time_t ElapstimeStart, ElapstimeFin, iTime;
long iTransfer = 0; long iTransfer = 0;
@ -1294,10 +1319,6 @@ int DownloadDirect(char *Name, int Wait)
sleep(2); sleep(2);
ElapstimeStart = time(NULL); ElapstimeStart = time(NULL);
temp = calloc(PATH_MAX, sizeof(char));
sprintf(temp, "%s '%s'", sProtDn, symFrom);
Syslog('+', "Download command %s", temp);
/* /*
* Transfer the file. Set the Client/Server time at the maximum * Transfer the file. Set the Client/Server time at the maximum
* time the user has plus 10 minutes. The overall timer 10 seconds * time the user has plus 10 minutes. The overall timer 10 seconds
@ -1305,7 +1326,7 @@ int DownloadDirect(char *Name, int Wait)
*/ */
alarm_set(((exitinfo.iTimeLeft + 10) * 60) - 10); alarm_set(((exitinfo.iTimeLeft + 10) * 60) - 10);
Altime((exitinfo.iTimeLeft + 10) * 60); Altime((exitinfo.iTimeLeft + 10) * 60);
if ((err = system(temp))) { if ((err = execute(sProtDn, symFrom, NULL, NULL, NULL, NULL))) {
/* /*
* Only log the error, we might have sent some files * Only log the error, we might have sent some files
* instead of nothing. * instead of nothing.
@ -1319,7 +1340,6 @@ int DownloadDirect(char *Name, int Wait)
alarm_on(); alarm_on();
fflush(stdout); fflush(stdout);
fflush(stdin); fflush(stdin);
free(temp);
ElapstimeFin = time(NULL); ElapstimeFin = time(NULL);
/* /*
@ -1656,8 +1676,6 @@ int Upload_Home()
return 0; return 0;
} }
sprintf(temp, "%s", sProtUp);
Syslog('+', "Upload command %s", temp);
fflush(stdout); fflush(stdout);
fflush(stdin); fflush(stdin);
sleep(2); sleep(2);
@ -1670,7 +1688,7 @@ int Upload_Home()
*/ */
Altime(7200); Altime(7200);
alarm_set(7190); alarm_set(7190);
if ((err = system(temp)) != 0) { if ((err = execute(sProtUp, (char *)"", NULL, NULL, NULL, NULL))) {
/* /*
* Log any errors * Log any errors
*/ */

View File

@ -1109,8 +1109,6 @@ void OLR_Upload(void)
return; return;
} }
sprintf(temp, "%s", sProtUp);
Syslog('+', "Upload command %s", temp);
fflush(stdout); fflush(stdout);
fflush(stdin); fflush(stdin);
sleep(2); sleep(2);
@ -1121,7 +1119,7 @@ void OLR_Upload(void)
*/ */
Altime(7200); Altime(7200);
alarm_set(7190); alarm_set(7190);
if ((err = system(temp)) != 0) { if ((err = execute(sProtUp, (char *)"", NULL, NULL, NULL, NULL))) {
colour(CFG.HiliteF, CFG.HiliteB); colour(CFG.HiliteF, CFG.HiliteB);
WriteError("$Upload error %d, prot: %s", err, sProtUp); WriteError("$Upload error %d, prot: %s", err, sProtUp);
} }
@ -1220,7 +1218,7 @@ void OLR_Upload(void)
Syslog('m', "Unarc %s", temp); Syslog('m', "Unarc %s", temp);
colour(CFG.HiliteF, CFG.HiliteB); colour(CFG.HiliteF, CFG.HiliteB);
if ((err = system(temp))) { if ((err = execute(archiver.funarc, File, NULL, (char *)"/dev/null", (char *)"/dev/null", (char *)"/dev/null"))) {
WriteError("$Failed %s", temp); WriteError("$Failed %s", temp);
/* ERROR */ /* ERROR */
printf("%s\n", (char *) Language(217)); printf("%s\n", (char *) Language(217));