/*
Iulian Radu [v2.0@07.1999]
*/
int mkndx(char* file){
char tmp[257],xtmp[257],*ptmp;
FILE *fcfg,*fndx;
unsigned long ofs,xofs;
/* open .cfg file */
if(cfgdir[0]) sprintf(tmp,"%s/%s",cfgdir,file);
else strcpy(tmp,file);
fcfg=fopen(tmp,"rt");
if(!fcfg){
fprintf(stderr,err[0],tmp);
return 1;}
/* check if file .cfg has length 0 */
if(fseek(fcfg,0,SEEK_END)){
fclose(fcfg);
return 1;}
if(!ftell(fcfg)){
fprintf(stderr,err[1],tmp);
sprintf(xtmp,"rm -f %s",tmp);
system(xtmp);
return 1;}
if(fseek(fcfg,0,SEEK_SET)) return 1;
/* create de index file */
sprintf(tmp,"%s.ndx",extractfname(file));
fndx=fopen(tmp,"wb");
if(!fndx){
fclose(fcfg);
return 1;}
while(!feof(fcfg)){
xofs=ftell(fcfg);
tmp[0]=0;
fgets(tmp,256,fcfg);
if((tmp[0]=='#') || (tmp[0]==0) || (tmp[0]=='\n')) continue;
if(!strncmp(tmp,"Target[",7)) ofs=xofs;
if(!strncmp(tmp,"Title[",6)){
ptmp=findnc(tmp,2,':');
trim(ptmp);
fprintf(fndx,"%08ld %s\n",ofs,ptmp);}
}
fclose(fndx);
fclose(fcfg);
return 0;
}
void setPI(char* buf,unsigned long* pos,char** ifa){
sscanf(buf,"%08ld",pos);
*ifa=buf+9;
killnl(buf+9);
}
void gettarget(char* buf,char* target){ //word between []
int i;
for(;buf[0]!='[';buf++);
buf++;
for(i=0;buf[0]!=']';buf++,i++) target[i]=buf[0];
target[i]=0;
}
char* findhost(char* buf){
int i;
for(i=0;i<nhosts;i++)
if(!strcmp(hostsn[i],buf))
return hostsi[i];
return NULL;
}
void convertname(char* tmp){
for(;tmp[0];tmp++){
if(!isalnum(tmp[0])) tmp[0]='_';
else tmp[0]=tolower(tmp[0]);
}
}
void fdefhost(char* buf){
char host[129],fcfg[257],tmp[257],target[129],xtarget[129],*port;
FILE *fi;
unsigned long pos;
char *ifa=NULL,
*txt[]={"day","week","month","year"},
*xtxt[]={"-day.gif","-week.gif","-month.gif","-year.gif",".html",".log",".old"};
int i,j;
if(!fm){
fprintf(stderr,err[2]);
return;}
sscanf(buf,"%s %s",host,fcfg);
if(findhost(host))
fprintf(stderr,err[6],host);
/* read index file */
sprintf(tmp,"%s.ndx",extractfname(fcfg));
fi=fopen(tmp,"rt");
if(!fi){
if(mkndx(fcfg)) return; //create the index file
fi=fopen(tmp,"rt");
if(!fi) return;
}
port=findnsp(buf,2);
while(!feof(fi)){
fgets(tmp,256,fi);
setPI(tmp,&pos,&ifa); //read pos and interface
if(!strcasecmp(port,ifa)){
break;}
}
if(feof(fi)){
if(cfgdir[0]) fprintf(stderr,err[3],port,cfgdir,fcfg);
else fprintf(stderr,err[4],port,fcfg);
fclose(fi);
return;}
fclose(fi);
/* comment in mrtg.cfg file */
if(cfgdir[0]){
fprintf(fm,"\n#host %s, cfgfile %s/%s, port %s\n\n",host,cfgdir,fcfg,port);
sprintf(tmp,"%s/%s",cfgdir,fcfg);}
else{
fprintf(fm,"\n#host %s, cfgfile %s, port %s\n\n",host,fcfg,port);
strcpy(tmp,fcfg);}
/* read config file to extract section */
fi=fopen(tmp,"rt");
if(!fi){
fprintf(stderr,err[5],tmp);
return;}
fseek(fi,pos,SEEK_SET);
fgets(buf,256,fi); /*Target[...*/
gettarget(buf,xtarget);
if(chngname){
strcpy(target,host);
convertname(target); /* switch to lowercase */
j=strlen(buf);
for(i=0;i<j;i++){ /* write the line Target[... */
fprintf(fm,"%c",buf[i]);
if(buf[i]=='['){
for(;i<j;i++) if(buf[i]==']') break;
fprintf(fm,"%s]",target);}
}
while(!feof(fi)){ /* write rest of the lines */
fgets(buf,256,fi);
j=strlen(buf);
for(i=0;i<j;i++){
fprintf(fm,"%c",buf[i]);
if(buf[i]=='['){
for(;i<j;i++) if(buf[i]==']') break;
fprintf(fm,"%s]",target);}
}
if(!strncmp(buf,"#-",2)) break;
}
}
else{
strcpy(target,xtarget);
fprintf(fm,"%s",buf);
while(!feof(fi)){
fgets(buf,256,fi);
fprintf(fm,"%s",buf);
if(!strncmp(buf,"#-",2)) break;
}
}
fclose(fi);
strcpy(hostsn[nhosts],host);
strcpy(hostsi[nhosts],target);
nhosts++;
/* mk?,? */
for(i=0;i<4;i++){
for(j=0;j<nmkr[i];j++){
if(!strcmp(mkrn[j][i],fcfg)){
fprintf(mkri[j][i],"<HR><BR><H1>%s %s</H1><BR>\n",btxt[1],host);
if(base[0]) fprintf(mkri[j][i],"<A HREF=\"http://%s/%s.html\"><IMG SRC=\"http://%s/%s-%s.gif\"></IMG></A><BR>\n",base,target,base,target,txt[i]);
else fprintf(mkri[j][i],"<A HREF=\"%s.html\"><IMG SRC=\"%s-%s.gif\"></IMG></A><BR>\n",target,target,txt[i]);
break;}
}
}
convertname(host); /* change again the name, this time host var */
switch(conv){
case 1: //convip2name
for(i=0;i<7;i++){
sprintf(tmp,"mv %s%s%s %s%s%s",mrtgoutpath,xtarget,xtxt[i],mrtgoutpath,host,xtxt[i]);
system(tmp);}
break;
case 2: //convname2ip
for(i=0;i<7;i++){
sprintf(tmp,"mv %s%s%s %s%s%s",mrtgoutpath,host,xtxt[i],mrtgoutpath,xtarget,xtxt[i]);
system(tmp);}
break;
}
}