/*********************************************************************\ * 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) lhost=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); }