Hello, all!

Can you please help me to find workaround?

First of all description. As far as I know net-snmp uses mibs/.index file to
remember MIB modules.

I deleted that index file and net-snmp could not load any mibs with errors:

Cannot find module (IP-MIB): At line 0 in (none)
parse-mibs:
Cannot find module (IF-MIB): At line 0 in (none)
parse-mibs:
Cannot find module (TCP-MIB): At line 0 in (none)
parse-mibs:
Cannot find module (UDP-MIB): At line 0 in (none)

...

I tried to find out a root cause in code of 5.4.2.1. It is in next lines:

function: add_mibdir():

...

  if ((dir = opendir(dirname))) {
  snprintf(tmpstr, sizeof(tmpstr), "%s/.index", dirname);
  tmpstr[ sizeof(tmpstr)-1 ] = 0;
  ip = fopen(tmpstr, "w");
  while ((file = readdir(dir))) {
  /*
  * Only parse file names that don't begin with a '.'
  * Also skip files ending in '~', or starting/ending
  * with '#' which are typically editor backup files.
  */
  if (file->d_name != NULL) {
  fname_len = strlen( file->d_name );
  if (fname_len > 0 && file->d_name[0] != '.'
  && file->d_name[0] != '#'
  && file->d_name[fname_len-1] != '#'
  && file->d_name[fname_len-1] != '~') {
  snprintf(tmpstr, sizeof(tmpstr), "%s/%s", dirname, file->d_name);
  tmpstr[ sizeof(tmpstr)-1 ] = 0;
  if ((dir2 = opendir(tmpstr))) {
  /*
  * file is a directory, don't read it
  */
  closedir(dir2);
  } else {
  if ( !add_mibfile( tmpstr, file->d_name, ip ))
  count++;
  }
  }

...

closer:

  if ((dir2 = opendir(tmpstr))) { <--- OPENDIR CAN OPEN A FILE EVEN IT IS
NOT A DIRECTORY
  /*
  * file is a directory, don't read it
  */
  closedir(dir2);


test.c:

#include<stdio.h>
#include <dirent.h>

int main(int argc,char**argv)
{
  DIR*d;
  if((d=opendir(argv[1])))
  {
  printf("OPEN: %s\n",argv[1]);
  if(readdir(d))
  {
  puts("readdir: NOT NULL");
  }
  else
  {
  perror("readdir NULL");
  }
  }
  else
  {
  perror("opendir");
  }
  return 0;

}

result under Debian:

bubnov /home/alek> uname -a
Linux bubnov 2.6.18-6-686 #1 SMP Mon Oct 13 16:13:09 UTC 2008 i686 GNU/Linux
bubnov /home/alek> :> 1
bubnov /home/alek> ./a.out 1
opendir: Not a directory

result under Suse (10.3 and 11 too):

linux-h110 /root# uname -a
Linux linux-h110 2.6.22.5-31-default #1 SMP 2007/09/21 22:29:00 UTC i686
i686 i386 GNU/Linux
linux-h110 /root# :> 1
linux-h110 /root# ./a.out 1
OPEN: 1
readdir NULL: Not a directory

Note: both of that OSes uses EXT3

Below the root cause of why I cannot add a new MIB module.

My question is: How to load a new module? What is workaround for that case?

One of possible solution is to edit .index file. Is it another?

And I have another question why net-snmp could create .index file at first
run?

-- 
/BR, Alexander
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Net-snmp-users mailing list
Net-snmp-users@lists.sourceforge.net
Please see the following page to unsubscribe or change other options:
https://lists.sourceforge.net/lists/listinfo/net-snmp-users

Reply via email to