defhost.c
上传用户:shbosideng
上传日期:2013-05-04
资源大小:1555k
文件大小:5k
源码类别:

SNMP编程

开发平台:

C/C++

  1. /*
  2. Iulian Radu [v2.0@07.1999]
  3. */
  4. int mkndx(char* file){
  5. char tmp[257],xtmp[257],*ptmp;
  6. FILE *fcfg,*fndx;
  7. unsigned long ofs,xofs;
  8. /* open .cfg file */
  9. if(cfgdir[0]) sprintf(tmp,"%s/%s",cfgdir,file);
  10. else strcpy(tmp,file);
  11. fcfg=fopen(tmp,"rt");
  12. if(!fcfg){
  13.     fprintf(stderr,err[0],tmp);
  14.     return 1;}
  15. /* check if file .cfg has length 0 */
  16. if(fseek(fcfg,0,SEEK_END)){
  17.     fclose(fcfg);
  18.     return 1;}
  19. if(!ftell(fcfg)){
  20.     fprintf(stderr,err[1],tmp);
  21.     sprintf(xtmp,"rm -f %s",tmp);
  22.     system(xtmp);
  23.     return 1;}
  24. if(fseek(fcfg,0,SEEK_SET)) return 1;
  25. /* create de index file */
  26. sprintf(tmp,"%s.ndx",extractfname(file));
  27. fndx=fopen(tmp,"wb");
  28. if(!fndx){
  29.     fclose(fcfg);
  30.     return 1;}
  31. while(!feof(fcfg)){
  32.     xofs=ftell(fcfg);
  33.     tmp[0]=0;
  34.     fgets(tmp,256,fcfg);
  35.     if((tmp[0]=='#') || (tmp[0]==0) || (tmp[0]=='n')) continue;
  36.     if(!strncmp(tmp,"Target[",7)) ofs=xofs;
  37.     if(!strncmp(tmp,"Title[",6)){
  38. ptmp=findnc(tmp,2,':');
  39. trim(ptmp);
  40. fprintf(fndx,"%08ld %sn",ofs,ptmp);}
  41.     }
  42. fclose(fndx);
  43. fclose(fcfg);
  44. return 0;
  45. }
  46. void setPI(char* buf,unsigned long* pos,char** ifa){
  47. sscanf(buf,"%08ld",pos);
  48. *ifa=buf+9;
  49. killnl(buf+9);
  50. }
  51. void gettarget(char* buf,char* target){ //word between []
  52. int i;
  53. for(;buf[0]!='[';buf++);
  54. buf++;
  55. for(i=0;buf[0]!=']';buf++,i++) target[i]=buf[0];
  56. target[i]=0;
  57. }
  58. char* findhost(char* buf){
  59. int i;
  60. for(i=0;i<nhosts;i++)
  61.     if(!strcmp(hostsn[i],buf))
  62. return hostsi[i];
  63. return NULL;
  64. }
  65. void convertname(char* tmp){
  66. for(;tmp[0];tmp++){
  67.     if(!isalnum(tmp[0])) tmp[0]='_';
  68.     else tmp[0]=tolower(tmp[0]);
  69.     }
  70. }
  71. void fdefhost(char* buf){
  72. char host[129],fcfg[257],tmp[257],target[129],xtarget[129],*port;
  73. FILE *fi;
  74. unsigned long pos;
  75. char *ifa=NULL,
  76.      *txt[]={"day","week","month","year"},
  77.      *xtxt[]={"-day.gif","-week.gif","-month.gif","-year.gif",".html",".log",".old"};
  78. int i,j;
  79. if(!fm){
  80.     fprintf(stderr,err[2]);
  81.     return;}
  82. sscanf(buf,"%s %s",host,fcfg);
  83. if(findhost(host))
  84.     fprintf(stderr,err[6],host);
  85. /* read index file */
  86. sprintf(tmp,"%s.ndx",extractfname(fcfg));
  87. fi=fopen(tmp,"rt");
  88. if(!fi){
  89.     if(mkndx(fcfg)) return; //create the index file 
  90.     fi=fopen(tmp,"rt");
  91.     if(!fi) return;
  92.     }
  93. port=findnsp(buf,2);
  94. while(!feof(fi)){
  95.     fgets(tmp,256,fi);
  96.     setPI(tmp,&pos,&ifa); //read pos and interface
  97.     if(!strcasecmp(port,ifa)){
  98. break;}
  99.     }
  100. if(feof(fi)){
  101.     if(cfgdir[0]) fprintf(stderr,err[3],port,cfgdir,fcfg);
  102.     else fprintf(stderr,err[4],port,fcfg);
  103.     fclose(fi);
  104.     return;}
  105. fclose(fi);
  106. /* comment in mrtg.cfg file */
  107. if(cfgdir[0]){
  108.     fprintf(fm,"n#host %s, cfgfile %s/%s, port %snn",host,cfgdir,fcfg,port);
  109.     sprintf(tmp,"%s/%s",cfgdir,fcfg);}
  110. else{
  111.     fprintf(fm,"n#host %s, cfgfile %s, port %snn",host,fcfg,port);
  112.     strcpy(tmp,fcfg);}
  113. /* read config file to extract section */
  114. fi=fopen(tmp,"rt");
  115. if(!fi){
  116. fprintf(stderr,err[5],tmp);
  117. return;}
  118. fseek(fi,pos,SEEK_SET);
  119. fgets(buf,256,fi); /*Target[...*/
  120. gettarget(buf,xtarget);
  121. if(chngname){
  122.     strcpy(target,host);
  123.     convertname(target); /* switch to lowercase */
  124.     j=strlen(buf);
  125.     for(i=0;i<j;i++){ /* write the line Target[... */
  126. fprintf(fm,"%c",buf[i]);
  127. if(buf[i]=='['){
  128.     for(;i<j;i++) if(buf[i]==']') break;
  129.          fprintf(fm,"%s]",target);}
  130. }
  131.     while(!feof(fi)){ /* write rest of the lines */
  132. fgets(buf,256,fi);
  133. j=strlen(buf);
  134. for(i=0;i<j;i++){
  135.     fprintf(fm,"%c",buf[i]);
  136.     if(buf[i]=='['){
  137. for(;i<j;i++) if(buf[i]==']') break;
  138.      fprintf(fm,"%s]",target);}
  139.     }
  140. if(!strncmp(buf,"#-",2)) break;
  141. }
  142.     }
  143. else{
  144.     strcpy(target,xtarget);
  145.     fprintf(fm,"%s",buf);
  146.     while(!feof(fi)){
  147. fgets(buf,256,fi);
  148. fprintf(fm,"%s",buf);
  149. if(!strncmp(buf,"#-",2)) break;
  150. }
  151.     }
  152. fclose(fi);
  153. strcpy(hostsn[nhosts],host);
  154. strcpy(hostsi[nhosts],target);
  155. nhosts++;
  156. /* mk?,? */
  157. for(i=0;i<4;i++){
  158.     for(j=0;j<nmkr[i];j++){
  159. if(!strcmp(mkrn[j][i],fcfg)){
  160.     fprintf(mkri[j][i],"<HR><BR><H1>%s %s</H1><BR>n",btxt[1],host);
  161.     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]);
  162.     else fprintf(mkri[j][i],"<A HREF="%s.html"><IMG SRC="%s-%s.gif"></IMG></A><BR>n",target,target,txt[i]);
  163.     break;}
  164. }
  165.     }
  166. convertname(host); /* change again the name, this time host var */
  167. switch(conv){
  168.     case 1: //convip2name
  169. for(i=0;i<7;i++){
  170.     sprintf(tmp,"mv %s%s%s %s%s%s",mrtgoutpath,xtarget,xtxt[i],mrtgoutpath,host,xtxt[i]);
  171.     system(tmp);}
  172. break;
  173.     case 2: //convname2ip
  174. for(i=0;i<7;i++){
  175.     sprintf(tmp,"mv %s%s%s %s%s%s",mrtgoutpath,host,xtxt[i],mrtgoutpath,xtarget,xtxt[i]);
  176.     system(tmp);}
  177. break;
  178.     }
  179. }