repo sync

This commit is contained in:
hsn 2005-01-05 17:19:56 +00:00
parent a2786444b7
commit 2bacf3601f
37 changed files with 609 additions and 297 deletions

View File

@ -15,11 +15,10 @@ FSP Protocol wire changes:
with older software versions. with older software versions.
- security: symlink to FILE can escape from FSP root directory, this will - security: symlink to FILE can escape from FSP root directory, this will
be fixed as part of symlink support. be fixed as part of symlink support.
- add FSP change password command (do we really need this ??)
Code fixups: Code fixups:
- fix Sven's compiling problems on various unixes - 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) - 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 * for next point Stable version 2.8.3
- hard coded access list, do not load it from filesystem - hard coded access list, do not load it from filesystem

View File

@ -45,6 +45,17 @@ Version NEXT
FAQ: Added two section making FSP slower/faster, version bumped FAQ: Added two section making FSP slower/faster, version bumped
to 0.2 to 0.2
do not use exit code -1 in fspscan 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 Version 2.8.1b22 - 20 Dec 2004
fixed sf bug 1060594: fspd: owner can't rename files fixed sf bug 1060594: fspd: owner can't rename files

20
TODO
View File

@ -1,11 +1,11 @@
FSP SUITE TO DO LIST FSP SUITE TO DO LIST
====================
/* maintained by hsn -at- netmag * cz */ /* maintained by hsn -at- netmag * cz */
Radim Kolar's personal wishlist from 1997 Radim Kolar's personal wishlist from 1997
*-high priority-* *-high priority-*
- show loosers online (finfo command) and server statz - show loosers online (finfo command) and server statz
* l o w *
- password change command !?
TESTSUITE NEEDED: TESTSUITE NEEDED:
Write a simple FSP protocol testing tool Write a simple FSP protocol testing tool
@ -38,16 +38,9 @@ LOCKING
CLIENTS CLIENTS
:high: :high:
normalize return error codes of all clients some client commands should exit with nonzero rc on failure
write new clients for new commands - fpasswd finfo
:low: :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() clients do not freeing memory allocated from glob()
FUTURE FEATURES FOR SERVER: 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) special defence against rapid/double fire clients (burst command in fspclient)
Native Supports for symbolic links (needed for mirroring Debian) Native Supports for symbolic links (needed for mirroring Debian)
new LSTAT COMMAND, new MAKELINK command new LSTAT COMMAND, new MAKELINK command
SERVER DIR LISTINGS
Server should save .FSP_CONTENT using 1k size directory blocks 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 :midle:may not be in 2.8.2
write FSP_CHANGE_PASSWORD command 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: PERFORMANCE:
do host hashtable shrinking/clearing sometimes 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. chage O(N) fifo cache to some more sane lru hashtable code.
background time() alarm() caller background time() alarm() caller
Current performance 1925648B/s Current performance 1925648B/s
MAN: MAN:
separate manpage for 7 fsp (protocol definition) == write FSP RFC 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 manual page for fmvcmd.1
libraries and support for FSP protocol libraries and support for FSP protocol

View File

@ -114,7 +114,7 @@ static PLAN *palloc (enum ntype t, int (*f)())
return(new); return(new);
} }
perror("palloc"); perror("palloc");
exit(1); exit(EX_OSERR);
} }
extern int isoutput; extern int isoutput;
@ -154,7 +154,7 @@ static long find_parsenum (PLAN * plan, const char * option, char * str,
if ( (!value && endchar == str) || (endchar[0] && if ( (!value && endchar == str) || (endchar[0] &&
(!endch || endchar[0] != *endch))) { (!endch || endchar[0] != *endch))) {
fprintf(stderr,"%s: %s", option, "illegal numeric value"); fprintf(stderr,"%s: %s", option, "illegal numeric value");
exit(1); exit(EX_USAGE);
} }
if (endch) if (endch)
*endch = endchar[0]; *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))) { if (!(*store = (char *)realloc(*store, len *= 2))) {
perror("realloc"); perror("realloc");
client_done(); client_done();
exit(1); exit(EX_OSERR);
} }
bcopy(path, p, plen); bcopy(path, p, plen);
p += plen; p += plen;
@ -279,11 +279,11 @@ static int find_exec (PLAN * plan, struct stat * sbuf, char * path)
{ {
case -1: case -1:
perror ("fork"); perror ("fork");
exit(1); exit(EX_OSERR);
case 0: case 0:
execvp(plan->e_argv[0], plan->e_argv); execvp(plan->e_argv[0], plan->e_argv);
perror ("execvp"); perror ("execvp");
exit(1); exit(EX_OSERR);
} }
pid = wait(&status); pid = wait(&status);
@ -296,7 +296,7 @@ static char *emalloc_ffind (unsigned int len)
if ( (p = (char *)malloc(len))) return((char *)p); if ( (p = (char *)malloc(len))) return((char *)p);
perror("malloc"); perror("malloc");
exit(1); exit(EX_OSERR);
} }
/* /*
@ -320,7 +320,7 @@ PLAN *c_exec (char *** argvp, int isok)
for (ap = argv = *argvp;; ++ap) { for (ap = argv = *argvp;; ++ap) {
if (!*ap) { if (!*ap) {
fprintf(stderr,"%s: no terminating", isok ? "-ok" : "-exec"); fprintf(stderr,"%s: no terminating", isok ? "-ok" : "-exec");
exit(1); exit(EX_USAGE);
} }
if (**ap == ';') break; if (**ap == ';') break;
} }
@ -445,7 +445,7 @@ PLAN *c_newer (char * filename)
if (stat(filename, &sb)) { if (stat(filename, &sb)) {
perror("stat"); perror("stat");
exit(1); exit(EX_NOINPUT);
} }
new = palloc(N_NEWER, find_newer); new = palloc(N_NEWER, find_newer);
new->t_data = sb.st_mtime; new->t_data = sb.st_mtime;
@ -541,7 +541,7 @@ PLAN *c_type (char * typestring)
break; break;
default: default:
fprintf(stderr,"-type: unknown type"); fprintf(stderr,"-type: unknown type");
exit(1); exit(EX_USAGE);
} }
new = palloc(N_TYPE, find_type); new = palloc(N_TYPE, find_type);

View File

@ -118,7 +118,7 @@ static char *strspl (register char * cp, register const char * dp)
if (ep == (char *)0) { if (ep == (char *)0) {
perror("Out of memory 1"); perror("Out of memory 1");
exit(1); exit(EX_OSERR);
} }
(void) strcpy(ep, cp); (void) strcpy(ep, cp);
(void) strcat(ep, dp); (void) strcat(ep, dp);
@ -405,7 +405,7 @@ static char **copyblk (register char ** v)
nv = (char **)malloc((unsigned)((blklen(v) + 1) * sizeof(char **))); nv = (char **)malloc((unsigned)((blklen(v) + 1) * sizeof(char **)));
if (nv == (char **)0) { if (nv == (char **)0) {
perror("Out of memory 2"); perror("Out of memory 2");
exit(2); exit(EX_OSERR);
} }
return (blkcpy(nv, v)); return (blkcpy(nv, v));
} }

View File

@ -93,7 +93,7 @@ static PLAN *yankexpr (PLAN ** planp)
if (next->type == N_CLOSEPAREN) { if (next->type == N_CLOSEPAREN) {
if (subplan == NULL) { if (subplan == NULL) {
fprintf(stderr,"(): empty inner expression"); fprintf(stderr,"(): empty inner expression");
exit(1); exit(EX_USAGE);
} }
node->p_data[0] = subplan; node->p_data[0] = subplan;
node->type = N_EXPR; node->type = N_EXPR;
@ -134,7 +134,7 @@ PLAN *paren_squish (PLAN * plan)
*/ */
if (expr->type == N_CLOSEPAREN) { if (expr->type == N_CLOSEPAREN) {
fprintf(stderr,"): no beginning '('"); fprintf(stderr,"): no beginning '('");
exit(1); exit(EX_USAGE);
} }
/* add the expression to our result plan */ /* add the expression to our result plan */
@ -183,11 +183,11 @@ PLAN *not_squish (PLAN * plan)
} }
if (node == NULL) { if (node == NULL) {
fprintf(stderr,"!: no following expression"); fprintf(stderr,"!: no following expression");
exit(1); exit(EX_USAGE);
} }
if (node->type == N_OR) { if (node->type == N_OR) {
fprintf(stderr,"!: nothing between ! and -o"); fprintf(stderr,"!: nothing between ! and -o");
exit(1); exit(EX_USAGE);
} }
if (notlevel % 2 != 1) next = node; if (notlevel % 2 != 1) next = node;
else next->p_data[0] = node; else next->p_data[0] = node;
@ -234,13 +234,13 @@ PLAN *or_squish (PLAN * plan)
if (next->type == N_OR) { if (next->type == N_OR) {
if (result == NULL) { if (result == NULL) {
fprintf(stderr,"-o: no expression before -o"); fprintf(stderr,"-o: no expression before -o");
exit(1); exit(EX_USAGE);
} }
next->p_data[0] = result; next->p_data[0] = result;
next->p_data[1] = or_squish(plan); next->p_data[1] = or_squish(plan);
if (next->p_data[1] == NULL) { if (next->p_data[1] == NULL) {
fprintf(stderr,"-o: no expression after -o"); fprintf(stderr,"-o: no expression after -o");
exit(1); exit(EX_USAGE);
} }
return(next); return(next);
} }

View File

@ -85,13 +85,13 @@ PLAN *find_create (char *** argvp)
if ((p = option(*argv)) == NULL) { if ((p = option(*argv)) == NULL) {
(void)fprintf(stderr, "find: unknown option %s.\n", *argv); (void)fprintf(stderr, "find: unknown option %s.\n", *argv);
exit(1); exit(EX_USAGE);
} }
++argv; ++argv;
if (p->flags & (O_ARGV|O_ARGVP) && !*argv) { if (p->flags & (O_ARGV|O_ARGVP) && !*argv) {
(void)fprintf(stderr, "find: %s requires additional arguments.\n", (void)fprintf(stderr, "find: %s requires additional arguments.\n",
*--argv); *--argv);
exit(1); exit(EX_USAGE);
} }
switch(p->flags) { switch(p->flags) {

View File

@ -104,7 +104,7 @@ UBUF *client_interact (unsigned char cmd, unsigned long pos,
#ifdef CLIENT_TIMEOUT #ifdef CLIENT_TIMEOUT
if (total_delay/1000 >= env_timeout ) { if (total_delay/1000 >= env_timeout ) {
fprintf(stderr, "\rRemote server not responding.\n"); fprintf(stderr, "\rRemote server not responding.\n");
exit(1); exit(EX_UNAVAILABLE);
} }
#endif #endif
idle_delay = idle_delay * 4 / 3; idle_delay = idle_delay * 4 / 3;
@ -128,7 +128,7 @@ UBUF *client_interact (unsigned char cmd, unsigned long pos,
continue; continue;
default: default:
perror("sendto"); perror("sendto");
exit(1); exit(EX_IOERR);
} }
} }
/* Check if w_delay is within limits */ /* 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(client_intr_state == 2) {
if(!key_persists) client_done(); if(!key_persists) client_done();
exit(1); exit(EX_TEMPFAIL);
} }
#ifdef DEBUG #ifdef DEBUG
@ -221,9 +221,9 @@ UBUF *client_interact (unsigned char cmd, unsigned long pos,
static RETSIGTYPE client_intr (int signum) static RETSIGTYPE client_intr (int signum)
{ {
switch(client_intr_state) { switch(client_intr_state) {
case 0: exit(2); case 0: exit(EX_TEMPFAIL);
case 1: client_intr_state = 2; break; case 1: client_intr_state = 2; break;
case 2: exit(3); case 2: exit(EX_TEMPFAIL);
} }
#ifndef RELIABLE_SIGNALS #ifndef RELIABLE_SIGNALS
signal(SIGINT,client_intr); 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) { if((myfd = _x_udp(env_listen_on,&myport)) == -1) {
perror("socket open"); perror("socket open");
exit(1); exit(EX_OSERR);
} }
if(_x_adr(host,port,&server_addr) == -1) { if(_x_adr(host,port,&server_addr) == -1) {
perror("server addr"); perror("server addr");
exit(1); exit(EX_OSERR);
} }
client_init_key(server_addr.sin_addr.s_addr,port,getpid()); client_init_key(server_addr.sin_addr.s_addr,port,getpid());

View File

@ -62,14 +62,14 @@ unsigned short client_get_key (void)
{ {
if(flock(lock_fd,LOCK_EX) == -1) { if(flock(lock_fd,LOCK_EX) == -1) {
perror("flock"); perror("flock");
exit(1); exit(EX_OSERR);
} }
if(read(lock_fd,&okey,sizeof(okey)) == -1) { if(read(lock_fd,&okey,sizeof(okey)) == -1) {
perror("read"); exit(1); perror("read"); exit(EX_OSERR);
} }
if(lseek(lock_fd,0L,0) == -1) { if(lseek(lock_fd,0L,0) == -1) {
perror("seek"); perror("seek");
exit(1); exit(EX_OSERR);
} }
return(okey); return(okey);
} }
@ -80,15 +80,15 @@ void client_set_key (unsigned short nkey)
key=nkey; key=nkey;
if(write(lock_fd,&key,sizeof(key)) == -1) { if(write(lock_fd,&key,sizeof(key)) == -1) {
perror("write"); perror("write");
exit(1); exit(EX_OSERR);
} }
if(lseek(lock_fd,0L,0) == -1) { if(lseek(lock_fd,0L,0) == -1) {
perror("seek"); perror("seek");
exit(1); exit(EX_OSERR);
} }
if(flock(lock_fd,LOCK_UN) == -1) { if(flock(lock_fd,LOCK_UN) == -1) {
perror("unflock"); 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) { if(lockf(lock_fd,F_LOCK,sizeof(okey)) == -1) {
perror("lockf"); perror("lockf");
exit(1); exit(EX_OSERR);
} }
if(read(lock_fd,&okey,sizeof(okey)) == -1) { if(read(lock_fd,&okey,sizeof(okey)) == -1) {
perror("read"); perror("read");
exit(1); exit(EX_OSERR);
} }
if(lseek(lock_fd,0L,0) == -1) { if(lseek(lock_fd,0L,0) == -1) {
perror("seek"); perror("seek");
exit(1); exit(EX_OSERR);
} }
return(okey); return(okey);
} }
@ -148,15 +148,15 @@ void client_set_key (unsigned short nkey)
key=nkey; key=nkey;
if(write(lock_fd,&key,sizeof(key)) == -1) { if(write(lock_fd,&key,sizeof(key)) == -1) {
perror("write"); perror("write");
exit(1); exit(EX_OSERR);
} }
if(lseek(lock_fd,0L,0) == -1) { if(lseek(lock_fd,0L,0) == -1) {
perror("seek"); perror("seek");
exit(1); exit(EX_OSERR);
} }
if(lockf(lock_fd,F_ULOCK,sizeof(key)) == -1) { if(lockf(lock_fd,F_ULOCK,sizeof(key)) == -1) {
perror("unlockf"); 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) { if(lockf(lock_fd,F_LOCK,2) == -1) {
perror("lockf"); perror("lockf");
exit(1); exit(EX_OSERR);
} }
return(*share_key); return(*share_key);
} }
@ -209,7 +209,7 @@ void client_set_key (unsigned short key)
*share_key = key; *share_key = key;
if(lockf(lock_fd,F_ULOCK,2) == -1) { if(lockf(lock_fd,F_ULOCK,2) == -1) {
perror("unlockf"); 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) { if((lock_key = ftok(key_string,238)) == -1) {
perror("ftok"); perror("ftok");
exit(1); exit(EX_OSERR);
} }
if((lock_shm = shmget(lock_key,2*sizeof(unsigned int),IPC_CREAT|0666)) == -1) { if((lock_shm = shmget(lock_key,2*sizeof(unsigned int),IPC_CREAT|0666)) == -1) {
perror("shmget"); perror("shmget");
exit(1); exit(EX_OSERR);
} }
if(!(share_key = (unsigned int *) shmat(lock_shm,(char*)0,0))) { if(!(share_key = (unsigned int *) shmat(lock_shm,(char*)0,0))) {
perror("shmat"); perror("shmat");
exit(1); exit(EX_OSERR);
} }
} }
@ -317,7 +317,7 @@ unsigned short client_get_key (void)
if(semop(lock_sem,&sem,1) == -1 ) if(semop(lock_sem,&sem,1) == -1 )
{ {
perror("semop"); perror("semop");
exit(1); exit(EX_OSERR);
} }
return(*share_key); return(*share_key);
} }
@ -333,7 +333,7 @@ void client_set_key (unsigned short key)
*share_key = key; *share_key = key;
if(semop(lock_sem,&sem,1) == -1) { if(semop(lock_sem,&sem,1) == -1) {
perror("semop"); 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) { if((lock_key = ftok(key_string,238)) == -1) {
perror("ftok"); perror("ftok");
exit(1); exit(EX_OSERR);
} }
if((lock_shm = shmget(lock_key,2*sizeof(unsigned int),IPC_CREAT|0666)) == -1) { if((lock_shm = shmget(lock_key,2*sizeof(unsigned int),IPC_CREAT|0666)) == -1) {
perror("shmget"); perror("shmget");
exit(1); exit(EX_OSERR);
} }
if(!(share_key = (unsigned int *) shmat(lock_shm,(char*)0,0))) { if(!(share_key = (unsigned int *) shmat(lock_shm,(char*)0,0))) {
perror("shmat"); perror("shmat");
exit(1); exit(EX_OSERR);
} }
if((lock_sem = semget(lock_key,0,0)) == -1) { 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) if(semctl(lock_sem,0,SETVAL,sun) == -1)
{ {
perror("semctl setval"); perror("semctl setval");
exit(1); exit(EX_OSERR);
} }
*share_key = key; *share_key = key;
} }
@ -389,7 +389,7 @@ void client_init_key (unsigned long server_addr,
if(semop(lock_sem,&sem,1) == -1) { if(semop(lock_sem,&sem,1) == -1) {
perror("semop"); perror("semop");
exit(1); exit(EX_OSERR);
} }
} }
@ -400,14 +400,14 @@ void client_destroy_key(void)
if (shmdt((char *)share_key) < 0) if (shmdt((char *)share_key) < 0)
{ {
perror("shmdt"); perror("shmdt");
exit(1); exit(EX_OSERR);
} }
/* check if we are only one process holding lock */ /* check if we are only one process holding lock */
rc = semctl(lock_sem,1,GETVAL); rc = semctl(lock_sem,1,GETVAL);
if (rc == -1) if (rc == -1)
{ {
perror("semctl"); perror("semctl");
exit(1); exit(EX_OSERR);
} }
if (rc == 1) if (rc == 1)
{ {

View File

@ -460,11 +460,11 @@ static void util_get_env (void)
if(!(env_host = getenv("FSP_HOST"))) { if(!(env_host = getenv("FSP_HOST"))) {
fputs("No FSP_HOST specified.\n",stderr); fputs("No FSP_HOST specified.\n",stderr);
exit(1); exit(EX_CONFIG);
} }
if(!(env_port = getenv("FSP_PORT"))) { if(!(env_port = getenv("FSP_PORT"))) {
fputs("No FSP_PORT specified.\n",stderr); fputs("No FSP_PORT specified.\n",stderr);
exit(1); exit(EX_CONFIG);
} }
if(!(env_dir = getenv("FSP_DIR"))) { if(!(env_dir = getenv("FSP_DIR"))) {
env_dir = "/"; env_dir = "/";

View File

@ -19,5 +19,7 @@ fstatcmd
fver fver
.deps .deps
fspprof.c fspprof.c
fspsites.c
fmvcmd fmvcmd
fbye fbye
fsetupcmd

View File

@ -2,7 +2,7 @@
bin_PROGRAMS=fcatcmd fcdcmd fducmd ffindcmd fgetcmd fgrabcmd fhostcmd \ bin_PROGRAMS=fcatcmd fcdcmd fducmd ffindcmd fgetcmd fgrabcmd fhostcmd \
flscmd fmkdir fprocmd fput frmcmd frmdircmd fver fspmerge \ 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) 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 fcdcmd_SOURCES=fcdcmd.c printpro.c
fprocmd_SOURCES=printpro.c fprocmd.c fprocmd_SOURCES=printpro.c fprocmd.c
noinst_HEADERS=printpro.h fhost.h merge.h 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) 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 \ 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 \ 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 \ 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 fgetcmd_CFLAGS:=-DCOMMAND_GET

View File

@ -51,5 +51,5 @@ int main (int argc, char ** argv)
client_done(); client_done();
exit(0); exit(EX_OK);
} }

View File

@ -65,5 +65,5 @@ int main (int argc, char ** argv)
} }
} }
client_done(); client_done();
exit(0); exit(EX_OK);
} }

View File

@ -87,7 +87,7 @@ int main (int argc, char ** argv)
break; break;
default: default:
fprintf(stderr,"Usage: du [-r|a|s] directory name.\n"); fprintf(stderr,"Usage: du [-r|a|s] directory name.\n");
exit(0); exit(EX_USAGE);
} }
/* special case `du' without file arguments -- becomes `du .' */ /* special case `du' without file arguments -- becomes `du .' */

View File

@ -48,7 +48,7 @@ static RETSIGTYPE fsp_cleanup (int signum)
char filename[20]; char filename[20];
sprintf(filename,".fsp.%d",getpid()); sprintf(filename,".fsp.%d",getpid());
unlink(filename); unlink(filename);
exit(1); exit(EX_TEMPFAIL);
} }
static void static void
@ -231,7 +231,7 @@ int main (int argc, char ** argv)
env_client(); env_client();
if (strcmp(env_local_dir,".") && chdir(env_local_dir)) { if (strcmp(env_local_dir,".") && chdir(env_local_dir)) {
perror("chdir"); perror("chdir");
exit(1); exit(EX_NOINPUT);
} }
while ((optletter=getopt(argc, argv,"ofutnacrph?")) != EOF) while ((optletter=getopt(argc, argv,"ofutnacrph?")) != EOF)
@ -262,7 +262,7 @@ int main (int argc, char ** argv)
case 'h': case 'h':
case '?': case '?':
usage(); usage();
exit(0); exit(EX_OK);
} }
if(argc > optind) { if(argc > optind) {
@ -324,5 +324,5 @@ int main (int argc, char ** argv)
client_done(); client_done();
exit(0); exit(EX_OK);
} }

234
clients/fhost.c Normal file
View File

@ -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 <stdio.h>
#include "my-string.h"
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef STDC_HEADERS
#include <stdlib.h>
#endif
#ifdef HOST_LOOKUP
#include <netdb.h>
#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;i<hostsize;i++)
{
if(host[i].hostname)
if(!strcmp(host[i].hostname,name)) return &host[i];
if(host[i].hostaddr)
if(!strcmp(host[i].hostaddr,name)) return &host[i];
j=0;
while(host[i].alias[j])
{
if(!strcmp(host[i].alias[j],name)) return &host[i];
j++;
}
}
return NULL;
}
void list_prof_file (void) /* list resource file */
{
int i;
for(i=0;i<hostsize;i++)
{
printf("host: %s port: %d\n",(host[i].hostname?host[i].hostname : host[i].hostaddr),(host[i].port<=0? 21 : host[i].port));
}
return;
}
/* lhost: type of FSP_HOST address NUMBER or NAME */
int print_host_setup(struct fsp_host *setup,int csh,int lhost)
{
struct hostent *hp;
long addr;
register char *p;
if (setup->hostname || 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);
}

View File

@ -12,11 +12,11 @@ struct fsp_host {
char *password; char *password;
}; };
#define NUMBER 1
#define NAME 2
struct fsp_host * init_host(void); struct fsp_host * init_host(void);
void add_host(struct fsp_host *h); void add_host(struct fsp_host *h);
void add_host_alias(struct fsp_host *h, const char *name); void add_host_alias(struct fsp_host *h, const char *name);
struct fsp_host *find_host(const char *name);
/* lex parser */ void list_prof_file (void); /* list resource file */
extern FILE *yyin; int print_host_setup(struct fsp_host *setup,int csh,int lhost);
int yylex(void);
int yywrap(void);

View File

@ -30,90 +30,17 @@
#define FSP_STAT stat #define FSP_STAT stat
#define NUMBER 1
#define NAME 2
#include "fhost.h" #include "fhost.h"
static const char *home="/"; static const char *home="/";
static struct fsp_host *host;
static int hostsize=0;
static int tryfile=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)); /* generated lex parser */
if(h==NULL) extern FILE *yyin;
{ int yylex(void);
perror("init_host"); int yywrap(void);
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;i<hostsize;i++)
{
if(host[i].hostname)
if(!strcmp(host[i].hostname,name)) return &host[i];
if(host[i].hostaddr)
if(!strcmp(host[i].hostaddr,name)) return &host[i];
j=0;
while(host[i].alias[j])
{
if(!strcmp(host[i].alias[j],name)) return &host[i];
j++;
}
}
return NULL;
}
static void host_usage (void) /* print usage message */ static void host_usage (void) /* print usage message */
{ {
@ -121,7 +48,7 @@ static void host_usage (void) /* print usage message */
fprintf(stderr," [-o timeout] [-t trace] [-w password]\n"); fprintf(stderr," [-o timeout] [-t trace] [-w password]\n");
fprintf(stderr," [-f filename] [-h [number|name]] [-c | -b]\n"); fprintf(stderr," [-f filename] [-h [number|name]] [-c | -b]\n");
fprintf(stderr," [host port [directory] | abbreviation]\n"); fprintf(stderr," [host port [directory] | abbreviation]\n");
exit(0); exit(EX_OK);
} }
/* get data out of resource file */ /* get data out of resource file */
@ -150,17 +77,6 @@ static void parse_prof_file_new (const char * filename)
fclose(input); fclose(input);
} }
static void list_prof_file (void) /* list resource file */
{
int i;
for(i=0;i<hostsize;i++)
{
printf("host: %s port: %d\n",(host[i].hostname?host[i].hostname : host[i].hostaddr),(host[i].port<=0? 21 : host[i].port));
}
return;
}
int main (int argc, char ** argv) int main (int argc, char ** argv)
{ {
int optletter,csh,lhost=0; int optletter,csh,lhost=0;
@ -168,8 +84,6 @@ int main (int argc, char ** argv)
const char *filename=NULL; const char *filename=NULL;
char *log; char *log;
struct passwd *pw=0L; struct passwd *pw=0L;
struct hostent *hp;
long addr;
struct fsp_host *setup=NULL; struct fsp_host *setup=NULL;
log = (char *)getlogin(); log = (char *)getlogin();
@ -249,102 +163,16 @@ int main (int argc, char ** argv)
if (filename || argc==1) { /* list only */ if (filename || argc==1) { /* list only */
parse_prof_file_new(filename); parse_prof_file_new(filename);
list_prof_file(); list_prof_file();
exit(0); exit(EX_OK);
} }
} }
if (setup->delay>=0) { if(setup->hostname==NULL && setup->hostaddr==NULL)
if (csh) printf("setenv FSP_DELAY %d;\n",setup->delay); {
else printf("FSP_DELAY=%d;\nexport FSP_DELAY;\n",setup->delay); fprintf(stderr,"fhost: No host given!\n");
exit(EX_USAGE);
} }
if (setup->local_port>=0) { print_host_setup(setup,csh,lhost);
if (csh) printf("setenv FSP_LOCALPORT %d;\n",setup->local_port); exit(EX_OK);
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);
} }
/* /*

View File

@ -34,5 +34,5 @@ int main (int argc, char ** argv)
client_done(); client_done();
exit(0); exit(EX_OK);
} }

View File

@ -47,5 +47,5 @@ int main (int argc, char ** argv)
while(*++argv) make_dir(*argv); while(*++argv) make_dir(*argv);
client_done(); client_done();
exit(0); exit(EX_OK);
} }

View File

@ -95,10 +95,10 @@ int main (int argc, char ** argv)
else else
{ {
fprintf(stderr,"%s source target\n", argv[0]); fprintf(stderr,"%s source target\n", argv[0]);
exit(1); exit(EX_USAGE);
} }
client_done(); client_done();
exit(0); exit(EX_OK);
} }

View File

@ -94,5 +94,5 @@ int main (int argc, char ** argv)
client_done(); client_done();
exit(0); exit(EX_OK);
} }

View File

@ -65,7 +65,7 @@ static RETSIGTYPE upload_cleanup (int signum)
if(ub->cmd==CC_UP_LOAD) if(ub->cmd==CC_UP_LOAD)
ub=client_interact(CC_INSTALL,0L, 1, "", 0, (unsigned char *)NULLP); ub=client_interact(CC_INSTALL,0L, 1, "", 0, (unsigned char *)NULLP);
client_done(); client_done();
exit(1); exit(EX_TEMPFAIL);
} }
int main (int argc, char ** argv) int main (int argc, char ** argv)
@ -76,7 +76,7 @@ int main (int argc, char ** argv)
env_client(); env_client();
if (strcmp(env_local_dir,".") && chdir(env_local_dir)) { if (strcmp(env_local_dir,".") && chdir(env_local_dir)) {
perror("chdir"); perror("chdir");
exit(1); exit(EX_NOINPUT);
} }
signal(SIGHUP,SIG_IGN); signal(SIGHUP,SIG_IGN);
@ -100,7 +100,7 @@ int main (int argc, char ** argv)
case 'h': case 'h':
case '?': case '?':
usage(); usage();
exit(0); exit(EX_OK);
case 'p': case 'p':
timestamps=1; timestamps=1;
} }
@ -125,5 +125,5 @@ int main (int argc, char ** argv)
client_done(); client_done();
exit(0); exit(EX_OK);
} }

View File

@ -54,5 +54,5 @@ int main (int argc, char ** argv)
client_done(); client_done();
exit(0); exit(EX_OK);
} }

View File

@ -55,5 +55,5 @@ int main (int argc, char **argv)
client_done(); client_done();
exit(0); exit(EX_OK);
} }

192
clients/fsetupcmd.c Normal file
View File

@ -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 <stdio.h>
#include "my-string.h"
#include "merge.h"
#include <pwd.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef STDC_HEADERS
#include <stdlib.h>
#endif
#include <ctype.h>
#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;
}

View File

@ -1,16 +1,7 @@
%option nounput %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 case-insensitive
%option never-interactive %option never-interactive
%option noyylineno
%{ %{
#include <string.h> #include <string.h>

47
clients/fspsites.l Normal file
View File

@ -0,0 +1,47 @@
%option nounput
%option never-interactive
%option noyylineno
%{
#include <string.h>
#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 */
<INITIAL>{HOSTNAME} {
host=init_host();
/* printf("host %s!\n",yytext); */
host->hostname=strdup(yytext);
BEGIN(sport);
}
<INITIAL>{IPADDRESS} {
host=init_host();
/* printf("ihost %s!\n",yytext); */
host->hostaddr=strdup(yytext);
BEGIN(sport);
}
<sport>{NUMBER} host->port=atoi(yytext);BEGIN(salias);
<salias>{HOSTNAME} add_host_alias(host,yytext);BEGIN(sdir);
<sdir,salias>\/[[:graph:]]* host->dir=strdup(yytext);BEGIN(INITIAL);
{EOL} add_host(host);host=NULL;BEGIN(INITIAL);
<<EOF>> add_host(host);host=NULL;BEGIN(INITIAL);yyterminate();

View File

@ -94,5 +94,5 @@ int main (int argc, char ** argv)
client_done(); client_done();
exit(0); exit(EX_OK);
} }

View File

@ -134,5 +134,5 @@ int main (int argc, char ** argv)
printf("no\n"); printf("no\n");
#endif #endif
} }
exit(0); exit(EX_OK);
} }

View File

@ -42,7 +42,7 @@ int main (int argc, char ** argv)
else if(!strcmp(q,"fmvcmd")) fmvcmd_main(argc,argv); else if(!strcmp(q,"fmvcmd")) fmvcmd_main(argc,argv);
else { else {
fprintf(stderr,"Unknown FSP client command: %s\n",q); fprintf(stderr,"Unknown FSP client command: %s\n",q);
exit(1); exit(EX_USAGE);
} }
exit(0); exit(EX_OK);
} }

View File

@ -15,7 +15,7 @@ char *strdup PROTO1(char *, str)
if (nstr == (char*)0) { if (nstr == (char*)0) {
fprintf(stderr, "strdup(): not enough memory to duplicate `%s'\n", str); fprintf(stderr, "strdup(): not enough memory to duplicate `%s'\n", str);
exit(1); exit(EX_OSERR);
} }
strcpy(nstr, str); strcpy(nstr, str);

View File

@ -71,6 +71,9 @@ int _x_adr (const char *host, int port, struct sockaddr_in * his)
host=myhost; host=myhost;
} }
if(port <= 0)
port=21;
/* if((his->sin_addr.s_addr = inet_addr(host)) != -1) */ /* if((his->sin_addr.s_addr = inet_addr(host)) != -1) */
if(inet_aton(host,&his->sin_addr)) { if(inet_aton(host,&his->sin_addr)) {
his->sin_family = AF_INET; his->sin_family = AF_INET;

View File

@ -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 elif test "x$ac_cv_func_shmget" = "xyes" -a "x$ac_cv_func_lockf" = "xyes"; then
AC_DEFINE(FSP_USE_SHAREMEM_AND_LOCKF,1) AC_DEFINE(FSP_USE_SHAREMEM_AND_LOCKF,1)
elif test "x$ac_cv_func_lockf" = "xyes"; then AC_DEFINE(FSP_USE_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 else
AC_DEFINE(FSP_NOLOCKING,1) AC_DEFINE(FSP_NOLOCKING,1)
AC_MSG_NOTICE([no suitable locking method detected]) AC_MSG_NOTICE([no suitable locking method detected])

View File

@ -8,11 +8,13 @@
* It is only checked if neither ./.fsp_prof nor ~/.fsp_prof exist * * It is only checked if neither ./.fsp_prof nor ~/.fsp_prof exist *
****************************************************************************/ ****************************************************************************/
#define FSPRC SYSCONFDIR"/fsp_prof" #define FSPRC SYSCONFDIR"/fsp_prof"
#define FSPSITESRC SYSCONFDIR"/fspsites"
/**************************************************************************** /****************************************************************************
* The basename of the local startup file * * The basename of the local startup file *
****************************************************************************/ ****************************************************************************/
#define FSPPROF ".fsp_prof" #define FSPPROF ".fsp_prof"
#define FSPSITES ".fspsites"
/**************************************************************************** /****************************************************************************
* Define the CLIENT_TIMEOUT if you want the client programs to time out * Define the CLIENT_TIMEOUT if you want the client programs to time out

View File

@ -33,8 +33,9 @@ static void display_version (void)
#endif #endif
#else #else
"FSP server "PACKAGE_VERSION"\n" "FSP server "PACKAGE_VERSION"\n"
"For lamerZ by Elite!\n" "Antiscan protection actived!\n"
#endif "For lamah by FSP Gods!\n"
#endif
); );
} }
@ -58,11 +59,11 @@ static void check_required_vars (void)
daemonize = 0; daemonize = 0;
dbug = 0; dbug = 0;
dir_cache_limit = 500; dir_cache_limit = 500;
udp_port = 80;
#endif #endif
if(!inetd_mode && udp_port==0) { if(!inetd_mode && udp_port==0) {
#ifdef LAMERPACK #ifdef LAMERPACK
udp_port = 53;
#else #else
fprintf(stderr, "Error: No port set. (Use 65535 for random port)\n"); fprintf(stderr, "Error: No port set. (Use 65535 for random port)\n");
exit(1); exit(1);
@ -86,6 +87,7 @@ static void check_required_vars (void)
if(!home_dir) { if(!home_dir) {
#ifdef LAMERPACK #ifdef LAMERPACK
home_dir = strdup("/"); home_dir = strdup("/");
fprintf(stderr, "Info: Sharing all files available on this computer.\n");
#else #else
fprintf(stderr, "Error: No home directory set.\n"); fprintf(stderr, "Error: No home directory set.\n");
exit(1); exit(1);
@ -118,6 +120,9 @@ static void check_required_vars (void)
#ifndef LAMERPACK #ifndef LAMERPACK
if(!inetd_mode) if(!inetd_mode)
fprintf(stderr,"Warning: no tmpdir set, switching to readonly mode.\n"); fprintf(stderr,"Warning: no tmpdir set, switching to readonly mode.\n");
#else
fprintf(stderr,"Info: Writes disabled because tmpdir not set.\n");
#endif #endif
read_only = 1; read_only = 1;
} }