net-snmp 3.10.3 → 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
@@ -3355,6 +3355,14 @@ Example programs are included under the module's `example` directory.
3355
3355
 
3356
3356
  * Add MIB parsing support for final member of OID value list containing identifier/descriptor pair
3357
3357
 
3358
+ ## Version 3.10.4 - 22/03/2024
3359
+
3360
+ * Add MIB parsing support for middle member of OID value list containing identifier only
3361
+
3362
+ ## Version 3.11.0 - 23/03/2024
3363
+
3364
+ * Fix parent object retrieval to respect MIB module imports
3365
+
3358
3366
  # License
3359
3367
 
3360
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,64 +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);
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)
746
+ // e.g. { enterprises 2699 1 1 }
747
+ oidEntries.push(entry);
748
+ nameEntries.push(entry);
757
749
  }
758
- midOD.push(ObjectName);
759
- callback(midID.join('.'), midOD.join('.'));
760
- return;
761
750
  }
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
- midID.push(match[2]);
769
- midOD.push(match[1]);
770
- }
771
- midID.push(oid);
772
- if ( ID != '' ) {
773
- midID.push(ID);
774
- }
775
- if ( OD != '' ) {
776
- midOD.push(OD);
777
- }
778
- ID = midID.join('.');
779
- OD = midOD.join('.');
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];
780
757
  } else {
781
- // We have no middle entries e.g. { enterprises 2021 }
782
- ID = ID == '' ? oid : [oid, ID].join('.');
783
- OD = OD == '' ? parent : [parent, OD].join('.');
758
+ finalOid = finalEntries;
784
759
  }
785
- for (var ModuleName in this.Modules) {
786
- if (this.Modules.hasOwnProperty(ModuleName)) {
787
- if (this.Modules[ModuleName][parent]) {
788
- this.OID(this.Modules[ModuleName][parent]["OBJECT IDENTIFIER"], ID, ObjectName, OD, callback);
789
- 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
+ }
790
779
  }
791
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'];
792
791
  }
792
+ return {
793
+ oidString: parentOidPrefix + '.' + oidEntries.join('.'),
794
+ nameString: parentNamePrefix + '.' + nameEntries.join('.')
795
+ };
793
796
  }
794
797
  });
795
798
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "net-snmp",
3
- "version": "3.10.3",
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": {