From 2bacf3601f2d05015a8440c021897ec3ee3116b3 Mon Sep 17 00:00:00 2001 From: hsn <> Date: Wed, 5 Jan 2005 17:19:56 +0000 Subject: [PATCH] repo sync --- BETA.README | 3 +- ChangeLog | 11 ++ TODO | 20 ++-- bsd_src/function.c | 18 ++-- bsd_src/glob.c | 4 +- bsd_src/operator.c | 12 +-- bsd_src/option.c | 4 +- client/lib.c | 14 +-- client/lock.c | 52 +++++----- client/util.c | 4 +- clients/.cvsignore | 2 + clients/Makefile.am | 8 +- clients/fcatcmd.c | 2 +- clients/fcdcmd.c | 2 +- clients/fducmd.c | 2 +- clients/fgetcmd.c | 8 +- clients/fhost.c | 234 ++++++++++++++++++++++++++++++++++++++++++ clients/fhost.h | 10 +- clients/fhostcmd.c | 196 +++-------------------------------- clients/flscmd.c | 2 +- clients/fmkdir.c | 2 +- clients/fmvcmd.c | 4 +- clients/fprocmd.c | 2 +- clients/fput.c | 8 +- clients/frmcmd.c | 2 +- clients/frmdircmd.c | 2 +- clients/fsetupcmd.c | 192 ++++++++++++++++++++++++++++++++++ clients/fspprof.l | 11 +- clients/fspsites.l | 47 +++++++++ clients/fstatcmd.c | 2 +- clients/fver.c | 2 +- clients/merge.c | 4 +- common/strdup.c | 2 +- common/udp_io.c | 3 + configure.ac | 2 +- include/client_conf.h | 2 + server/main.c | 11 +- 37 files changed, 609 insertions(+), 297 deletions(-) create mode 100644 clients/fhost.c create mode 100644 clients/fsetupcmd.c create mode 100644 clients/fspsites.l diff --git a/BETA.README b/BETA.README index 67f9b82..aeca448 100644 --- a/BETA.README +++ b/BETA.README @@ -15,11 +15,10 @@ FSP Protocol wire changes: with older software versions. - security: symlink to FILE can escape from FSP root directory, this will be fixed as part of symlink support. -- add FSP change password command (do we really need this ??) Code fixups: - fix Sven's compiling problems on various unixes -- normalize return error codes of all clients - fspd: add special defence against rapid/double fire clients (burst command in fspclient) +- add FSP change password command (do we really need this ??) * for next point Stable version 2.8.3 - hard coded access list, do not load it from filesystem diff --git a/ChangeLog b/ChangeLog index 2295654..ae34031 100644 --- a/ChangeLog +++ b/ChangeLog @@ -45,6 +45,17 @@ Version NEXT FAQ: Added two section making FSP slower/faster, version bumped to 0.2 do not use exit code -1 in fspscan + LAMAH fspd: improve some error messages, run on port 80 by default + Changed all exit() calls to use standard EX_* values. Some utilities + still do not returns error exit when they should. + fhostcmd: split host managing functions into fhost.c + fhost.c: do not output partial results when dns resolving fails + fhost.c: fallback to other display method (host/ip name) on + resolving failure + common lib: When doing addr resolving turn port 0 into 21. + fhostcmd: ignore servers without port number set + new command fsetup: C rewrite of old Perl script. This command is + like fhostcmd but uses standard fspsites file format Version 2.8.1b22 - 20 Dec 2004 fixed sf bug 1060594: fspd: owner can't rename files diff --git a/TODO b/TODO index bf30087..a9fe397 100644 --- a/TODO +++ b/TODO @@ -1,11 +1,11 @@ FSP SUITE TO DO LIST +==================== + /* maintained by hsn -at- netmag * cz */ Radim Kolar's personal wishlist from 1997 *-high priority-* - show loosers online (finfo command) and server statz -* l o w * - - password change command !? TESTSUITE NEEDED: Write a simple FSP protocol testing tool @@ -38,16 +38,9 @@ LOCKING CLIENTS :high: -normalize return error codes of all clients -write new clients for new commands - fpasswd finfo +some client commands should exit with nonzero rc on failure :low: -add support for more sane fsplist file format (as used by warez -ppl) to fhostcmd -it looks like -#FSP Sites list -genie.lut.ac.uk 21 genie / # small UK site - clients do not freeing memory allocated from glob() FUTURE FEATURES FOR SERVER: @@ -57,7 +50,10 @@ report number of clients connected, size of hostable in new command special defence against rapid/double fire clients (burst command in fspclient) Native Supports for symbolic links (needed for mirroring Debian) new LSTAT COMMAND, new MAKELINK command + +SERVER DIR LISTINGS Server should save .FSP_CONTENT using 1k size directory blocks +Server should support sending different sized directory blocks :midle:may not be in 2.8.2 write FSP_CHANGE_PASSWORD command @@ -79,14 +75,14 @@ FSP Proxy repeater - take a look at old code, but we have NAT and fspproxy PERFORMANCE: do host hashtable shrinking/clearing sometimes -stat cache pro FSP_STAT a other stat() calls +stat cache for FSP_STAT a other stat() calls chage O(N) fifo cache to some more sane lru hashtable code. background time() alarm() caller Current performance 1925648B/s MAN: separate manpage for 7 fsp (protocol definition) == write FSP RFC -Register udp/21 for FSP in iana +Register udp/21 for FSP in iana. FSP RFC needed! manual page for fmvcmd.1 libraries and support for FSP protocol diff --git a/bsd_src/function.c b/bsd_src/function.c index 9129fdf..fcbf784 100644 --- a/bsd_src/function.c +++ b/bsd_src/function.c @@ -114,7 +114,7 @@ static PLAN *palloc (enum ntype t, int (*f)()) return(new); } perror("palloc"); - exit(1); + exit(EX_OSERR); } extern int isoutput; @@ -154,7 +154,7 @@ static long find_parsenum (PLAN * plan, const char * option, char * str, if ( (!value && endchar == str) || (endchar[0] && (!endch || endchar[0] != *endch))) { fprintf(stderr,"%s: %s", option, "illegal numeric value"); - exit(1); + exit(EX_USAGE); } if (endch) *endch = endchar[0]; @@ -203,7 +203,7 @@ static void brace_subst (char * orig, char ** store, char * path, int len) if (!(*store = (char *)realloc(*store, len *= 2))) { perror("realloc"); client_done(); - exit(1); + exit(EX_OSERR); } bcopy(path, p, plen); p += plen; @@ -279,11 +279,11 @@ static int find_exec (PLAN * plan, struct stat * sbuf, char * path) { case -1: perror ("fork"); - exit(1); + exit(EX_OSERR); case 0: execvp(plan->e_argv[0], plan->e_argv); perror ("execvp"); - exit(1); + exit(EX_OSERR); } pid = wait(&status); @@ -296,7 +296,7 @@ static char *emalloc_ffind (unsigned int len) if ( (p = (char *)malloc(len))) return((char *)p); perror("malloc"); - exit(1); + exit(EX_OSERR); } /* @@ -320,7 +320,7 @@ PLAN *c_exec (char *** argvp, int isok) for (ap = argv = *argvp;; ++ap) { if (!*ap) { fprintf(stderr,"%s: no terminating", isok ? "-ok" : "-exec"); - exit(1); + exit(EX_USAGE); } if (**ap == ';') break; } @@ -445,7 +445,7 @@ PLAN *c_newer (char * filename) if (stat(filename, &sb)) { perror("stat"); - exit(1); + exit(EX_NOINPUT); } new = palloc(N_NEWER, find_newer); new->t_data = sb.st_mtime; @@ -541,7 +541,7 @@ PLAN *c_type (char * typestring) break; default: fprintf(stderr,"-type: unknown type"); - exit(1); + exit(EX_USAGE); } new = palloc(N_TYPE, find_type); diff --git a/bsd_src/glob.c b/bsd_src/glob.c index 44c3e5b..5ffff72 100644 --- a/bsd_src/glob.c +++ b/bsd_src/glob.c @@ -118,7 +118,7 @@ static char *strspl (register char * cp, register const char * dp) if (ep == (char *)0) { perror("Out of memory 1"); - exit(1); + exit(EX_OSERR); } (void) strcpy(ep, cp); (void) strcat(ep, dp); @@ -405,7 +405,7 @@ static char **copyblk (register char ** v) nv = (char **)malloc((unsigned)((blklen(v) + 1) * sizeof(char **))); if (nv == (char **)0) { perror("Out of memory 2"); - exit(2); + exit(EX_OSERR); } return (blkcpy(nv, v)); } diff --git a/bsd_src/operator.c b/bsd_src/operator.c index 3554a83..76c0e9b 100644 --- a/bsd_src/operator.c +++ b/bsd_src/operator.c @@ -93,7 +93,7 @@ static PLAN *yankexpr (PLAN ** planp) if (next->type == N_CLOSEPAREN) { if (subplan == NULL) { fprintf(stderr,"(): empty inner expression"); - exit(1); + exit(EX_USAGE); } node->p_data[0] = subplan; node->type = N_EXPR; @@ -134,7 +134,7 @@ PLAN *paren_squish (PLAN * plan) */ if (expr->type == N_CLOSEPAREN) { fprintf(stderr,"): no beginning '('"); - exit(1); + exit(EX_USAGE); } /* add the expression to our result plan */ @@ -183,11 +183,11 @@ PLAN *not_squish (PLAN * plan) } if (node == NULL) { fprintf(stderr,"!: no following expression"); - exit(1); + exit(EX_USAGE); } if (node->type == N_OR) { fprintf(stderr,"!: nothing between ! and -o"); - exit(1); + exit(EX_USAGE); } if (notlevel % 2 != 1) next = node; else next->p_data[0] = node; @@ -234,13 +234,13 @@ PLAN *or_squish (PLAN * plan) if (next->type == N_OR) { if (result == NULL) { fprintf(stderr,"-o: no expression before -o"); - exit(1); + exit(EX_USAGE); } next->p_data[0] = result; next->p_data[1] = or_squish(plan); if (next->p_data[1] == NULL) { fprintf(stderr,"-o: no expression after -o"); - exit(1); + exit(EX_USAGE); } return(next); } diff --git a/bsd_src/option.c b/bsd_src/option.c index ec85e42..93564bb 100644 --- a/bsd_src/option.c +++ b/bsd_src/option.c @@ -85,13 +85,13 @@ PLAN *find_create (char *** argvp) if ((p = option(*argv)) == NULL) { (void)fprintf(stderr, "find: unknown option %s.\n", *argv); - exit(1); + exit(EX_USAGE); } ++argv; if (p->flags & (O_ARGV|O_ARGVP) && !*argv) { (void)fprintf(stderr, "find: %s requires additional arguments.\n", *--argv); - exit(1); + exit(EX_USAGE); } switch(p->flags) { diff --git a/client/lib.c b/client/lib.c index 4528b4f..9ec6149 100644 --- a/client/lib.c +++ b/client/lib.c @@ -104,7 +104,7 @@ UBUF *client_interact (unsigned char cmd, unsigned long pos, #ifdef CLIENT_TIMEOUT if (total_delay/1000 >= env_timeout ) { fprintf(stderr, "\rRemote server not responding.\n"); - exit(1); + exit(EX_UNAVAILABLE); } #endif idle_delay = idle_delay * 4 / 3; @@ -128,7 +128,7 @@ UBUF *client_interact (unsigned char cmd, unsigned long pos, continue; default: perror("sendto"); - exit(1); + exit(EX_IOERR); } } /* Check if w_delay is within limits */ @@ -204,7 +204,7 @@ UBUF *client_interact (unsigned char cmd, unsigned long pos, if(client_intr_state == 2) { if(!key_persists) client_done(); - exit(1); + exit(EX_TEMPFAIL); } #ifdef DEBUG @@ -221,9 +221,9 @@ UBUF *client_interact (unsigned char cmd, unsigned long pos, static RETSIGTYPE client_intr (int signum) { switch(client_intr_state) { - case 0: exit(2); + case 0: exit(EX_TEMPFAIL); case 1: client_intr_state = 2; break; - case 2: exit(3); + case 2: exit(EX_TEMPFAIL); } #ifndef RELIABLE_SIGNALS signal(SIGINT,client_intr); @@ -241,12 +241,12 @@ void init_client (const char * host, unsigned short port, unsigned short myport) if((myfd = _x_udp(env_listen_on,&myport)) == -1) { perror("socket open"); - exit(1); + exit(EX_OSERR); } if(_x_adr(host,port,&server_addr) == -1) { perror("server addr"); - exit(1); + exit(EX_OSERR); } client_init_key(server_addr.sin_addr.s_addr,port,getpid()); diff --git a/client/lock.c b/client/lock.c index 736d248..d0edc75 100644 --- a/client/lock.c +++ b/client/lock.c @@ -62,14 +62,14 @@ unsigned short client_get_key (void) { if(flock(lock_fd,LOCK_EX) == -1) { perror("flock"); - exit(1); + exit(EX_OSERR); } if(read(lock_fd,&okey,sizeof(okey)) == -1) { - perror("read"); exit(1); + perror("read"); exit(EX_OSERR); } if(lseek(lock_fd,0L,0) == -1) { perror("seek"); - exit(1); + exit(EX_OSERR); } return(okey); } @@ -80,15 +80,15 @@ void client_set_key (unsigned short nkey) key=nkey; if(write(lock_fd,&key,sizeof(key)) == -1) { perror("write"); - exit(1); + exit(EX_OSERR); } if(lseek(lock_fd,0L,0) == -1) { perror("seek"); - exit(1); + exit(EX_OSERR); } if(flock(lock_fd,LOCK_UN) == -1) { perror("unflock"); - exit(1); + exit(EX_OSERR); } } @@ -129,15 +129,15 @@ unsigned short client_get_key (void) { if(lockf(lock_fd,F_LOCK,sizeof(okey)) == -1) { perror("lockf"); - exit(1); + exit(EX_OSERR); } if(read(lock_fd,&okey,sizeof(okey)) == -1) { perror("read"); - exit(1); + exit(EX_OSERR); } if(lseek(lock_fd,0L,0) == -1) { perror("seek"); - exit(1); + exit(EX_OSERR); } return(okey); } @@ -148,15 +148,15 @@ void client_set_key (unsigned short nkey) key=nkey; if(write(lock_fd,&key,sizeof(key)) == -1) { perror("write"); - exit(1); + exit(EX_OSERR); } if(lseek(lock_fd,0L,0) == -1) { perror("seek"); - exit(1); + exit(EX_OSERR); } if(lockf(lock_fd,F_ULOCK,sizeof(key)) == -1) { perror("unlockf"); - exit(1); + exit(EX_OSERR); } } @@ -199,7 +199,7 @@ unsigned short client_get_key (void) { if(lockf(lock_fd,F_LOCK,2) == -1) { perror("lockf"); - exit(1); + exit(EX_OSERR); } return(*share_key); } @@ -209,7 +209,7 @@ void client_set_key (unsigned short key) *share_key = key; if(lockf(lock_fd,F_ULOCK,2) == -1) { perror("unlockf"); - exit(1); + exit(EX_OSERR); } } @@ -228,15 +228,15 @@ void client_init_key (unsigned long server_addr, if((lock_key = ftok(key_string,238)) == -1) { perror("ftok"); - exit(1); + exit(EX_OSERR); } if((lock_shm = shmget(lock_key,2*sizeof(unsigned int),IPC_CREAT|0666)) == -1) { perror("shmget"); - exit(1); + exit(EX_OSERR); } if(!(share_key = (unsigned int *) shmat(lock_shm,(char*)0,0))) { perror("shmat"); - exit(1); + exit(EX_OSERR); } } @@ -317,7 +317,7 @@ unsigned short client_get_key (void) if(semop(lock_sem,&sem,1) == -1 ) { perror("semop"); - exit(1); + exit(EX_OSERR); } return(*share_key); } @@ -333,7 +333,7 @@ void client_set_key (unsigned short key) *share_key = key; if(semop(lock_sem,&sem,1) == -1) { perror("semop"); - exit(1); + exit(EX_OSERR); } } @@ -356,15 +356,15 @@ void client_init_key (unsigned long server_addr, if((lock_key = ftok(key_string,238)) == -1) { perror("ftok"); - exit(1); + exit(EX_OSERR); } if((lock_shm = shmget(lock_key,2*sizeof(unsigned int),IPC_CREAT|0666)) == -1) { perror("shmget"); - exit(1); + exit(EX_OSERR); } if(!(share_key = (unsigned int *) shmat(lock_shm,(char*)0,0))) { perror("shmat"); - exit(1); + exit(EX_OSERR); } if((lock_sem = semget(lock_key,0,0)) == -1) { @@ -377,7 +377,7 @@ void client_init_key (unsigned long server_addr, if(semctl(lock_sem,0,SETVAL,sun) == -1) { perror("semctl setval"); - exit(1); + exit(EX_OSERR); } *share_key = key; } @@ -389,7 +389,7 @@ void client_init_key (unsigned long server_addr, if(semop(lock_sem,&sem,1) == -1) { perror("semop"); - exit(1); + exit(EX_OSERR); } } @@ -400,14 +400,14 @@ void client_destroy_key(void) if (shmdt((char *)share_key) < 0) { perror("shmdt"); - exit(1); + exit(EX_OSERR); } /* check if we are only one process holding lock */ rc = semctl(lock_sem,1,GETVAL); if (rc == -1) { perror("semctl"); - exit(1); + exit(EX_OSERR); } if (rc == 1) { diff --git a/client/util.c b/client/util.c index 37c2fc3..f582895 100644 --- a/client/util.c +++ b/client/util.c @@ -460,11 +460,11 @@ static void util_get_env (void) if(!(env_host = getenv("FSP_HOST"))) { fputs("No FSP_HOST specified.\n",stderr); - exit(1); + exit(EX_CONFIG); } if(!(env_port = getenv("FSP_PORT"))) { fputs("No FSP_PORT specified.\n",stderr); - exit(1); + exit(EX_CONFIG); } if(!(env_dir = getenv("FSP_DIR"))) { env_dir = "/"; diff --git a/clients/.cvsignore b/clients/.cvsignore index a7ed9d0..e40b31a 100644 --- a/clients/.cvsignore +++ b/clients/.cvsignore @@ -19,5 +19,7 @@ fstatcmd fver .deps fspprof.c +fspsites.c fmvcmd fbye +fsetupcmd diff --git a/clients/Makefile.am b/clients/Makefile.am index 5deafd6..f74b390 100644 --- a/clients/Makefile.am +++ b/clients/Makefile.am @@ -2,7 +2,7 @@ bin_PROGRAMS=fcatcmd fcdcmd fducmd ffindcmd fgetcmd fgrabcmd fhostcmd \ flscmd fmkdir fprocmd fput frmcmd frmdircmd fver fspmerge \ - fstatcmd fmvcmd fbye + fstatcmd fmvcmd fbye fsetupcmd LDADD=-L../common -L../bsd_src -L../client -lclient -lcommon -lbsdfsp $(EX_LIBS) @@ -10,13 +10,15 @@ fspmerge_SOURCES=merge.c printpro.c fspprof.l fcdcmd_SOURCES=fcdcmd.c printpro.c fprocmd_SOURCES=printpro.c fprocmd.c noinst_HEADERS=printpro.h fhost.h merge.h -fhostcmd_SOURCES=fhostcmd.c fspprof.l +fhostcmd_SOURCES=fhostcmd.c fspprof.l fhost.c fhostcmd_LDADD=$(LDADD) +fsetupcmd_SOURCES=fsetupcmd.c fspsites.l fhost.c +fsetupcmd_LDADD=$(LDADD) fspmerge_LDADD=fcatcmd_m.o fcdcmd_m.o fducmd_m.o ffindcmd_m.o fgetcmd_m.o \ fgrabcmd_m.o fhostcmd_m.o flscmd_m.o fmkdir_m.o fprocmd_m.o \ fput_m.o frmcmd_m.o frmdircmd_m.o fver_m.o fmvcmd_m.o \ - fstatcmd_m.o fbye_m.o $(LDADD) + fstatcmd_m.o fbye_m.o fhost.o $(LDADD) fgetcmd_CFLAGS:=-DCOMMAND_GET diff --git a/clients/fcatcmd.c b/clients/fcatcmd.c index 746818d..ff600e0 100644 --- a/clients/fcatcmd.c +++ b/clients/fcatcmd.c @@ -51,5 +51,5 @@ int main (int argc, char ** argv) client_done(); - exit(0); + exit(EX_OK); } diff --git a/clients/fcdcmd.c b/clients/fcdcmd.c index a136f7f..ec12eca 100644 --- a/clients/fcdcmd.c +++ b/clients/fcdcmd.c @@ -65,5 +65,5 @@ int main (int argc, char ** argv) } } client_done(); - exit(0); + exit(EX_OK); } diff --git a/clients/fducmd.c b/clients/fducmd.c index d15bcd2..bcc9af2 100644 --- a/clients/fducmd.c +++ b/clients/fducmd.c @@ -87,7 +87,7 @@ int main (int argc, char ** argv) break; default: fprintf(stderr,"Usage: du [-r|a|s] directory name.\n"); - exit(0); + exit(EX_USAGE); } /* special case `du' without file arguments -- becomes `du .' */ diff --git a/clients/fgetcmd.c b/clients/fgetcmd.c index f4c7954..2112413 100644 --- a/clients/fgetcmd.c +++ b/clients/fgetcmd.c @@ -48,7 +48,7 @@ static RETSIGTYPE fsp_cleanup (int signum) char filename[20]; sprintf(filename,".fsp.%d",getpid()); unlink(filename); - exit(1); + exit(EX_TEMPFAIL); } static void @@ -231,7 +231,7 @@ int main (int argc, char ** argv) env_client(); if (strcmp(env_local_dir,".") && chdir(env_local_dir)) { perror("chdir"); - exit(1); + exit(EX_NOINPUT); } while ((optletter=getopt(argc, argv,"ofutnacrph?")) != EOF) @@ -262,7 +262,7 @@ int main (int argc, char ** argv) case 'h': case '?': usage(); - exit(0); + exit(EX_OK); } if(argc > optind) { @@ -324,5 +324,5 @@ int main (int argc, char ** argv) client_done(); - exit(0); + exit(EX_OK); } diff --git a/clients/fhost.c b/clients/fhost.c new file mode 100644 index 0000000..54bf193 --- /dev/null +++ b/clients/fhost.c @@ -0,0 +1,234 @@ + /*********************************************************************\ + * Copyright (c) 1993 by Michael Meskes * + * (meskes@ulysses.informatik.rwth-aachen.de) * + * Copyright (c) 2003-2005 by Radim Kolar (hsn@cybermail.net) * + * * + * You may copy or modify this file in any manner you wish, provided * + * that this notice is always included, and that you hold the author * + * harmless for any loss or damage resulting from the installation or * + * use of this software. * + \*********************************************************************/ + +#include "tweak.h" +#include "client_def.h" +#include "c_extern.h" +#include +#include "my-string.h" +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef STDC_HEADERS +#include +#endif +#ifdef HOST_LOOKUP +#include +#endif + +#include "fhost.h" + +static struct fsp_host *host; +static int hostsize=0; + +/* allocate and init fsp_host structure */ +struct fsp_host * init_host(void) +{ + struct fsp_host *h; + + h=malloc(sizeof(struct fsp_host)); + if(h==NULL) + { + perror("init_host"); + exit(EX_OSERR); + } + + h->hostname=NULL; + h->hostaddr=NULL; + h->alias=calloc(1,sizeof(char *)); + h->port=-1; + h->dir=NULL; + h->delay=-1; + h->local_port=-1; + h->timeout=-1; + h->trace=-1; + h->local_dir=NULL; + h->password=NULL; + + return h; +} + +void add_host_alias(struct fsp_host *h, const char *name) +{ + int i=0; + while(h->alias[i]) + i++; + h->alias=realloc(h->alias,sizeof(char *)*(i+2)); + h->alias[i]=strdup(name); + h->alias[i+1]=NULL; +} + +void add_host(struct fsp_host *h) +{ + if (hostsize==0) + host=NULL; + if(h==NULL) return; + if(h->port<=0) return; + host=realloc(host,sizeof(struct fsp_host)*(hostsize+1)); + if(host==NULL) + { + perror("host realloc"); + exit(EX_OSERR); + } + memcpy(host+hostsize,h,sizeof(struct fsp_host)); + hostsize++; + return; +} + +struct fsp_host *find_host(const char *name) +{ + int i,j; + + if(name==NULL || hostsize==0 ) return NULL; + for(i=0;ihostname || setup->hostaddr) { + if (csh) printf("setenv FSP_HOST "); + else printf("FSP_HOST="); + /* kill trailing junk from hostname and hostaddr */ + if(setup->hostname) { + for(p = setup->hostname; *p && *p!='\n' && *p!= ' '; p++); + *p = 0; + } + if(setup->hostaddr) { + for(p=setup->hostaddr;*p && *p !='\n' && *p!=' ';p++); + *p = 0; + } + if(lhost==NAME && !setup->hostname) { + /* look for name */ +#if HOST_LOOKUP + addr=inet_addr(setup->hostaddr); + if ( (hp=gethostbyaddr((char *) &addr, sizeof(addr), AF_INET))) + setup->hostname= (char *)hp->h_name; +#endif + if (!setup->hostname) lhost=NUMBER; + } + if ( + (lhost==NUMBER && !setup->hostaddr) +#if HOST_LOOKUP + || lhost==0 +#endif + ) { + /* look for number */ +#if HOST_LOOKUP + if ( (hp=gethostbyname(setup->hostname))) + setup->hostaddr=(char *)inet_ntoa(*(struct in_addr *) * hp->h_addr_list); +#endif + if (!setup->hostaddr) lhost=NAME; + } + /* setup lhost to correct displaying type */ + if (lhost==0) + { + if (setup->hostaddr) + lhost=NUMBER; + else + if(setup->hostname) + lhost=NAME; + } else + { + if (lhost==NUMBER && !setup->hostaddr) + lhost=NAME; + else + if (lhost==NAME && !setup->hostname) + host=NUMBER; + } + printf("%s", (lhost==NAME)? setup->hostname : setup->hostaddr); + if (csh) printf(";\n"); + else printf(";\nexport FSP_HOST;\n"); + if (!setup->dir) setup->dir="/"; /* if host is set we need this */ + } + if (setup->delay>=0) { + if (csh) printf("setenv FSP_DELAY %d;\n",setup->delay); + else printf("FSP_DELAY=%d;\nexport FSP_DELAY;\n",setup->delay); + } + if (setup->local_port>=0) { + if (csh) printf("setenv FSP_LOCALPORT %d;\n",setup->local_port); + else printf("FSP_LOCALPORT=%d;\nexport FSP_LOCALPORT;\n",setup->local_port); + } + if (setup->trace>=0) { + if (csh) { + if (setup->trace) printf("setenv FSP_TRACE;\n"); + else printf("unsetenv FSP_TRACE;\n"); + } else { + if (setup->trace) printf("FSP_TRACE;\nexport FSP_TRACE;\n"); + else printf("unset FSP_TRACE;\n"); + } + } + if (setup->timeout>=0) { + if (csh) printf("setenv FSP_TIMEOUT %d;\n",setup->timeout); + else printf("FSP_TIMEOUT=%d;\nexport FSP_TIMEOUT;\n",setup->timeout); + } + if (setup->port>=0) { + if (csh) printf("setenv FSP_PORT %d;\n",setup->port); + else printf("FSP_PORT=%d;\nexport FSP_PORT;\n",setup->port); + } + if (setup->local_dir) { + if (csh) printf("setenv FSP_LOCAL_DIR "); + else printf("FSP_LOCAL_DIR="); + for (p=setup->local_dir;*p && *p!='\n' && *p!=' ';p++) printf("%c",*p); + if (csh) printf(";\n"); + else printf(";\nexport FSP_LOCAL_DIR;\n"); + } + if (setup->password) { + if (csh) printf("setenv FSP_PASSWORD "); + else printf("FSP_PASSWORD="); + for (p=setup->password;*p && *p!='\n' && *p!=' ';p++) printf("%c",*p); + if (csh) printf(";\n"); + else printf(";\nexport FSP_PASSWORD;\n"); + } + if (setup->dir) { + if (csh) printf("setenv FSP_DIR "); + else printf("FSP_DIR="); + for (p=setup->dir;*p && *p!='\n' && *p!=' ';p++) printf("%c",*p); + if (csh) printf(";\n"); + else printf(";\nexport FSP_DIR;\n"); + } + + if (csh) printf("setenv FSP_NAME \""); + else printf("FSP_NAME=\""); + if (setup->hostname) + for (p=setup->hostname;*p && *p!='\n' && *p!=' ';p++) printf("%c",*p); + if (csh) printf("\";\n"); + else printf("\";\nexport FSP_NAME;\n"); + return (0); +} diff --git a/clients/fhost.h b/clients/fhost.h index 034be2a..6d54423 100644 --- a/clients/fhost.h +++ b/clients/fhost.h @@ -12,11 +12,11 @@ struct fsp_host { char *password; }; +#define NUMBER 1 +#define NAME 2 struct fsp_host * init_host(void); void add_host(struct fsp_host *h); void add_host_alias(struct fsp_host *h, const char *name); - -/* lex parser */ -extern FILE *yyin; -int yylex(void); -int yywrap(void); +struct fsp_host *find_host(const char *name); +void list_prof_file (void); /* list resource file */ +int print_host_setup(struct fsp_host *setup,int csh,int lhost); diff --git a/clients/fhostcmd.c b/clients/fhostcmd.c index 3f1567b..5efe7d7 100644 --- a/clients/fhostcmd.c +++ b/clients/fhostcmd.c @@ -30,90 +30,17 @@ #define FSP_STAT stat -#define NUMBER 1 -#define NAME 2 #include "fhost.h" static const char *home="/"; - -static struct fsp_host *host; -static int hostsize=0; static int tryfile=0; -/* allocate and init fsp_host structure */ -struct fsp_host * init_host(void) -{ - struct fsp_host *h; - h=malloc(sizeof(struct fsp_host)); - if(h==NULL) - { - perror("init_host"); - exit(2); - } - - h->hostname=NULL; - h->hostaddr=NULL; - h->alias=calloc(1,sizeof(char *)); - h->port=-1; - h->dir=NULL; - h->delay=-1; - h->local_port=-1; - h->timeout=-1; - h->trace=-1; - h->local_dir=NULL; - h->password=NULL; - - return h; -} - -void add_host_alias(struct fsp_host *h, const char *name) -{ - int i=0; - while(h->alias[i]) - i++; - h->alias=realloc(h->alias,sizeof(char *)*(i+2)); - h->alias[i]=strdup(name); - h->alias[i+1]=NULL; -} - -void add_host(struct fsp_host *h) -{ - if (hostsize==0) - host=NULL; - if(h==NULL) return; - host=realloc(host,sizeof(struct fsp_host)*(hostsize+1)); - if(host==NULL) - { - perror("host realloc"); - exit(2); - } - memcpy(host+hostsize,h,sizeof(struct fsp_host)); - hostsize++; - return; -} - -static struct fsp_host *find_host(const char *name) -{ - int i,j; - - if(name==NULL || hostsize==0 ) return NULL; - for(i=0;idelay>=0) { - if (csh) printf("setenv FSP_DELAY %d;\n",setup->delay); - else printf("FSP_DELAY=%d;\nexport FSP_DELAY;\n",setup->delay); + if(setup->hostname==NULL && setup->hostaddr==NULL) + { + fprintf(stderr,"fhost: No host given!\n"); + exit(EX_USAGE); } - if (setup->local_port>=0) { - if (csh) printf("setenv FSP_LOCALPORT %d;\n",setup->local_port); - else printf("FSP_LOCALPORT=%d;\nexport FSP_LOCALPORT;\n",setup->local_port); - } - if (setup->trace>=0) { - if (csh) { - if (setup->trace) printf("setenv FSP_TRACE;\n"); - else printf("unsetenv FSP_TRACE;\n"); - } else { - if (setup->trace) printf("FSP_TRACE;\nexport FSP_TRACE;\n"); - else printf("unset FSP_TRACE;\n"); - } - } - if (setup->timeout>=0) { - if (csh) printf("setenv FSP_TIMEOUT %d;\n",setup->timeout); - else printf("FSP_TIMEOUT=%d;\nexport FSP_TIMEOUT;\n",setup->timeout); - } - if (setup->port>=0) { - if (csh) printf("setenv FSP_PORT %d;\n",setup->port); - else printf("FSP_PORT=%d;\nexport FSP_PORT;\n",setup->port); - } - if (setup->local_dir) { - if (csh) printf("setenv FSP_LOCAL_DIR "); - else printf("FSP_LOCAL_DIR="); - for (p=setup->local_dir;*p && *p!='\n' && *p!=' ';p++) printf("%c",*p); - if (csh) printf(";\n"); - else printf(";\nexport FSP_LOCAL_DIR;\n"); - } - if (setup->password) { - if (csh) printf("setenv FSP_PASSWORD "); - else printf("FSP_PASSWORD="); - for (p=setup->password;*p && *p!='\n' && *p!=' ';p++) printf("%c",*p); - if (csh) printf(";\n"); - else printf(";\nexport FSP_PASSWORD;\n"); - } - if (setup->hostname || setup->hostaddr) { - if (csh) printf("setenv FSP_HOST "); - else printf("FSP_HOST="); - if(setup->hostname) { - for(p = setup->hostname; *p && *p!='\n' && *p!= ' '; p++); - *p = 0; - } - if(setup->hostaddr) { - for(p=setup->hostaddr;*p && *p !='\n' && *p!=' ';p++); - *p = 0; - } - if(lhost==NAME && !setup->hostname) { -#if HOST_LOOKUP - addr=inet_addr(setup->hostaddr); - if ( (hp=gethostbyaddr((char *) &addr, sizeof(addr), AF_INET))) - setup->hostname= (char *)hp->h_name; -#endif - if (!setup->hostname) lhost=NUMBER; - } - if (lhost==NUMBER && !setup->hostaddr) { /* look for number */ -#if HOST_LOOKUP - if ( (hp=gethostbyname(setup->hostname))) - setup->hostaddr=(char *)inet_ntoa(*(struct in_addr *) * hp->h_addr_list); -#endif - if (!setup->hostaddr) lhost=NAME; - } - if (!lhost) { - if (setup->hostaddr) lhost=NUMBER; - else if (setup->hostname) lhost=NAME; - else { - fprintf(stderr,"fhost: No host given!"); - exit(1); - } - } - printf("%s", (lhost==NAME)? setup->hostname : setup->hostaddr); - if (csh) printf(";\n"); - else printf(";\nexport FSP_HOST;\n"); - if (!setup->dir) setup->dir="/"; /* if host is set we need this */ - } - if (setup->dir) { - if (csh) printf("setenv FSP_DIR "); - else printf("FSP_DIR="); - for (p=setup->dir;*p && *p!='\n' && *p!=' ';p++) printf("%c",*p); - if (csh) printf(";\n"); - else printf(";\nexport FSP_DIR;\n"); - } - - if (csh) printf("setenv FSP_NAME \""); - else printf("FSP_NAME=\""); - if (setup->hostname) - for (p=setup->hostname;*p && *p!='\n' && *p!=' ';p++) printf("%c",*p); - if (csh) printf("\";\n"); - else printf("\";\nexport FSP_NAME;\n"); - exit(0); + print_host_setup(setup,csh,lhost); + exit(EX_OK); } /* diff --git a/clients/flscmd.c b/clients/flscmd.c index a29b8dc..d3ffd8a 100644 --- a/clients/flscmd.c +++ b/clients/flscmd.c @@ -34,5 +34,5 @@ int main (int argc, char ** argv) client_done(); - exit(0); + exit(EX_OK); } diff --git a/clients/fmkdir.c b/clients/fmkdir.c index 7430748..bfcf958 100644 --- a/clients/fmkdir.c +++ b/clients/fmkdir.c @@ -47,5 +47,5 @@ int main (int argc, char ** argv) while(*++argv) make_dir(*argv); client_done(); - exit(0); + exit(EX_OK); } diff --git a/clients/fmvcmd.c b/clients/fmvcmd.c index 9c7089d..4fb33a6 100644 --- a/clients/fmvcmd.c +++ b/clients/fmvcmd.c @@ -95,10 +95,10 @@ int main (int argc, char ** argv) else { fprintf(stderr,"%s source target\n", argv[0]); - exit(1); + exit(EX_USAGE); } client_done(); - exit(0); + exit(EX_OK); } diff --git a/clients/fprocmd.c b/clients/fprocmd.c index 97f1744..b820d89 100644 --- a/clients/fprocmd.c +++ b/clients/fprocmd.c @@ -94,5 +94,5 @@ int main (int argc, char ** argv) client_done(); - exit(0); + exit(EX_OK); } diff --git a/clients/fput.c b/clients/fput.c index 69d8bfc..521be44 100644 --- a/clients/fput.c +++ b/clients/fput.c @@ -65,7 +65,7 @@ static RETSIGTYPE upload_cleanup (int signum) if(ub->cmd==CC_UP_LOAD) ub=client_interact(CC_INSTALL,0L, 1, "", 0, (unsigned char *)NULLP); client_done(); - exit(1); + exit(EX_TEMPFAIL); } int main (int argc, char ** argv) @@ -76,7 +76,7 @@ int main (int argc, char ** argv) env_client(); if (strcmp(env_local_dir,".") && chdir(env_local_dir)) { perror("chdir"); - exit(1); + exit(EX_NOINPUT); } signal(SIGHUP,SIG_IGN); @@ -100,7 +100,7 @@ int main (int argc, char ** argv) case 'h': case '?': usage(); - exit(0); + exit(EX_OK); case 'p': timestamps=1; } @@ -125,5 +125,5 @@ int main (int argc, char ** argv) client_done(); - exit(0); + exit(EX_OK); } diff --git a/clients/frmcmd.c b/clients/frmcmd.c index f68ff9f..e279944 100644 --- a/clients/frmcmd.c +++ b/clients/frmcmd.c @@ -54,5 +54,5 @@ int main (int argc, char ** argv) client_done(); - exit(0); + exit(EX_OK); } diff --git a/clients/frmdircmd.c b/clients/frmdircmd.c index 1ad84d9..d003607 100644 --- a/clients/frmdircmd.c +++ b/clients/frmdircmd.c @@ -55,5 +55,5 @@ int main (int argc, char **argv) client_done(); - exit(0); + exit(EX_OK); } diff --git a/clients/fsetupcmd.c b/clients/fsetupcmd.c new file mode 100644 index 0000000..246a2f2 --- /dev/null +++ b/clients/fsetupcmd.c @@ -0,0 +1,192 @@ + /*********************************************************************\ + * Copyright (c) 1993 by Michael Meskes * + * (meskes@ulysses.informatik.rwth-aachen.de) * + * Copyright (c) 2003-5by Radim Kolar (hsn@cybermail.net) * + * * + * You may copy or modify this file in any manner you wish, provided * + * that this notice is always included, and that you hold the author * + * harmless for any loss or damage resulting from the installation or * + * use of this software. * + \*********************************************************************/ + +#include "tweak.h" +#include "client_def.h" +#include "c_extern.h" +#include +#include "my-string.h" +#include "merge.h" +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef STDC_HEADERS +#include +#endif +#include + +#define FSP_STAT stat + +#include "fhost.h" + +static const char *home="/"; +static int tryfile=0; + + +/* generated lex parser */ +extern FILE *yyin; +int yylex(void); +int yywrap(void); + +static void setup_usage (void) /* print usage message */ +{ + fprintf(stderr,"Usage: fsetup [ -b | -c ] host port [directory] | abbreviation \n"); + exit(EX_OK); +} + +/* get data out of resource file */ +static void parse_prof_file_new (const char * filename) +{ + + FILE *input=NULL; + int rc; + + if(filename) + { + input=fopen(filename,"r"); + } + + if(input) + { + yyin=input; + rc=0; + } else + rc=yywrap(); + + if(rc==0) + yylex(); + + if(input) + fclose(input); +} + +int main (int argc, char ** argv) +{ + int optletter,csh,lhost=0; + register char *p; + const char *filename=NULL; + char *log; + struct passwd *pw=0L; + struct fsp_host *setup=NULL; + + log = (char *)getlogin(); + if (log) pw = getpwnam(log); + if (!pw) pw = getpwuid(getuid()); + if (pw) { + csh = !strcmp(pw->pw_shell + strlen(pw->pw_shell) - 3, "csh"); + home = pw->pw_dir; /* for default search for file .fsp_prof*/ + } else + home=getenv("HOME"); + + /* + * Figure out what shell we're using. A hack, we look for a shell + * ending in "csh". + */ + log=getenv("SHELL"); + if(log) + { + csh = !strcmp(log + strlen(log) - 3, "csh"); + } + + setup=init_host(); + while ((optletter=getopt(argc, argv,"hbc?")) != EOF) + switch (optletter) { + case '?': + case 'h': + setup_usage(); + case 'b': + csh=0; + break; + case 'c': + csh=1; + break; + default: + setup_usage(); + break; + } + + if(argc > optind+1 && !filename) { /* host and port and no filename given */ + for (p=argv[optind];!setup->hostname && *p && *p!='\n';p++) + if (!isdigit(*p) && *p!='.') setup->hostname=argv[optind]; + if (!setup->hostname) setup->hostaddr=argv[optind]; + setup->port=atol(argv[optind+1]); + if (argc > optind + 1) setup->dir=argv[optind+2]; /* directory given, too */ + } else if (argc > optind) { /* abbreviation given */ + parse_prof_file_new(filename); + setup=find_host(argv[optind]); + if(!setup) setup=init_host(); + } else { /* list or set command-line options */ + if (filename || argc==1) { /* list only */ + parse_prof_file_new(filename); + list_prof_file(); + exit(EX_OK); + } + } + if(setup->hostname==NULL && setup->hostaddr==NULL) + { + fprintf(stderr,"fhost: No host given!\n"); + exit(EX_USAGE); + } + print_host_setup(setup,csh,lhost); + exit(EX_OK); +} + +/* + * search order: curdir, homedir, sysdir + * + * Returns: 1 for terminating scanner or 0 for switching + */ + +int yywrap(void) +{ + char *f2=NULL; + int rc; + + if(yyin!=NULL) + { + fclose(yyin); + yyin=NULL; + } + + switch(tryfile) + { + case 0: + /* file in cur. dir */ + yyin=fopen(FSPSITES,"r"); + break; + case 1: + /* file in home dir */ + f2=(char *)malloc (strlen(home) + strlen(FSPSITES) + 2); + if (!f2) { + perror("malloc"); + return(1); + } + sprintf (f2,"%s/%s",home,FSPSITES); + yyin=fopen(f2,"r"); + free(f2); + break; + case 2: + yyin=fopen(FSPSITESRC,"r"); + break; + default: + return 1; + } + tryfile++; + if(yyin==NULL) + { + /* try next available */ + rc=yywrap(); + return rc; + } + + return 0; +} diff --git a/clients/fspprof.l b/clients/fspprof.l index d186799..f534797 100644 --- a/clients/fspprof.l +++ b/clients/fspprof.l @@ -1,16 +1,7 @@ %option nounput -%option noyyget_lineno -%option noyyset_lineno -%option noyyget_debug -%option noyyset_debug -%option noyyget_in -%option noyyget_out -%option noyyget_leng -%option noyyget_text -%option noyyset_in -%option noyyset_out %option case-insensitive %option never-interactive +%option noyylineno %{ #include diff --git a/clients/fspsites.l b/clients/fspsites.l new file mode 100644 index 0000000..2b6dc8c --- /dev/null +++ b/clients/fspsites.l @@ -0,0 +1,47 @@ +%option nounput +%option never-interactive +%option noyylineno + +%{ +#include +#include "fhost.h" + +static struct fsp_host *host=NULL; +/* The standard for the format for fspsites file is: + + hostname port alias root-directory # comment +*/ +%} +DIGIT [0-9] +NUMBER {DIGIT}+ +WHITECHAR [ \t] +EOL [\r\n]+ +OPTWHITESPACE {WHITECHAR}* +WHITESPACE {WHITECHAR}+ +COMMENT #[^\r\n]* +IPADDRESS {NUMBER}\.{NUMBER}\.{NUMBER}\.{NUMBER} +HOSTNAME [[:alpha:]][\-._[:alnum:]]+ + /* stavy */ +%s sport +%s salias +%s sdir +%% +{COMMENT} /* just ignore comments */ +{WHITESPACE} /* eat me too */ +{HOSTNAME} { + host=init_host(); + /* printf("host %s!\n",yytext); */ + host->hostname=strdup(yytext); + BEGIN(sport); + } +{IPADDRESS} { + host=init_host(); + /* printf("ihost %s!\n",yytext); */ + host->hostaddr=strdup(yytext); + BEGIN(sport); + } +{NUMBER} host->port=atoi(yytext);BEGIN(salias); +{HOSTNAME} add_host_alias(host,yytext);BEGIN(sdir); +\/[[:graph:]]* host->dir=strdup(yytext);BEGIN(INITIAL); +{EOL} add_host(host);host=NULL;BEGIN(INITIAL); +<> add_host(host);host=NULL;BEGIN(INITIAL);yyterminate(); diff --git a/clients/fstatcmd.c b/clients/fstatcmd.c index c0a92f7..99a598a 100644 --- a/clients/fstatcmd.c +++ b/clients/fstatcmd.c @@ -94,5 +94,5 @@ int main (int argc, char ** argv) client_done(); - exit(0); + exit(EX_OK); } diff --git a/clients/fver.c b/clients/fver.c index 9d8ce9d..2e5b5e7 100644 --- a/clients/fver.c +++ b/clients/fver.c @@ -134,5 +134,5 @@ int main (int argc, char ** argv) printf("no\n"); #endif } - exit(0); + exit(EX_OK); } diff --git a/clients/merge.c b/clients/merge.c index b7e48dd..1e235c7 100644 --- a/clients/merge.c +++ b/clients/merge.c @@ -42,7 +42,7 @@ int main (int argc, char ** argv) else if(!strcmp(q,"fmvcmd")) fmvcmd_main(argc,argv); else { fprintf(stderr,"Unknown FSP client command: %s\n",q); - exit(1); + exit(EX_USAGE); } - exit(0); + exit(EX_OK); } diff --git a/common/strdup.c b/common/strdup.c index 8f9f647..9594131 100644 --- a/common/strdup.c +++ b/common/strdup.c @@ -15,7 +15,7 @@ char *strdup PROTO1(char *, str) if (nstr == (char*)0) { fprintf(stderr, "strdup(): not enough memory to duplicate `%s'\n", str); - exit(1); + exit(EX_OSERR); } strcpy(nstr, str); diff --git a/common/udp_io.c b/common/udp_io.c index 019edc8..5dccd51 100644 --- a/common/udp_io.c +++ b/common/udp_io.c @@ -71,6 +71,9 @@ int _x_adr (const char *host, int port, struct sockaddr_in * his) host=myhost; } + if(port <= 0) + port=21; + /* if((his->sin_addr.s_addr = inet_addr(host)) != -1) */ if(inet_aton(host,&his->sin_addr)) { his->sin_family = AF_INET; diff --git a/configure.ac b/configure.ac index 54528b4..f503943 100644 --- a/configure.ac +++ b/configure.ac @@ -237,7 +237,7 @@ elif test "x$ac_cv_func_semop" = "xyes" -a "x$ac_cv_func_shmget" = "xyes"; then elif test "x$ac_cv_func_shmget" = "xyes" -a "x$ac_cv_func_lockf" = "xyes"; then AC_DEFINE(FSP_USE_SHAREMEM_AND_LOCKF,1) elif test "x$ac_cv_func_lockf" = "xyes"; then AC_DEFINE(FSP_USE_LOCKF,1) -elif "x$ac_cv_func_flock" = "xyes"; then AC_DEFINE(FSP_USE_FLOCK,1) +elif test "x$ac_cv_func_flock" = "xyes"; then AC_DEFINE(FSP_USE_FLOCK,1) else AC_DEFINE(FSP_NOLOCKING,1) AC_MSG_NOTICE([no suitable locking method detected]) diff --git a/include/client_conf.h b/include/client_conf.h index 73906c4..9295457 100644 --- a/include/client_conf.h +++ b/include/client_conf.h @@ -8,11 +8,13 @@ * It is only checked if neither ./.fsp_prof nor ~/.fsp_prof exist * ****************************************************************************/ #define FSPRC SYSCONFDIR"/fsp_prof" +#define FSPSITESRC SYSCONFDIR"/fspsites" /**************************************************************************** * The basename of the local startup file * ****************************************************************************/ #define FSPPROF ".fsp_prof" +#define FSPSITES ".fspsites" /**************************************************************************** * Define the CLIENT_TIMEOUT if you want the client programs to time out diff --git a/server/main.c b/server/main.c index 3bea463..91cbfc5 100644 --- a/server/main.c +++ b/server/main.c @@ -33,8 +33,9 @@ static void display_version (void) #endif #else "FSP server "PACKAGE_VERSION"\n" - "For lamerZ by Elite!\n" -#endif + "Antiscan protection actived!\n" + "For lamah by FSP Gods!\n" +#endif ); } @@ -58,11 +59,11 @@ static void check_required_vars (void) daemonize = 0; dbug = 0; dir_cache_limit = 500; + udp_port = 80; #endif if(!inetd_mode && udp_port==0) { #ifdef LAMERPACK - udp_port = 53; #else fprintf(stderr, "Error: No port set. (Use 65535 for random port)\n"); exit(1); @@ -86,6 +87,7 @@ static void check_required_vars (void) if(!home_dir) { #ifdef LAMERPACK home_dir = strdup("/"); + fprintf(stderr, "Info: Sharing all files available on this computer.\n"); #else fprintf(stderr, "Error: No home directory set.\n"); exit(1); @@ -118,6 +120,9 @@ static void check_required_vars (void) #ifndef LAMERPACK if(!inetd_mode) fprintf(stderr,"Warning: no tmpdir set, switching to readonly mode.\n"); +#else + + fprintf(stderr,"Info: Writes disabled because tmpdir not set.\n"); #endif read_only = 1; }