net-snmp 3.10.4 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3359,6 +3359,10 @@ Example programs are included under the module's `example` directory.
3359
3359
 
3360
3360
  * Add MIB parsing support for middle member of OID value list containing identifier only
3361
3361
 
3362
+ ## Version 3.11.0 - 23/03/2024
3363
+
3364
+ * Fix parent object retrieval to respect MIB module imports
3365
+
3362
3366
  # License
3363
3367
 
3364
3368
  Copyright (c) 2020 Mark Abrahams <mark@abrahams.co.nz>
package/example/test.js CHANGED
@@ -43,6 +43,7 @@ store.loadFromFile (mibDir + "IANA-PRINTER-MIB.mib");
43
43
  store.loadFromFile (mibDir + "IANA-CHARSET-MIB.mib");
44
44
  store.loadFromFile (mibDir + "PRINTER-MIBv1.mib");
45
45
  store.loadFromFile (mibDir + "JOB-MONITORING-MIB-RFC.mib");
46
+ store.loadFromFile (mibDir + "NETSURE-MIB-001-B.mib");
46
47
 
47
48
  // const mibModuleOid = store.translate('1.3.6.1.4.1', snmp.OidFormat.module);
48
49
  // console.log('mibModuleOid: ', mibModuleOid);
@@ -63,5 +64,7 @@ console.log(store.translate('iso.org.dod.internet.private.enterprises.pwg.mibs.j
63
64
  // console.log('jobModule: ', JSON.stringify(jobModule, null, 2));
64
65
 
65
66
  // print IF-MIB
66
- const ifModule = store.getModule('IF-MIB');
67
- console.log('ifModule: ', JSON.stringify(ifModule, null, 2));
67
+ // const ifModule = store.getModule('IF-MIB');
68
+ // console.log('ifModule: ', JSON.stringify(ifModule, null, 2));
69
+ const nsModule = store.getModule('NETSURE-MIB-001-B');
70
+ console.log('nsModule: ', JSON.stringify(nsModule, null, 2));
package/lib/mib.js CHANGED
@@ -372,13 +372,11 @@ var MIB = function (dir) {
372
372
  Object[Symbols[i - 2]]['OID'] = '0.0';
373
373
  Object[Symbols[i - 2]]['NameSpace'] = 'null';
374
374
  } else {
375
- this.OID(Object[Symbols[i - 2]]['OBJECT IDENTIFIER'], '', Symbols[i - 2], '', function (ID, OD) {
376
-
377
- Object[Symbols[i - 2]]['OID'] = ID;
378
- Object[Symbols[i - 2]]['NameSpace'] = OD;
379
- //Object[Symbols[i - 2]]['ModuleName'] = ModuleName;
380
- // Object[Symbols[i - 2]]['ObjectName'] = Symbols[i - 2];
381
- });
375
+ const { oidString, nameString } = this.getOidAndNamePaths(Object[Symbols[i - 2]]['OBJECT IDENTIFIER'], Symbols[i - 2], ModuleName);
376
+ Object[Symbols[i - 2]]['OID'] = oidString;
377
+ Object[Symbols[i - 2]]['NameSpace'] = nameString;
378
+ // Object[Symbols[i - 2]]['ModuleName'] = ModuleName;
379
+ // Object[Symbols[i - 2]]['ObjectName'] = Symbols[i - 2];
382
380
  }
383
381
 
384
382
  } else {
@@ -533,13 +531,11 @@ var MIB = function (dir) {
533
531
  Object[Symbols[r - 1]]['OID'] = '0.0';
534
532
  Object[Symbols[r - 1]]['NameSpace'] = 'null';
535
533
  } else {
536
- this.OID(Object[Symbols[r - 1]]['OBJECT IDENTIFIER'], '', Symbols[r - 1], '', function (ID, OD) {
537
-
538
- Object[Symbols[r - 1]]['OID'] = ID;
539
- Object[Symbols[r - 1]]['NameSpace'] = OD;
540
- //Object[Symbols[r - 1]]['ModuleName'] = ModuleName;
541
- //Object[Symbols[r - 1]]['ObjectName'] = Symbols[r - 1];
542
- });
534
+ const { oidString, nameString } = this.getOidAndNamePaths(Object[Symbols[r - 1]]['OBJECT IDENTIFIER'], Symbols[r - 1], ModuleName);
535
+ Object[Symbols[r - 1]]['OID'] = oidString;
536
+ Object[Symbols[r - 1]]['NameSpace'] = nameString;
537
+ // Object[Symbols[r - 1]]['ModuleName'] = ModuleName;
538
+ // Object[Symbols[r - 1]]['ObjectName'] = Symbols[r - 1];
543
539
  }
544
540
  if ( Object[Symbols[r - 1]]['REVISIONS-DESCRIPTIONS'] &&
545
541
  Object[Symbols[r - 1]]['REVISIONS-DESCRIPTIONS'].length == 1 &&
@@ -732,71 +728,71 @@ var MIB = function (dir) {
732
728
  }
733
729
  callback(summary);
734
730
  },
735
- OID: function (OBJECT_IDENTIFIER, ID, ObjectName, OD, callback) {
736
- let members = OBJECT_IDENTIFIER.split(/\s+/);
737
- let parent = members.shift();
738
- let oid = members.pop();
739
- if ( oid.includes('(') ) {
740
- let oidSplit = oid.match(/(.*)\((.+)\)$/);
741
- oid = oidSplit[2];
742
- }
743
- if (parent == 'iso') {
744
- let midID = ['1'];
745
- let midOD = ['iso'];
746
- for (let entry of members) {
747
- let match = entry.match(/(.*)\((.+)\)$/);
748
- midID.push(match[2]);
749
- midOD.push(match[1]);
750
- }
751
- midID.push(oid);
752
- if ( ID != '' ) {
753
- midID.push(ID);
754
- }
755
- if ( OD != '' ) {
756
- midOD.push(OD);
757
- }
758
- midOD.push(ObjectName);
759
- callback(midID.join('.'), midOD.join('.'));
760
- return;
761
- }
762
- if (members.length > 0) {
763
- // We have middle entries e.g. { enterprises pwg(2699) mibs(1) 1 }
764
- let midID = [];
765
- let midOD = [parent];
766
- for (let entry of members) {
767
- let match = entry.match(/(.*)\((.+)\)$/);
768
- // cater for unannotated middle entries
731
+ getOidAndNamePaths: function (OBJECT_IDENTIFIER, ObjectName, ModuleName) {
732
+ const entries = OBJECT_IDENTIFIER.split(/\s+/);
733
+ const parent = entries.shift();
734
+ const finalEntries = entries.pop();
735
+ const nameEntries = [];
736
+ const oidEntries = [];
737
+ // process middle entries if any
738
+ // e.g. { enterprises pwg(2699) mibs(1) jobmonMIB(1) }
739
+ for (const entry of entries) {
740
+ const match = entry.match(/(.*)\((.+)\)$/);
741
+ if ( match ) {
742
+ oidEntries.push(match[2]);
743
+ nameEntries.push(match[1]);
744
+ } else {
745
+ // cater for unannotated middle entries (use number entries for name entries)
769
746
  // e.g. { enterprises 2699 1 1 }
770
- if ( ! match ) {
771
- midID.push(entry);
772
- midOD.push(entry);
773
- } else {
774
- midID.push(match[2]);
775
- midOD.push(match[1]);
776
- }
747
+ oidEntries.push(entry);
748
+ nameEntries.push(entry);
777
749
  }
778
- midID.push(oid);
779
- if ( ID != '' ) {
780
- midID.push(ID);
781
- }
782
- if ( OD != '' ) {
783
- midOD.push(OD);
784
- }
785
- ID = midID.join('.');
786
- OD = midOD.join('.');
750
+ }
751
+ // ignore name entry if it exists on final OID entry - use object name instead
752
+ // e.g. for { mibs jobmonMIB(1) } we would ignore the "jobmonMIB" name
753
+ let finalOid;
754
+ if ( finalEntries.includes('(') ) {
755
+ const oidSplit = finalEntries.match(/(.*)\((.+)\)$/);
756
+ finalOid = oidSplit[2];
787
757
  } else {
788
- // We have no middle entries e.g. { enterprises 2021 }
789
- ID = ID == '' ? oid : [oid, ID].join('.');
790
- OD = OD == '' ? parent : [parent, OD].join('.');
758
+ finalOid = finalEntries;
791
759
  }
792
- for (var ModuleName in this.Modules) {
793
- if (this.Modules.hasOwnProperty(ModuleName)) {
794
- if (this.Modules[ModuleName][parent]) {
795
- this.OID(this.Modules[ModuleName][parent]["OBJECT IDENTIFIER"], ID, ObjectName, OD, callback);
796
- break;
760
+ oidEntries.push(finalOid);
761
+ nameEntries.push(ObjectName);
762
+ let parentOidPrefix;
763
+ let parentNamePrefix;
764
+ if ( parent == 'iso' ) {
765
+ parentOidPrefix = '1';
766
+ parentNamePrefix = 'iso';
767
+ } else {
768
+ // find parent object
769
+ // first look in the current module
770
+ let parentObject = this.Modules[ModuleName][parent];
771
+ // if not found, find the import entry for the object
772
+ if ( ! parentObject ) {
773
+ const importModules = Object.keys(this.Modules[ModuleName]['IMPORTS']);
774
+ for (let importModule of importModules) {
775
+ if (this.Modules[importModule][parent]) {
776
+ parentObject = this.Modules[importModule][parent];
777
+ break;
778
+ }
797
779
  }
798
780
  }
781
+ if ( ! parentObject ) {
782
+ // occurs for out-of-order dependencies in a module
783
+ // console.warn('Parent object not found for ' + parent);
784
+ return {
785
+ oidString: '',
786
+ nameString: ''
787
+ };
788
+ }
789
+ parentOidPrefix = parentObject['OID'];
790
+ parentNamePrefix = parentObject['NameSpace'];
799
791
  }
792
+ return {
793
+ oidString: parentOidPrefix + '.' + oidEntries.join('.'),
794
+ nameString: parentNamePrefix + '.' + nameEntries.join('.')
795
+ };
800
796
  }
801
797
  });
802
798
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "net-snmp",
3
- "version": "3.10.4",
3
+ "version": "3.11.0",
4
4
  "description": "JavaScript implementation of the Simple Network Management Protocol (SNMP)",
5
5
  "main": "index.js",
6
6
  "directories": {