Subject: RFC 2592 update diff

From: Juergen Schoenwaelder <[email-masked]>
Date: Fri, 2 Mar 2001 13:52:41 +0100

Below is the Script MIB diff relative to RFC 2592.

/js

Index: sm.me
===================================================================
RCS file: /usr/home/schoenw/CVS/ietf/disman/src/sm.me,v
retrieving revision 1.9
retrieving revision 1.12
diff -U10 -r1.9 -r1.12
--- sm.me	1999/10/20 09:17:52	1.9
+++ sm.me	2001/03/02 12:32:13	1.12
@@ -5,47 +5,48 @@
 .ie \nh \{\
 .ll 66
 .po 2 \}
 .el \{\
 .ll 7.2i
 .lt 7.2i
 .pl 10.0i
 .nr sf R
 .nr bm 0.5i
 .nr fm 0 \}
-.he 'Internet-Draft'Script MIB'May 1999'
-.fo 'Levi & Schoenwaelder''[Page %ENDPAGE'
+.he 'Internet-Draft'Script MIB'March 2001'
+.fo 'Levi & Schoenwaelder'Standards Track'[Page %ENDPAGE'
 .hy 0
 .de $0
 .(x t
 \\$2 \\$1
 .)x
 ..
 .lp
 .na
 .nh

 Network Working Group                                            D. Levi
-Request for Comments: 2592                               Nortel Networks
-Category: Standards Track                               J. Schoenwaelder
+Internet-Draft                                           Nortel Networks
+Expires September 2001                                  J. Schoenwaelder
                                                          TU Braunschweig
-                                                                May 1999
+                                                           1. March 2001
 .sp 1
 .ce 2
 Definitions of Managed Objects for the
 Delegation of Management Scripts
 .sp 1
+.ce 1
+<draft-ietf-disman-script-mib-v2-02.txt>

 .ti 0
 Status of this Memo
 .PP
-
 This document is an Internet-Draft and is in full conformance with all
 provisions of Section 10 of RFC 2026.  Internet-Drafts are working
 documents of the Internet Engineering Task Force (IETF), its areas,
 and its working groups.  Note that other groups may also distribute
 working documents as Internet-Drafts.
 .PP
 Internet-Drafts are draft documents valid for a maximum of six months
 and may be updated, replaced, or obsoleted by other documents at any
 time.  It is inappropriate to use Internet-Drafts as reference
 material or to cite them other than as "work in progress."
@@ -55,21 +56,21 @@
 .PP
 The list of Internet-Draft Shadow Directories can be accessed at
 http://www.ietf.org/shadow.html
 .PP
 Distribution of this document is unlimited. Please send comments
 to the Distributed Management Working Group <[email-masked]>.
 .PP
 .ti 0
 Copyright Notice
 .PP
-Copyright (C) The Internet Society (1999).  All Rights Reserved.
+Copyright (C) The Internet Society (2001).  All Rights Reserved.
 .PP
 .ti 0
 Abstract
 .PP
 This memo defines a portion of the Management Information Base (MIB)
 for use with network management protocols in the Internet
 community. In particular, it describes a set of managed objects that
 allow the delegation of management scripts to distributed managers.

 .bp
@@ -82,21 +83,21 @@
 .bp
 .sh 1 Introduction
 .PP
 This memo defines a portion of the Management Information Base (MIB)
 for use with network management protocols in the Internet
 community. In particular, it describes a set of managed objects that
 allow the delegation of management scripts to distributed managers.
 .PP
 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
-document are to be interpreted as described in RFC 2119 [21].
+document are to be interpreted as described in RFC 2119 [RFC2119].

 .so boiler.me

 .sh 1 Overview
 .PP
 The Script MIB module defined in this memo can be used to delegate
 management functions to distributed managers. Management functions are
 defined as management scripts written in a management scripting
 language. This MIB makes no assumptions about the language itself and
 even allows distribution of compiled native code, if an implementation
@@ -133,33 +134,33 @@
 Script MIB.
 .ip "   o" 8
 A `higher-level manager', or just `manager', is a processing entity or
 human who initiates and controls the operations performed by one or
 more distributed managers.
 .ip "   o" 8
 A `management script' is a set of instructions written in an
 executable language which implements a management function.
 .ip "   o" 8
 A `management scripting language' is a language used to write
-management scripts. Note, the term scripting language does not imply
-that the language must have the characteristics of scripting languages
+management scripts. The term scripting language does not imply that
+the language must have the characteristics of scripting languages
 (e.g. string orientation, interpretation, weak typing). The MIB
 defined in this memo also allows to control management scripts written
 in arbitrary compiled system programming languages.
 .ip "   o" 8
 A `distributed manager' can be decomposed into an `SNMP entity' which
 implements the Script MIB defined in this memo and the `runtime
 system' that executes scripts. The Script MIB sees the runtime system
 as the managed resource which is controlled by the MIB.

 The runtime system can act as an SNMP application, according to the
-SNMP architecture defined in RFC 2271 [1]. For example, a runtime
+SNMP architecture defined in RFC 2571 [RFC2571]. For example, a runtime
 system which sends SNMP requests to other SNMP entities will act as a
 command generator application. The SNMP applications in the runtime
 system may use the same SNMP engine which also serves the command
 responder application used to implement the Script MIB, but they are
 not required to do so.
 .ip "   o" 8
 A `launch button' is the conceptual button used to start the execution
 of a management script. It assignes control parameters to a management
 script. In particular, it defines the ownership of the scripts started
 from a launch button. The ownership can be used by the language
@@ -177,21 +178,21 @@
 The Script MIB must provide mechanisms that help to avoid new
 management problems (e.g. script version problems).
 .ip "   o" 8
 The Script MIB must provide SNMP interfaces to all functions
 required to delegate management scripts. However, other
 protocols might be used in addition if they provide a
 significant improvement in terms of convenience for
 implementation or performance.
 .ip "   o" 8
 The Script MIB must be organized so that access can be controlled
-effectively by using view-based access control [15].
+effectively by using view-based access control [RFC2575].
 .PP
 The following sections discuss some design issues in more detail.

 .sh 2  "Script Languages"
 .PP
 The Script MIB defined in this memo makes no assumption about the
 script language. This MIB can therefore be used in combination with
 different languages (such as Tcl or Java) and/or different versions of
 the same language. No assumptions are made about the format in which
 management scripts are transferred.
@@ -247,26 +248,26 @@
 the `push model'. The second approach is the `pull model' where the
 manager tells the distributed manager the location of the script and
 the distributed manager retrieves the script itself.
 .PP
 The MIB defined in this memo supports both models. The `push model' is
 realized by a table which allows a manager to write scripts by sending
 a sequence of SNMP set requests. The script can be split into several
 fragments in order to deal with SNMP message size limitations.
 .PP
 The `pull model' is realized by the use of Uniform Resource Locators
-(URLs) [17] that point to the script source. The manager writes the
+(URLs) [RFC2396] that point to the script source. The manager writes the
 URL which points to the script source to the distributed manager by
 sending an SNMP set request. The distributed manager is then
 responsible for retrieving the document using the protocol specified
-in the URL. This allows the use of protocols like FTP [18] or HTTP
-[19] to transfer large management scripts efficiently.
+in the URL. This allows the use of protocols like FTP [RFC959] or HTTP
+[RFC2616] to transfer large management scripts efficiently.
 .PP
 The Script MIB also allows management scripts that are hard-wired
 into the Script MIB implementation. Built-in scripts can either be
 implemented in a language runtime system, or they can be built
 natively into the Script MIB implementation. The implementation of the
 `push model' or the `pull model' is not required.
 .PP
 Scripts can be stored in non-volatile storage. This allows a
 distributed manager to restart scripts if it is restarted (off-line
 restart). A manager is not required to push scripts back into the
@@ -462,68 +463,91 @@
 .bp
 .sh 1 Definitions
 .sp
 .in +.3i
 .nf
 DISMAN-SCRIPT-MIB DEFINITIONS ::= BEGIN

 IMPORTS
     MODULE-IDENTITY, OBJECT-TYPE, NOTIFICATION-TYPE,
     Integer32, Unsigned32, mib-2
-	FROM SNMPv2-SMI
+        FROM SNMPv2-SMI

     RowStatus, TimeInterval, DateAndTime, StorageType, DisplayString
         FROM SNMPv2-TC

     MODULE-COMPLIANCE, OBJECT-GROUP, NOTIFICATION-GROUP
         FROM SNMPv2-CONF

     SnmpAdminString
-	FROM SNMP-FRAMEWORK-MIB;
+        FROM SNMP-FRAMEWORK-MIB;

 scriptMIB MODULE-IDENTITY
-    LAST-UPDATED "9902221800Z"
+    LAST-UPDATED "200103010000Z"
     ORGANIZATION "IETF Distributed Management Working Group"
     CONTACT-INFO
-	"David B. Levi
-	 Nortel Networks
-	 4401 Great America Parkway
-	 Santa Clara, CA 95052-8185
-	 U.S.A.
-	 Tel: +1 423 686 0432
-	 E-mail: [email-masked]
-
-	 Juergen Schoenwaelder
-	 TU Braunschweig
-	 Bueltenweg 74/75
-	 38106 Braunschweig
-	 Germany
-	 Tel: +49 531 391-3283
-	 E-mail: [email-masked]"
+        "David B. Levi
+         Nortel Networks
+         4401 Great America Parkway
+         Santa Clara, CA 95052-8185
+         U.S.A.
+         Tel: +1 423 686 0432
+         E-mail: [email-masked]
+
+         Juergen Schoenwaelder
+         TU Braunschweig
+         Bueltenweg 74/75
+         38106 Braunschweig
+         Germany
+         Tel: +49 531 391-3283
+         E-mail: [email-masked]"
+    DESCRIPTION
+        "This MIB module defines a set of objects that allow to
+         delegate management scripts to distributed managers."
+    REVISION    "200103010000Z"
+    DESCRIPTION
+        "Revised version, published as RFC XXXX.
+
+         This revision introduces several new objects: smScriptError,
+         smScriptLastChange, smLaunchError, smLaunchLastChange,
+         smiLaunchRowExpireTime, smRunResultTime, and smRunErrorTime.
+
+         The following existing objects were updated: the maximum
+         value of smRunLifeTime now disables the timer, an
+         autostart value was added to the smLaunchAdminStatus
+         object, and a new expired state was added to the
+         smLaunchOperStatus object.
+
+         A new smScriptException notification has been added to
+         support runtime error notifications.
+
+	 Clarifications have been added in several places to remove
+	 ambiguities or contradictions that were discovered and
+	 reported by implementors."
+    REVISION	"199902221800Z"
     DESCRIPTION
-	"This MIB module defines a set of objects that allow to
-	 delegate management scripts to distributed managers."
+	"Initial version, published as RFC 2592."
     ::= { mib-2 64 }

 --
 -- The groups defined within this MIB module:
 --

 smObjects	OBJECT IDENTIFIER ::= { scriptMIB 1 }
 smNotifications OBJECT IDENTIFIER ::= { scriptMIB 2 }
 smConformance	OBJECT IDENTIFIER ::= { scriptMIB 3 }

 --
 -- Script language and language extensions.
 --
 -- This group defines tables which list the languages and the
--- language extensions supported by a script MIB implementation.
+-- language extensions supported by a Script MIB implementation.
 -- Languages are uniquely identified by object identifier values.
 --

 smLangTable OBJECT-TYPE
     SYNTAX	SEQUENCE OF SmLangEntry
     MAX-ACCESS  not-accessible
     STATUS	current
     DESCRIPTION
 	"This table lists supported script languages."
     ::= { smObjects 1 }
@@ -551,22 +575,22 @@
     MAX-ACCESS  not-accessible
     STATUS	current
     DESCRIPTION
 	"The locally arbitrary, but unique identifier associated
          with this language entry.

 	 The value is expected to remain constant at least from one
 	 re-initialization of the entity's network management system
 	 to the next re-initialization.

-	 Note, the data type and the range of this object must be
-         consistent with the definition of smScriptLanguage."
+	 Note that the data type and the range of this object must
+	 be consistent with the definition of smScriptLanguage."
     ::= { smLangEntry 1 }

 smLangLanguage OBJECT-TYPE
     SYNTAX	OBJECT IDENTIFIER
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
 	"The globally unique identification of the language."
     ::= { smLangEntry 2 }

@@ -708,21 +732,20 @@
     ::= { smExtsnEntry 5 }

 smExtsnDescr OBJECT-TYPE
     SYNTAX	SnmpAdminString
     MAX-ACCESS  read-only
     STATUS      current
     DESCRIPTION
 	"A textual description of the language extension."
     ::= { smExtsnEntry 6 }

-
 --
 -- Scripts known by the Script MIB implementation.
 --
 -- This group defines a table which lists all known scripts.
 -- Scripts can be added and removed through manipulation of the
 -- smScriptTable.
 --

 smScriptObjects	OBJECT IDENTIFIER ::= { smObjects 3 }

@@ -747,33 +770,35 @@

 SmScriptEntry ::= SEQUENCE {
     smScriptOwner	SnmpAdminString,
     smScriptName	SnmpAdminString,
     smScriptDescr	SnmpAdminString,
     smScriptLanguage	Integer32,
     smScriptSource	DisplayString,
     smScriptAdminStatus INTEGER,
     smScriptOperStatus	INTEGER,
     smScriptStorageType	StorageType,
-    smScriptRowStatus	RowStatus
+    smScriptRowStatus	RowStatus,
+    smScriptError	SnmpAdminString,
+    smScriptLastChange	DateAndTime
 }

 smScriptOwner OBJECT-TYPE
     SYNTAX	SnmpAdminString (SIZE (0..32))
     MAX-ACCESS	not-accessible
     STATUS	current
     DESCRIPTION
 	"The manager who owns this row in the smScriptTable."
     ::= { smScriptEntry 1 }

 smScriptName OBJECT-TYPE
-    SYNTAX	SnmpAdminString
+    SYNTAX	SnmpAdminString (SIZE (1..32))
     MAX-ACCESS  not-accessible
     STATUS	current
     DESCRIPTION
 	"The locally-unique, administratively assigned name for this
          script. This object allows an smScriptOwner to have multiple
 	 entries in the smScriptTable.

 	 This value of this object may be used to derive the name
 	 (e.g. a file name) which is used by the Script MIB
 	 implementation to access the script in non-volatile
@@ -795,22 +820,26 @@
     SYNTAX	Integer32 (0..2147483647)
     MAX-ACCESS	read-create
     STATUS	current
     DESCRIPTION
 	"The value of this object type identifies an entry in the
 	 smLangTable which is used to execute this script.
 	 The special value 0 may be used by hard-wired scripts
 	 that can not be modified and that are executed by
 	 internal functions.

-	 Note, the data type and the range of this object must be
-         consistent with the definition of smLangIndex."
+	 Set requests to change this object are invalid if the
+	 value of smScriptOperStatus is `enabled' or `compiling'
+	 and will result in an inconsistentValue error.
+
+	 Note that the data type and the range of this object must
+	 be consistent with the definition of smLangIndex."
     ::= { smScriptEntry 4 }

 smScriptSource OBJECT-TYPE
     SYNTAX	DisplayString
     MAX-ACCESS	read-create
     STATUS	current
     DESCRIPTION
 	"This object either contains a reference to the script
 	 source or an empty string. A reference must be given
 	 in the form of a Uniform Resource Locator (URL) as
@@ -821,21 +850,21 @@
 	 the Script MIB implementation will `pull' the script
 	 source from the URL contained in this object if the URL
 	 is not empty.

 	 An empty URL indicates that the script source is loaded
 	 from local storage. The script is read from the smCodeTable
 	 if the value of smScriptStorageType is volatile. Otherwise,
 	 the script is read from non-volatile storage.

 	 Note: This document does not mandate implementation of any
-	 specific URL scheme. A attempt to load a script from a
+	 specific URL scheme. An attempt to load a script from a
 	 nonsupported URL scheme will cause the smScriptOperStatus
 	 to report an `unknownProtocol' error.

 	 Set requests to change this object are invalid if the
 	 value of smScriptOperStatus is `enabled', `editing',
 	 `retrieving' or `compiling' and will result in an
 	 inconsistentValue error."
     DEFVAL { ''H }
     ::= { smScriptEntry 5 }

@@ -944,23 +973,29 @@
 smScriptStorageType OBJECT-TYPE
     SYNTAX	StorageType
     MAX-ACCESS	read-create
     STATUS	current
     DESCRIPTION
 	"This object defines whether this row and the script
 	 controlled by this row are kept in volatile storage and
 	 lost upon reboot or if this row is backed up by
 	 non-volatile or permanent storage.

-	 The script controlled by this row is written into local
-	 non-volatile storage if the following condition becomes
-	 true:
+	 The storage type of this row always complies with the value
+	 of this entry if the value of the corresponding RowStatus
+	 object is `active'.
+
+	 However, the storage type of the script controlled by this
+	 row may be different, if the value of this entry is
+	 `non-volatile'. The script controlled by this row is written
+	 into local non-volatile storage if the following condition
+	 becomes true:

 	 (a) the URL contained in the smScriptSource object is empty
 	     and
 	 (b) the smScriptStorageType is `nonVolatile'
 	     and
 	 (c) the smScriptOperStatus is `enabled'

 	 Setting this object to `volatile' removes a script from
 	 non-volatile storage if the script controlled by this row
 	 has been in non-volatile storage before. Attempts to set
@@ -980,43 +1015,68 @@
 smScriptRowStatus OBJECT-TYPE
     SYNTAX	RowStatus
     MAX-ACCESS	read-create
     STATUS	current
     DESCRIPTION
 	"A control that allows entries to be added and removed from
 	 this table.

 	 Changing the smScriptRowStatus from `active' to `notInService'
 	 will remove the associated script from the runtime system.
-	 The value of smScriptOperStatus will be reset to `disabled'.

-	 Deleting conceptual rows from this table includes the
-	 deletion of all resources associated with this row. This
-	 implies that a script stored in non-volatile storage is
+	 Deleting conceptual rows from this table may affect the
+	 deletion of other resources associated with this row. For
+	 example, a script stored in non-volatile storage may be
 	 removed from non-volatile storage.

          An entry may not exist in the `active' state unless all
          required objects in the entry have appropriate values. Rows
 	 that are not complete or not in service are not known by the
 	 script runtime system.

 	 Attempts to `destroy' a row or to set a row `notInService'
-	 while the script is executing will result in an
+	 while the smScriptOperStatus is `enabled' will result in an
          inconsistentValue error.

 	 Attempts to `destroy' a row or to set a row `notInService'
 	 where the value of the smScriptStorageType object is
 	 `permanent' or `readOnly' will result in an
-	 inconsistentValue error."
+	 inconsistentValue error.
+
+	 The value of this object has no effect on whether other
+	 objects in this conceptual row can be modified."
     ::= { smScriptEntry 9 }

+smScriptError OBJECT-TYPE
+    SYNTAX	SnmpAdminString
+    MAX-ACCESS	read-only
+    STATUS	current
+    DESCRIPTION
+	"This object contains a descriptive error message if the
+	 transition into the operational status `enabled' failed.
+	 Implementations must reset the error message to a
+	 zero-length string when a new attempt to change the
+	 script status to `enabled' is started."
+    DEFVAL { ''H }
+    ::= { smScriptEntry 10 }

+smScriptLastChange OBJECT-TYPE
+    SYNTAX	DateAndTime
+    MAX-ACCESS	read-only
+    STATUS	current
+    DESCRIPTION
+	"The date and time when this script table entry was last
+	 modified. The value '0000000000000000'H is returned if
+         the launch table entry has not yet been modified."
+    DEFVAL { '0000000000000000'H }
+    ::= { smScriptEntry 11 }
+
 --
 -- Access to script code via SNMP
 --
 -- The smCodeTable allows script code to be read and modified
 -- via SNMP.
 --

 smCodeTable OBJECT-TYPE
     SYNTAX	SEQUENCE OF SmCodeEntry
     MAX-ACCESS  not-accessible
@@ -1058,21 +1118,24 @@
 	 of this code fragment depends on the script language which
 	 is identified by the associated smScriptLanguage object."
     ::= { smCodeEntry 2 }

 smCodeRowStatus OBJECT-TYPE
     SYNTAX	RowStatus
     MAX-ACCESS	read-create
     STATUS	current
     DESCRIPTION
 	"A control that allows entries to be added and removed from
-	 this table."
+	 this table.
+
+	 The value of this object has no effect on whether other
+	 objects in this conceptual row can be modified."
     ::= { smCodeEntry 3 }

 --
 -- Script execution.
 --
 -- This group defines tables which allow script execution to be
 -- initiated, suspended, resumed, and terminated.  It also provides
 -- a mechanism for keeping a history of recent script executions
 -- and their results.
 --
@@ -1106,21 +1169,24 @@
     smLaunchMaxRunning		Unsigned32,
     smLaunchMaxCompleted	Unsigned32,
     smLaunchLifeTime		TimeInterval,
     smLaunchExpireTime		TimeInterval,
     smLaunchStart		Integer32,
     smLaunchControl		INTEGER,
     smLaunchAdminStatus		INTEGER,
     smLaunchOperStatus		INTEGER,
     smLaunchRunIndexNext	Integer32,
     smLaunchStorageType		StorageType,
-    smLaunchRowStatus		RowStatus
+    smLaunchRowStatus		RowStatus,
+    smLaunchError		SnmpAdminString,
+    smLaunchLastChange		DateAndTime,
+    smLaunchRowExpireTime	TimeInterval
 }

 smLaunchOwner OBJECT-TYPE
     SYNTAX	SnmpAdminString (SIZE (0..32))
     MAX-ACCESS  not-accessible
     STATUS      current
     DESCRIPTION
 	"The manager who owns this row in the smLaunchTable. Every
 	 instance of a running script started from a particular entry
 	 in the smLaunchTable (i.e. entries in the smRunTable) will be
@@ -1157,23 +1223,27 @@
 	 the value of smLaunchOperStatus is `enabled'."
     ::= { smLaunchEntry 3 }

 smLaunchScriptName OBJECT-TYPE
     SYNTAX	SnmpAdminString (SIZE (0..32))
     MAX-ACCESS	read-create
     STATUS	current
     DESCRIPTION
 	"The value of this object in combination with the value of
 	 the smLaunchScriptOwner identifies the script that can be
-	 launched from this smLaunchTable entry. Attempts to write
-         this objects will fail with an inconsistentValue error if
-         the value of smLaunchOperStatus is `enabled'."
+	 launched from this smLaunchTable entry. The zero-length
+	 string may be used to point to a non-existing script.
+
+	 Attempts to write this object will fail with an
+	 inconsistentValue error if the value of smLaunchOperStatus
+	 is `enabled'."
+    DEFVAL { ''H }
     ::= { smLaunchEntry 4 }

 smLaunchArgument OBJECT-TYPE
     SYNTAX	OCTET STRING
     MAX-ACCESS	read-create
     STATUS	current
     DESCRIPTION
 	"The argument supplied to the script. When a script is
 	 invoked, the value of this object is used to initialize
 	 the smRunArgument object."
@@ -1305,21 +1375,21 @@
 	 of smLaunchArgument will be copied into smRunArgument,
 	 the value of smLaunchLifeTime will be copied to
 	 smRunLifeTime, and the value of smLaunchExpireTime
 	 will be copied to smRunExpireTime.

 	 The smRunStartTime will be set to the current time and
 	 the smRunState will be set to `initializing' before the
 	 script execution is initiated in the appropriate runtime
 	 system.

-	 Note, the data type and the range of this object must
+	 Note that the data type and the range of this object must
 	 be consistent with the smRunIndex object. Since this
 	 object might be written from the scheduling MIB, the
 	 data type Integer32 rather than Unsigned32 is used."
     DEFVAL { 0 }
     ::= { smLaunchEntry 10 }

 smLaunchControl OBJECT-TYPE
     SYNTAX	INTEGER {
 		    abort(1),
 		    suspend(2),
@@ -1334,75 +1404,104 @@
 	 this row in the smLaunchTable.

 	 Setting this object to abort(1), suspend(2) or resume(3)
 	 will set the smRunControl object of all applicable rows
 	 in the smRunTable to abort(1), suspend(2) or resume(3)
 	 respectively. The phrase `applicable rows' means the set of
 	 rows which were created from this entry in the smLaunchTable
 	 and whose value of smRunState allows the corresponding
 	 state change as described in the definition of the
 	 smRunControl object. Setting this object to nop(4) has no
-	 effect."
+	 effect.
+
+	 Attempts to set this object lead to an inconsistentValue
+	 error only if all implicated sets on all the applicable
+	 rows lead to inconsistentValue errors. It is not allowed
+	 to return an inconsistentValue error if at least one state
+	 change on one of the applicable rows was successful."
     DEFVAL { nop }
     ::= { smLaunchEntry 11 }

 smLaunchAdminStatus OBJECT-TYPE
     SYNTAX	INTEGER {
 		    enabled(1),
-		    disabled(2)
+		    disabled(2),
+		    autostart(3)
 		}
     MAX-ACCESS	read-create
     STATUS	current
     DESCRIPTION
 	"The value of this object indicates the desired status of
-	 this launch table entry."
+	 this launch table entry. The values enabled(1) and
+	 autostart(3) both indicate that the launch table entry
+	 should transition into the operational enabled(1) state as
+	 soon as the associated script table entry is enabled(1).
+
+	 The value autostart(3) further indicates that the script
+	 is started automatically by conceptually writing the
+	 value 0 into the associated smLaunchStart object during
+	 the transition from the `disabled' into the `enabled'
+	 operational state. This is useful for scripts that are
+	 to be launched on system start-up."
     DEFVAL { disabled }
     ::= { smLaunchEntry 12 }

 smLaunchOperStatus OBJECT-TYPE
     SYNTAX	INTEGER {
 		    enabled(1),
-		    disabled(2)
+		    disabled(2),
+		    expired(3)
 		}
     MAX-ACCESS	read-only
     STATUS	current
     DESCRIPTION
 	"The value of this object indicates the actual status of
-	 this launch table entry. An `enabled' launch table
-	 entry can be used to start scripts while a `disabled'
-	 launch table entry will refuse any attempts to start
-	 scripts. The value `enabled' requires that the
-	 smLaunchRowStatus object is active. The value
-	 `disabled' requires that there are no entries in the
-	 smRunTable associated with this smLaunchTable entry."
+	 this launch table entry.  The smLaunchOperStatus object
+	 may have the following values:
+
+	 - `enabled' indicates that the launch table entry is
+	   available and can be used to start scripts.
+
+	 - `disabled' indicates that the launch table entry can
+	   not be used to start scripts.
+
+	 - `expired' indicates that the launch table entry can
+	   not be used to start scripts and will disappear as
+	   soon as all smRunTable entries associated with this
+	   launch table entry have disappeared.
+
+	 The value `enabled' requires that the smLaunchRowStatus
+	 object is active. The value `disabled' requires that there
+	 are no entries in the smRunTable associated with this
+	 smLaunchTable entry."
     DEFVAL { disabled }
     ::= { smLaunchEntry 13 }

 smLaunchRunIndexNext OBJECT-TYPE
     SYNTAX	Integer32 (1..2147483647)
     MAX-ACCESS	read-only
     STATUS	current
     DESCRIPTION
 	"This variable is used for creating rows in the smRunTable.
 	 The value of this variable is a currently unused value
 	 for smRunIndex, which can be written into the smLaunchStart
 	 object associated with this row to launch a script.

 	 The value returned when reading this variable must be unique
-	 for the smLaunchOwner and smLauchName associated with this
+	 for the smLaunchOwner and smLaunchName associated with this
 	 row. Subsequent attempts to read this variable must return
 	 different values.

 	 This variable will return the special value 0 if no new rows
 	 can be created.

-	 Note, the data type and the range of this object must be
+	 Note that the data type and the range of this object must be
 	 consistent with the definition of smRunIndex."
     ::= { smLaunchEntry 14 }

 smLaunchStorageType OBJECT-TYPE
     SYNTAX	StorageType
     MAX-ACCESS	read-create
     STATUS	current
     DESCRIPTION
 	"This object defines if this row is kept in volatile storage
 	 and lost upon reboot or if this row is backed up by stable
@@ -1420,29 +1519,86 @@

 smLaunchRowStatus OBJECT-TYPE
     SYNTAX	RowStatus
     MAX-ACCESS	read-create
     STATUS	current
     DESCRIPTION
 	"A control that allows entries to be added and removed from
 	 this table.

 	 Attempts to `destroy' a row or to set a row `notInService'
-	 while scripts started from this launch table entry are
-	 running will result in an inconsistentValue error.
+	 while the smLaunchOperStatus is `enabled' will result in
+	 an inconsistentValue error.

 	 Attempts to `destroy' a row or to set a row `notInService'
 	 where the value of the smLaunchStorageType object is
 	 `permanent' or `readOnly' will result in an
-	 inconsistentValue error."
+	 inconsistentValue error.
+
+	 The value of this object has no effect on whether other
+	 objects in this conceptual row can be modified."
     ::= { smLaunchEntry 16 }

+smLaunchError OBJECT-TYPE
+    SYNTAX	SnmpAdminString
+    MAX-ACCESS	read-only
+    STATUS	current
+    DESCRIPTION
+	"This object contains a descriptive error message if an
+	 attempt to launch a script fails. Implementations must reset
+	 the error message to a zero-length string when a new attempt
+	 to launch a script is started."
+    DEFVAL { ''H }
+    ::= { smLaunchEntry 17 }
+
+smLaunchLastChange OBJECT-TYPE
+    SYNTAX	DateAndTime
+    MAX-ACCESS	read-only
+    STATUS	current
+    DESCRIPTION
+	"The date and time when this launch table entry was last
+	 modified. The value '0000000000000000'H is returned if
+	 the launch table entry has not yet been modified. Note
+	 that a change of smLaunchRunIndexNext is not considered
+	 a change of this launch table entry."
+    DEFVAL { '0000000000000000'H }
+    ::= { smLaunchEntry 18 }
+
+smLaunchRowExpireTime OBJECT-TYPE
+    SYNTAX	TimeInterval
+    UNITS	"centi-seconds"
+    MAX-ACCESS	read-create
+    STATUS	current
+    DESCRIPTION
+        "The value of this object specifies how long this row remains
+         in the `enabled' operational state. The value reported by
+         this object ticks backwards. When the value reaches 0 it
+         stops ticking backward, and the row gets deleted if there are
+         no smRunTable entries associated with this smLaunchTable
+         entry. Otherwise, the smLaunchOperStatus changes to `expired'
+         and the row deletion is delayed.
+
+         The smLaunchRowExpireTime will not tick backwards if it is
+         set to its maximum value (2147483647). In other words,
+         setting this object to its maximum value turns the timer off.
+
+	 The value of this object may be set in order to increase
+	 or reduce the remaining time that the launch table entry
+	 may be used. Setting the value to 0 will cause an immediate
+	 row deletion or transition into the `expired' operational
+	 state, respectively.
+
+	 Note that the timer ticks backwards independent of the
+	 operational state of the launch table entry."
+    DEFVAL { 2147483647 }
+    ::= { smLaunchEntry 19 }
+

 smRunTable OBJECT-TYPE
     SYNTAX	SEQUENCE OF SmRunEntry
     MAX-ACCESS  not-accessible
     STATUS	current
     DESCRIPTION
 	"This table lists and describes scripts that are currently
 	 running or have been running in the past."
     ::= { smRunObjects 2 }

@@ -1460,35 +1616,37 @@
     smRunIndex		Integer32,
     smRunArgument	OCTET STRING,
     smRunStartTime	DateAndTime,
     smRunEndTime	DateAndTime,
     smRunLifeTime	TimeInterval,
     smRunExpireTime	TimeInterval,
     smRunExitCode	INTEGER,
     smRunResult		OCTET STRING,
     smRunControl	INTEGER,
     smRunState		INTEGER,
-    smRunError		SnmpAdminString
+    smRunError		SnmpAdminString,
+    smRunResultTime	DateAndTime,
+    smRunErrorTime	DateAndTime
 }

 smRunIndex OBJECT-TYPE
     SYNTAX	Integer32 (1..2147483647)
     MAX-ACCESS  not-accessible
     STATUS	current
     DESCRIPTION
 	"The locally arbitrary, but unique identifier associated
          with this running or finished script. This value must be
 	 unique for all rows in the smRunTable with the same
 	 smLaunchOwner and smLaunchName.

-	 Note, the data type and the range of this object must be
-	 consistent with the definition of smLaunchRunIndexNext
+	 Note that the data type and the range of this object must
+	 be consistent with the definition of smLaunchRunIndexNext
 	 and smLaunchStart."
     ::= { smRunEntry 1 }

 smRunArgument OBJECT-TYPE
     SYNTAX	OCTET STRING
     MAX-ACCESS	read-only
     STATUS	current
     DESCRIPTION
 	"The argument supplied to the script when it started."
     DEFVAL { ''H }
@@ -1527,40 +1685,47 @@
 	 may run. The object is initialized with the value of the
 	 associated smLaunchLifeTime object and ticks backwards.
 	 The script is aborted immediately when the value reaches 0.

 	 The value of this object may be set in order to increase or
 	 reduce the remaining time that the script may run. Setting
 	 this value to 0 will abort script execution immediately,
 	 and, if the value of smRunExpireTime is also 0, will remove
 	 this entry from the smRunTable once it has terminated.

+	 If smRunLifeTime is set to its maximum value (2147483647),
+	 either by a set operation or by its initialization from the
+	 smLaunchLifeTime object, then it will not tick backwards.
+	 A running script with a maximum smRunLifeTime value will
+	 thus never be terminated with a `lifeTimeExceeded' exit
+	 code.
+
 	 The value of smRunLifeTime reflects the real-time execution
 	 time as seen by the outside world. The value of this object
 	 will always be 0 for a script that finished execution, that
 	 is smRunState has the value `terminated'.

 	 The value of smRunLifeTime does not change while a script
 	 is suspended, that is smRunState has the value `suspended'.
-	 Note, this does not affect set operations. It is legal to
-	 modify smRunLifeTime via set operations while a script is
-	 suspended."
+	 Note that this does not affect set operations. It is legal
+	 to modify smRunLifeTime via set operations while a script
+	 is suspended."
     ::= { smRunEntry 5 }

 smRunExpireTime OBJECT-TYPE
     SYNTAX	TimeInterval
     UNITS	"centi-seconds"
     MAX-ACCESS	read-write
     STATUS	current
     DESCRIPTION
-	"This value specifies how long this row can exist in the
-	 smRunTable after the script has terminated.  This object
+	"The value of this object specifies how long this row can exist
+	 in the smRunTable after the script has terminated.  This object
 	 returns the remaining time that the row may exist before it
 	 is aged out. The object is initialized with the value of the
 	 associated smLaunchExpireTime object and ticks backwards. The
 	 entry in the smRunTable is destroyed when the value reaches 0
 	 and the smRunState has the value `terminated'.

 	 The value of this object may be set in order to increase or
 	 reduce the remaining time that the row may exist.  Setting
 	 the value to 0 will destroy this entry as soon as the
 	 smRunState has the value `terminated'."
@@ -1638,134 +1803,189 @@
     MAX-ACCESS	read-write
     STATUS	current
     DESCRIPTION
 	"The value of this object indicates the desired status of the
 	 script execution defined by this row.

 	 Setting this object to `abort' will abort execution if the
 	 value of smRunState is `initializing', `executing',
 	 `suspending', `suspended' or `resuming'. Setting this object
 	 to `abort' when the value of smRunState is `aborting' or
-	 `terminated' will result in an inconsistentValue error.
+	 `terminated', or if the implementation can determine that
+	 the attempt to abort the execution would fail, will result
+	 in an inconsistentValue error.

 	 Setting this object to `suspend' will suspend execution
 	 if the value of smRunState is `executing'. Setting this
 	 object to `suspend' will cause an inconsistentValue error
-	 if the value of smRunState is not `executing'.
+	 if the value of smRunState is not `executing' or if the
+	 implementation can determine that the attempt to suspend
+	 the execution would fail.

 	 Setting this object to `resume' will resume execution
 	 if the value of smRunState is `suspending' or
 	 `suspended'. Setting this object to `resume' will cause an
 	 inconsistentValue error if the value of smRunState is
-	 not `suspending' or `suspended'.
+	 not `suspended' or if the implementation can determine
+	 that the attempt to resume the execution would fail.

 	 Setting this object to nop(4) has no effect."
     DEFVAL { nop }
     ::= { smRunEntry 9 }

 smRunState OBJECT-TYPE
     SYNTAX	INTEGER {
 		    initializing(1),
 		    executing(2),
 		    suspending(3),
 		    suspended(4),
 		    resuming(5),
 		    aborting(6),
 		    terminated(7)
 		}
     MAX-ACCESS	read-only
     STATUS	current
     DESCRIPTION
 	"The value of this object indicates the script's execution
-	 status.  If the script has been invoked but has not yet
+	 state. If the script has been invoked but has not yet
 	 begun execution, the value will be `initializing'. If the
-	 script is running, the value will be `executing'. A script
-	 which received a request to suspend execution but which
-	 did not actually suspend execution will be `suspending'.
-	 A script which has suspended execution will be `suspended'.
-	 A script which received a request to resume execution but
-	 which is not yet running is `resuming'. The resuming state
-	 will finally lead to the `executing' state. A script which
-	 received a request to abort execution but which is still
-	 running is `aborting'. A script which stopped execution
-	 is `terminated'."
+	 script is running, the value will be `executing'.
+
+         A running script which received a request to suspend
+         execution first transitions into a temporary `suspending'
+         state.  The temporary `suspending' state changes to
+         `suspended' when the script has actually been suspended. The
+         temporary `suspending' state changes back to `executing' if
+         the attempt to suspend the running script fails.
+
+         A suspended script which received a request to resume
+         execution first transitions into a temporary `resuming'
+         state. The temporary `resuming' state changes to `running'
+         when the script has actually been resumed. The temporary
+         `resuming' state changes back to `suspended' if the attempt
+         to resume the suspended script fails.
+
+	 A script which received a request to abort execution but
+	 which is still running first transitions into a temporary
+	 `aborting' state.
+
+	 A script which has finished its execution is `terminated'."
     ::= { smRunEntry 10 }

 smRunError OBJECT-TYPE
     SYNTAX	SnmpAdminString
     MAX-ACCESS	read-only
     STATUS	current
     DESCRIPTION
-	"This  contains a descriptive error message if the script
-	 terminates in an abnormally. An implementation must store a
-	 descriptive error message in this object if the script exits
-	 with the smRunExitCode `genericError'.
-
-	 The value of this object is the zero-length string as long
-	 as the smRunExitCode has the value `noError'"
+	"This object contains a descriptive error message if the
+	 script startup or execution raised an abnormal condition.
+	 An implementation must store a descriptive error message
+	 in this object if the script exits with the smRunExitCode
+	 `genericError'."
     DEFVAL { ''H }
     ::= { smRunEntry 11 }

+smRunResultTime OBJECT-TYPE
+    SYNTAX	DateAndTime
+    MAX-ACCESS	read-only
+    STATUS	current
+    DESCRIPTION
+	"The date and time when the smRunResult was last updated.
+	 The value '0000000000000000'H is returned if smRunResult
+	 has not yet been updated after the creation of this
+	 smRunTable entry."
+    DEFVAL { '0000000000000000'H }
+    ::= { smRunEntry 12 }
+
+smRunErrorTime OBJECT-TYPE
+    SYNTAX	DateAndTime
+    MAX-ACCESS	read-only
+    STATUS	current
+    DESCRIPTION
+	"The date and time when the smRunError was last updated.
+	 The value '0000000000000000'H is returned if smRunError
+	 has not yet been updated after the creation of this
+	 smRunTable entry."
+    DEFVAL { '0000000000000000'H }
+    ::= { smRunEntry 13 }
+
 --
 -- Notifications. The definition of smTraps makes notification
 -- registrations reversible (see STD 58, RFC 2578).
 --

 smTraps OBJECT IDENTIFIER ::= { smNotifications 0 }

 smScriptAbort NOTIFICATION-TYPE
     OBJECTS	{ smRunExitCode, smRunEndTime, smRunError }
     STATUS      current
     DESCRIPTION
 	"This notification is generated whenever a running script
 	 terminates with an smRunExitCode unequal to `noError'."
     ::= { smTraps 1 }

 smScriptResult NOTIFICATION-TYPE
     OBJECTS	{ smRunResult }
     STATUS	current
     DESCRIPTION
 	"This notification can be used by scripts to notify other
-	 management applications about script results. It can be
-	 used to notify managers about a script result.
+	 management applications about results produced by the
+	 script.

 	 This notification is not automatically generated by the
-	 script MIB implementation. It is the responsibility of
+	 Script MIB implementation. It is the responsibility of
 	 the executing script to emit this notification where it
 	 is appropriate to do so."
     ::= { smTraps 2 }

+smScriptException NOTIFICATION-TYPE
+    OBJECTS	{ smRunError }
+    STATUS	current
+    DESCRIPTION
+	"This notification can be used by scripts to notify other
+         management applications about script errors.
+
+	 This notification is not automatically generated by the
+	 Script MIB implementation. It is the responsibility of
+	 the executing script or the runtime system to emit this
+	 notification where it is appropriate to do so."
+    ::= { smTraps 3 }
+
 -- conformance information

 smCompliances OBJECT IDENTIFIER ::= { smConformance 1 }
 smGroups      OBJECT IDENTIFIER ::= { smConformance 2 }

 -- compliance statements

 smCompliance MODULE-COMPLIANCE
     STATUS	current
     DESCRIPTION
 	"The compliance statement for SNMP entities which implement
-	 the script MIB."
+	 the Script MIB."
     MODULE	-- this module
     MANDATORY-GROUPS {
 	    smLanguageGroup, smScriptGroup, smLaunchGroup, smRunGroup
     }
     GROUP   smCodeGroup
     DESCRIPTION
 	"The smCodeGroup is mandatory only for those implementations
 	 that support the downloading of scripts via SNMP."
     OBJECT  smScriptSource
     MIN-ACCESS	read-only
     DESCRIPTION
 	"The smScriptSource object is read-only for implementations
 	 that are not able to download script code from a URL."
+    OBJECT smCodeText
+    DESCRIPTION
+	"A compliant implementation need only support write access to
+	 the smCodeText object only during row creation."
     OBJECT smLaunchArgument
     DESCRIPTION
 	"A compliant implementation has to support a minimum size
 	 for smLaunchArgument of 255 octets."
     OBJECT smRunArgument
     DESCRIPTION
 	"A compliant implementation has to support a minimum size
 	 for smRunArgument of 255 octets."
     OBJECT smRunResult
     DESCRIPTION
@@ -1801,21 +2021,23 @@
     ::= { smGroups 1 }

 smScriptGroup OBJECT-GROUP
     OBJECTS {
 	smScriptDescr,
 	smScriptLanguage,
 	smScriptSource,
 	smScriptAdminStatus,
 	smScriptOperStatus,
 	smScriptStorageType,
-	smScriptRowStatus
+	smScriptRowStatus,
+	smScriptError,
+	smScriptLastChange
     }
     STATUS	current
     DESCRIPTION
 	"A collection of objects providing information about
 	 installed scripts."
     ::= { smGroups 2 }

 smCodeGroup OBJECT-GROUP
     OBJECTS {
 	smCodeText,
@@ -1835,74 +2057,80 @@
 	smLaunchMaxRunning,
 	smLaunchMaxCompleted,
 	smLaunchLifeTime,
 	smLaunchExpireTime,
 	smLaunchStart,
 	smLaunchControl,
 	smLaunchAdminStatus,
 	smLaunchOperStatus,
 	smLaunchRunIndexNext,
 	smLaunchStorageType,
-	smLaunchRowStatus
+	smLaunchRowStatus,
+	smLaunchError,
+	smLaunchLastChange,
+        smLaunchRowExpireTime
     }
     STATUS	current
     DESCRIPTION
 	"A collection of objects providing information about scripts
 	 that can be launched."
     ::= { smGroups 4 }

 smRunGroup OBJECT-GROUP
     OBJECTS {
 	smRunArgument,
 	smRunStartTime,
 	smRunEndTime,
 	smRunLifeTime,
 	smRunExpireTime,
 	smRunExitCode,
 	smRunResult,
 	smRunState,
 	smRunControl,
-	smRunError
+	smRunError,
+	smRunResultTime,
+	smRunErrorTime
     }
     STATUS	current
     DESCRIPTION
 	"A collection of objects providing information about running
 	 scripts."
     ::= { smGroups 5 }

 smNotificationsGroup NOTIFICATION-GROUP
     NOTIFICATIONS {
 	smScriptAbort,
-	smScriptResult
+	smScriptResult,
+	smScriptException
     }
     STATUS	current
     DESCRIPTION
-	"The notifications emitted by the script MIB."
+	"The notifications emitted by the Script MIB."
     ::= { smGroups 6 }

 END
 .fi

 .bp
 .sh 1 "Usage Examples"
 .PP
 This section presents some examples that explain how a manager can use
 the Script MIB defined in this memo. The purpose of these examples is
 to explain the steps that are normally used to delegate management
 scripts.

-.sh 2 "Pushing a script via SNMP"
+.sh 2 "Pushing a Script via SNMP"
 .PP
 This example explains the steps performed by a manager to
 push a script into a distributed manager.
 .ip "   1." 8
-The manager first checks the smLanguageTable and the smExtensionTable
+The manager first checks the smLangTable and the smExtsnTable
 in order to select the appropriate script or language.
 .ip "   2." 8
 The manager creates a row in the smScriptTable by issuing an SNMP
 set-request. The smScriptRowStatus object is set to `createAndWait'
 and the smScriptSource object is set to an empty string. The
 smScriptLanguage object is set to the language in which the script was
 written. The smScriptStorageType object is set to `volatile' to
 indicate that the script will be loaded via the smCodeTable.  The
 smScriptOwner is set to a string which identifies the principal who
 owns the new row. The smScriptName defines the administratively
@@ -1921,26 +2149,26 @@
 the language requires a compilation step.
 .ip "   6." 8
 The manager polls the smScriptOperStatus object until the value is
 either `enabled' or one of the error status codes.  The script can
 only be used if the value of smScriptOperStatus is `enabled'.
 .ip "   7." 8
 If the manager wants to store the script in local non-volatile
 storage, it should send a set-request which changes the
 smScriptStorageType object to `nonVolatile'.

-.sh 2 "Pulling a script from a URL"
+.sh 2 "Pulling a Script from a URL"
 .PP
 This example explains the steps performed by a manager to cause
 a distributed manager to pull a script from a URL.
 .ip "   1." 8
-The manager first checks the smLanguageTable and the smExtensionTable
+The manager first checks the smLangTable and the smExtsnTable
 in order to select the appropriate script or language.
 .ip "   2." 8
 The manager creates a row in the smScriptTable by issuing an SNMP
 set-request. The smScriptRowStatus object is set to `createAndWait'
 and the smScriptSource object is set to the URL which points to the
 script source. The smScriptLanguage object is set to the language in
 which the script was written. The smScriptOwner is set to a string
 which identifies the principal who owns the new row. The smScriptName
 defines the administratively assigned unique name for the script.
 .ip "   3." 8
@@ -1954,21 +2182,21 @@
 requires a compilation step.
 .ip "   5." 8
 The manager polls the smScriptOperStatus object until the value is
 either `enabled' or one of the error status codes.  The script can
 only be used if the value of smScriptOperStatus is `enabled'.
 .ip "   6." 8
 If the manager wants to store the script in local non-volatile
 storage, it should send a set-request which changes the
 smScriptStorageType object to `nonVolatile'.

-.sh 2 "Modifying an existing script"
+.sh 2 "Modifying an Existing Script"
 .PP
 This section explains how a manager can modify a script by sending
 SNMP set-requests.
 .ip "   1." 8
 First, the script is de-activated by setting the smScriptAdminStatus
 to `disabled'.
 .ip "   2." 8
 The manager polls the smScriptOperStatus object until the value is
 `disabled'.
 .ip "   3." 8
@@ -1984,132 +2212,193 @@
 .ip "   6." 8
 The manager sends a set-request to set the smScriptAdminStatus object
 to `enabled'. The Script MIB implementation now makes the script
 accessible to the runtime system. This might include the compilation
 of the script if the language requires a compilation step.
 .ip "   7." 8
 The manager polls the smScriptOperStatus object until the value is
 either `enabled' or one of the error status codes.  The script can
 only be used if the value of smScriptOperStatus is `enabled'.

-.sh 2 "Removing an existing script"
+.sh 2 "Removing an Existing Script"
 .PP
 This section explains how a manager can remove a script from a
 distributed manager.
 .ip "   1." 8
 First, the manager sets the smScriptAdminStatus to `disabled'. This
 will ensure that no new scripts can be started while running scripts
 finish their execution.
 .ip "   2." 8
 The manager polls the smScriptOperStatus object until the value is
 `disabled'.
 .ip "   3." 8
 The manager sends an SNMP set-request to change the smScriptRowStatus
 object to `destroy'. This will remove the row and all associated
 resources from the Script MIB implementation.

-.sh 2 "Creating a launch button"
+.sh 2 "Creating a Launch Button"
 .PP
 This section explains how a manager can create a launch button
 for starting a script.
 .ip "   1." 8
 The manager, who is identified by an smLaunchOwner value, first
 chooses a name for the new row in the smLaunchTable. The manager
 sends an SNMP set-request to set the smLaunchRowStatus object
 for this smLaunchOwner and smLaunchName to `createAndWait'.
 .ip "   2." 8
 The manager fills the new smLaunchTable row with all required
 parameters. The smLaunchScriptOwner and smLaunchScriptName values
 point to the script that should be started from this launch button.
 .ip "   3." 8
+The manager sets the smLaunchRowStatus object to `active'.
+.ip "   4." 8
 The manager sends a set-request to change smLaunchAdminStatus to
 `enabled' once the new smLaunchTable row is complete.
-.ip "   4." 8
+.ip "   5." 8
 The manager polls the smLaunchOperStatus object until the value is
 `enabled'.

-.sh 2 "Launching a script"
+.sh 2 "Launching a Script"
 .PP
 This section explains the suggested way to launch a script from a
 given launch button.
 .ip "   1." 8
 The manager first retrieves the value of smLaunchRunIndexNext from the
 launch button selected to start the script.
 .ip "   2." 8
 The manager sends an SNMP set-request to set the smLaunchStart object
 to the value obtained in step 1. This will launch the script if all
 necessary pre-conditions are satisfied (see the definition of
 smLaunchStart for more details). The manager can also provide the
 smLaunchArgument in the same set-request that is used to start the
 script. Upon successful start, a new row will be created in the
 smRunTable indexed by smLaunchOwner, smLaunchName and the value
 written to smLaunchStart.
+.ip "   3." 8
+The manager polls the smRunState object until the value is either
+`executing' (the default case), `suspended' or `terminated'.
+.PP
+The first step is not required. A manager can also try to guess an
+unused value for smRunIndex if the manager wants to start the script
+in a single transaction. A manager can also use the special value 0
+if it does not care about the smRunIndex.
+
+.sh 2 "Suspending a Running Script"
 .PP
-Note, the first step is not required. A manager can also try to guess
-an unused value for smRunIndex if he wants to start script in a single
-transaction. A manager can also use the special value 0 if he does not
-care about the results produced by the script.
+This section explains how a manager can suspend a running script.
+.ip "   1." 8
+The manager sets the smRunControl object of the running script or the
+smLaunchControl object of the launch button used to start the running
+script to `suspend'. Setting smLaunchControl will suspend all running
+scripts started from the launch button while smRunControl will only
+suspend the running script associated with the smRunControl instance.
+.ip "   2." 8
+The manager polls the smRunState object until the value is either
+`suspended', `executing', or `terminated'. If the value is `suspended',
+then the suspend operation was successful. If the value is `executing',
+then the attempt to suspend the script failed. The value `terminated'
+can be received in cases where the suspend operation failed and the
+running script terminated between the polls.
+.PP
+Note that the set operation in the first step can lead to an
+inconsistentValue error which indicates that the suspend operation
+failed (e.g. because the runtime system does not support
+suspend/resume).  There is no need to poll smRunState in this case.
+
+.sh 2 "Resuming a Suspended Script"
+.PP
+This section explains how a manager can resume a suspended script.
+.ip "   1." 8
+The manager sets the smRunControl object of the running script or the
+smLaunchControl object of the launch button used to start the running
+script to `resume'. Setting smLaunchControl will resume all running
+scripts started from the launch button while smRunControl will only
+resume the running script associated with the smRunControl instance.
+.ip "   2." 8
+The manager polls the smRunState object until the value is either
+`suspended', `executing', or `terminated'. If the value is
+`executing', then the resume operation was successful. If the value is
+`suspended', then the attempt to resume the script failed. The value
+`terminated' can be received in cases where the resume operation was
+successful and the running script terminated between the polls.
+.PP
+Note that the set operation in the first step can lead to an
+inconsistentValue error which indicates that the resume operation
+failed (e.g. because the runtime system does not support
+suspend/resume).  There is no need to poll smRunState in this case.

-.sh 2 "Terminating a script"
+.sh 2 "Terminating a Running Script"
 .PP
 This section explains two ways to terminate a running script. The
 first approach is as follows:
 .ip "   1." 8
 The manager sets the smRunControl object of the running script or the
 smLaunchControl object of the launch button used to start the running
 script to `abort'. Setting smLaunchControl will abort all running
 scripts started from the launch button while smRunControl will only
 abort the running script associated with the smRunControl instance.
+.ip "   2." 8
+The manager polls the smRunState object until the value is `terminated'.
 .PP
 The second way to terminate a script is to set the smRunLifeTime to
 zero which causes the runtime system to terminate the script with a
 `lifeTimeExceeded' exit code:
 .ip "   1." 8
 The manager changes the value of smRunLifeTime to 0. This causes the
 Script MIB implementation to abort the script because the remaining
 life time has expired.
+.ip "   2." 8
+The manager polls the smRunState object until the value is `terminated'.
 .PP
-Note, changing the smRunLifeTime value can also be used to increase
-the permitted lifetime of a running script. For example, a manager can
-choose to set smRunLifeTime to a small fixed time interval and
-increase the value periodically. This strategy has the nice effect
-that scripts terminate automatically if the manager loses contact
-with the Script MIB engine.
+Note that changing the smRunLifeTime value can also be used to
+increase the permitted lifetime of a running script. For example, a
+manager can choose to set smRunLifeTime to a small fixed time interval
+and increase the value periodically. This strategy has the nice effect
+that scripts terminate automatically if the manager loses contact with
+the Script MIB engine.
+
+.sh 2 "Removing a Terminated Script"
+.PP
+This section explains how a manager can remove a terminated script.
+.ip "   1." 8
+The manager changes the smRunExpireTime to 0. This causes the Script
+MIB implementation to destroy the smRunTable entry of the terminated
+script.

-.sh 2 "Removing a launch button"
+.sh 2 "Removing a Launch Button"
 .PP
 This section explains how a manager can remove a launch button from a
 distributed manager.
 .ip "   1." 8
 First, the manager sets the smLaunchAdminStatus to `disabled'. This
 will ensure that no new scripts can be started from this launch button
-while running script will finish their execution.
+while running scripts finish their execution.
 .ip "   2." 8
 The manager polls the smLaunchOperStatus object until the value is
 `disabled'.
 .ip "   3." 8
 The manager sends an SNMP set-request to change the smLaunchRowStatus
 object to `destroy'. This will remove the row and all associated
 resources from the Script MIB implementation.

 .bp
 .sh 1 "VACM Configuration Examples"
 .PP

 This section shows how the view-based access control model defined in
-RFC 2275 [15] can be configured to control access to the script MIB.
+RFC 2575 [RFC2575] can be configured to control access to the Script MIB.

-.sh 2 "Sandbox for guests"
+.sh 2 "Sandbox for Guests"
 .PP

 The first example demonstrates how to configure VACM to give the
-members of the VACM group "guest" limited access to the script MIB.
+members of the VACM group "guest" limited access to the Script MIB.
 The MIB views defined below give the members of the "guest" group a
 sandbox where they can install and start their own scripts, but not
 access any other scripts maintained by the Script MIB implementation.

   vacmAccessReadView."guest"."".usm.authNoPriv = "guestReadView"
   vacmAccessWriteView."guest"."".usm.authNoPriv = "guestWriteView"

 The guestReadView grants read access to the smLangTable, the
 smExtsnTable and to all the table entries owned by "guest":

@@ -2119,21 +2408,21 @@
       smScriptObjects.*.*.*."guest"	(included)
       smRunObjects.*.*.*."guest"	(included)

 The guestWriteView grants write access to all the table entries owned
 by "guest":

   guestWriteView:
       smScriptObjects.*.*.*."guest"	(included)
       smRunObjects.*.*.*."guest"	(included)

-.sh 2 "Sharing scripts"
+.sh 2 "Sharing Scripts"
 .PP

 This example demonstrates how VACM can be used to share a repository
 of scripts between the members of the "senior" and the members of the
 "junior" VACM group:

   vacmAccessReadView."junior"."".usm.authNoPriv = "juniorReadView"
   vacmAccessWriteView."junior"."".usm.authNoPriv = "juniorWriteView"

   juniorReadView:
@@ -2146,21 +2435,21 @@
   juniorWriteView:
       smScriptObjects.*.*.*."junior"	(included)
       smRunObjects.*.*.*."junior"	(included)

 The definitions above allow the members of the "junior" VACM group to
 start the scripts owned by "utils" in addition to the script the
 members of the "junior" VACM group installed themself.  This is
 accomplished by giving the members of "junior" read access to scripts
 in "utils".  This allows members of "junior" to create entries in the
-smLauchTable which refer to scripts in "utils", and to launch those
+smLaunchTable which refer to scripts in "utils", and to launch those
 scripts using these entries in the smLaunchTable.

   vacmAccessReadView."senior"."".usm.authNoPriv = "seniorReadView"
   vacmAccessWriteView."senior"."".usm.authNoPriv = "seniorWriteView"

   seniorReadView:
       smLangTable			(included)
       smExtsnTable			(included)
       smScriptObjects.*.*.*."senior"	(included)
       smRunObjects.*.*.*."senior"	(included)
@@ -2172,21 +2461,21 @@
       smScriptObjects.*.*.*."utils"	(included)

 The definitions for the members of the "senior" VACM group allow to
 start the scripts owned by "utils" in addition to the script the
 members of the "senior" VACM group installed themself. The third write
 access rule in the seniorWriteView also grants the permission to
 install scripts owned by "utils". The members of the "senior" VACM
 group therefore have the permissions to install and modify scripts
 that can be called by the members of the "junior" VACM group.

-.sh 2 "Emergency scripts"
+.sh 2 "Emergency Scripts"
 .PP

 This example demonstrates how VACM can be used to allow the members of
 the "junior" VACM group to launch scripts that are executed with the
 permissions associated with the "emergency" owner. This works by adding
 the following rules to the juniorReadView and the juniorWriteView:

   juniorReadView:
       smScriptObjects.*.*.*."emergency"	(included)
       smRunObjects.*.*.*."emergency"	(included)
@@ -2222,34 +2511,57 @@
 interoperability problems by providing a single list of well-known
 languages. However, it is of course still possible to register
 languages in private OID spaces. Registering languages in private
 spaces is especially attractive if a language is used for
 experimentation or if a language is only used in environments where
 the distribution of MIB modules with the language registration does not
 cause any maintenance problems.
 .PP
 Any additions or changes to the list of languages registered via IANA
 require Designated Expert Review as defined in the IANA guidelines
-[20]. The Designated Expert will be selected by the IESG Area Director
-for the IETF Operations and Management Area.
+[RFC2434]. The Designated Expert will be selected by the IESG Area
+Director for the IETF Operations and Management Area.

 .sh 1 "Security Considerations"
 .PP
+There are a number of management objects defined in this MIB that
+have a MAX-ACCESS clause of read-write and/or read-create. Such
+objects may be considered sensitive or vulnerable in some network
+environments. The support for SET operations in a non-secure
+environment without proper protection can have a negative effect on
+network operations.
+.PP
+SNMPv1 by itself is not a secure environment. Even if the network
+itself is secure (for example by using IPSec), even then, there is no
+control as to who on the secure network is allowed to access and
+GET/SET (read/change/create/delete) the objects in this MIB.
+.PP
+It is recommended that the implementers consider the security features
+as provided by the SNMPv3 framework.  Specifically, the use of the
+User-based Security Model RFC 2574 [RFC2574] and the View-based Access
+Control Model RFC 2575 [RFC2575] is recommended.
+.PP
+It is then a customer/user responsibility to ensure that the SNMP
+entity giving access to an instance of this MIB, is properly
+configured to give access to the objects only to those principals
+(users) that have legitimate rights to indeed GET or SET
+(change/create/delete) them.
+.PP
 This MIB provides the ability to distribute applications written in
 an arbitrary language to remote systems in a network.  The security
 features of the languages available in a particular implementation
 should be taken into consideration when deploying an implementation
 of this MIB.
 .PP
 To facilitate the provisioning of access control by a security
 administrator using the View-Based Access Control Model (VACM) defined
-in RFC 2275 [15] for tables in which multiple users may need to
+in RFC 2575 [RFC2575] for tables in which multiple users may need to
 independently create or modify entries, the initial index is used as
 an "owner index". Such an initial index has a syntax of
 SnmpAdminString, and can thus be trivially mapped to a securityName or
 groupName as defined in VACM, in accordance with a security policy.
 .PP
 All entries in related tables belonging to a particular user will
 have the same value for this initial index.  For a given user's
 entries in a particular table, the object identifiers for the
 information in these entries will have the same subidentifiers
 (except for the "column" subidentifier) up to the end of the
@@ -2264,192 +2576,133 @@
 access control issues that are outside of the scope of this MIB. For
 example, access control on URLs, especially those that use the file
 scheme, must be realized by the underlying operating system. A mapping
 of the owner index value to a local operating system security user
 identity should be used by an implementation of this MIB to control
 access to operating system resources when resolving URLs or executing
 scripts.

 .so ipr.me

+.sh 1 "Changes from RFC 2592"
+.PP
+The following list documents major changes from the previous version
+of this document, published as RFC 2592:
+.ip "   -" 6
+Updated the boilerplate and the references.
+.ip "   -" 6
+Added revision clauses to the module identity macro.
+.ip "   -" 6
+Various typos have been fixed.
+.ip "   -" 6
+Added SIZE restriction to smScriptName which is consistent with
+smLaunchScriptName. Added DEFVAL and some clarifying text on the
+usage of a zero-length string to smLaunchScriptName.
+.ip "   -" 6
+Clarified under which conditions changes to smScriptLanguage are
+invalid.
+.ip "   -" 6
+Added new smScriptError and smLaunchError objects.
+.ip "   -" 6
+Setting smRunLifeTime to its maximum value now disables the timer so
+that scripts can run forever.
+.ip "   -" 6
+Added the `autostart' value to the smLaunchAdminStatus object which
+allows to launch scripts during the disable->enabled transition of
+smLaunchOperStatus.
+.ip "   -" 6
+Added an additional step to the "creating a launch button" procedure
+which sets the smLaunchRowStatus to active.
+.ip "   -" 6
+Added a final polling step in the procedure to launch a script.
+.ip "   -" 6
+Added a final polling step in the procedure to terminate a running
+script.
+.ip "   -" 6
+Removed the requirement that smRunError is a zero-length string while
+the smRunExitCode has the value `noError'.
+.ip "   -" 6
+Added new smScriptLastChange, smLaunchLastChange, smRunResultTime, and
+smRunErrorTime objects.
+.ip "   -" 6
+Added some additional boilerplate text to the security considerations
+section.
+.ip "   -" 6
+Added a new smLaunchRowExpireTime object and a new `expired' state to
+the smLaunchOperStatus object.
+.ip "   -" 6
+Clarified that the smRunState object reports the actual state if
+attempts to suspend or resume scripts fail.
+.ip "   -" 6
+Clarified the conditions under which set operations to smLaunchControl
+and smRunControl can lead to inconsistentValue errors.
+.ip "   -" 6
+Added procedures for suspending/resuming/removing running scripts to
+section 7.
+.ip "   -" 6
+Added text to the smScriptStorageType description to better highlight
+the difference between the storage type of the script row entry and
+the script itself.
+.ip "   -" 6
+Updated the smCompliances statement to not require write access to the
+smCodeText object after row creation.
+
 .sh 1 "Acknowledgments"
 .PP
 This document was produced by the IETF Distributed Management
 (DISMAN) working group.

 .so refs.me
-.ip [17]
+.ip "   [RFC2028]" 14
+Hovey, R., and S. Bradner, \*(lqThe Organizations Involved in the IETF
+Standards Process\*(rq, BCP 11, RFC 2028, October 1996
+.ip "   [RFC2396]" 14
 Berners-Lee, T., Fielding, R., and L. Masinter, \*(lq Uniform Resource
-Identifiers (URI): Generic Syntax\*(rq, RFC 2396, MIT/LC, U.C. Irvine,
-Xerox Corporation, August 1998.
-.ip [18]
+Identifiers (URI): Generic Syntax\*(rq, RFC 2396, MIT/LC, U.C. Irvine,
+Xerox Corporation, August 1998
+.ip "   [RFC959]" 14
 Postel, J., and J. Reynolds, \*(lqFile Transfer Protocol\*(rq, STD 9,
-RFC 959, ISI, October 1985.
-.ip [19]
-Fielding, R., Gettys, J., Mogul, J., Frystyk, H., and T. Berners-Lee,
-\*(lqHypertext Transfer Protocol -- HTTP/1.1\*(rq, RFC 2068,
-UC Irvine, DEC, MIT/LCS, January 1997.
-.ip [20]
+RFC 959, ISI, October 1985
+.ip "   [RFC2616]" 14
+Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L.,
+Leach, P., and T. Berners-Lee,
+\*(lqHypertext Transfer Protocol -- HTTP/1.1\*(rq, RFC 2616,
+UC Irvine, Compaq, W3C, MIT, Xerox, Microsoft, June 1999
+.ip "   [RFC2434]" 14
 Narten, T., and H. Alvestrand, \*(lqGuidelines for Writing an IANA
 Considerations Section in RFCs\*(rq, BCP 26, RFC 2434, IBM, Maxware,
-October 1998.
-.ip [21]
+October 1998
+.ip "   [RFC2119]" 14
 Bradner, S., \*(lqKey words for use in RFCs to Indicate Requirement
-Levels\*(rq, BCP 14, RFC 2119, Harvard University, March 1997.
+Levels\*(rq, BCP 14, RFC 2119, Harvard University, March 1997

+.bp
 .sh 1 "Editors' Addresses"
 .sp
-.in +.5i
+.in +.3i
 .nf
 David B. Levi
 Nortel Networks
 4401 Great America Parkway
 Santa Clara, CA 95052-8185
 U.S.A.

 Phone: +1 423 686 0432
 EMail: [email-masked]

 Juergen Schoenwaelder
 TU Braunschweig
 Bueltenweg 74/75
 38106 Braunschweig
 Germany

-Phone: +49 531 391-3683
+Phone: +49 531 391-3283
 EMail: [email-masked]

 .so copyright.me
-
-.bp
-.sh 1 "IANA Language Registration MIB"
-
-This appendix defines the initial content of the IANA-LANGUAGE-MIB.
-This section should be removed from this document prior to its
-approval, at which time this MIB will be administered by IANA.
-
-.sp
-.in +.3i
-.nf
-IANA-LANGUAGE-MIB DEFINITIONS ::= BEGIN
-
-IMPORTS
-    MODULE-IDENTITY, OBJECT-IDENTITY, experimental
-	FROM SNMPv2-SMI;
-
-ianaLanguages MODULE-IDENTITY
-    LAST-UPDATED "9902221800Z"
-    ORGANIZATION "IANA"
-    CONTACT-INFO
-	"Internet Assigned Numbers Authority (IANA)
-
-         Postal: USC/Information Sciences Institute
-                 4676 Admiralty Way, Marina del Rey, CA 90292
-
-         Tel:    +1 310 822 1511
-         E-Mail: [email-masked]"
-    DESCRIPTION
-	"The MIB module registers object identifier values for
-	 well-known programming and scripting languages. Every
-	 language registration MUST describe the format used
-	 when transferring scripts written in this language.
-
-	 Any additions or changes to the contents of this MIB
-	 module require Designated Expert Review as defined in
-	 the Guidelines for Writing IANA Considerations Section
-         document. The Designated Expert will be selected by
-	 the IESG Area Director of the OPS Area.
-
-	 Note, this module does not have to register all possible
-	 languages since languages are identified by object identifier
-	 values. It is therefore possible to registered languages in
-	 private OID trees.
-
-	 The references given below are not normative with regard to
-	 the language version. Other references might be better suited
-	 to describe some newer versions of this language. The
-	 references are only provided as `a pointer into the right
-	 direction'."
-    -- XXX Replace with real registration number from IANA. Note, the
-    -- XXX IMPORTS must be updated when the real number is assigned.
-    ::= { experimental 9876 }
-
-ianaLangJavaByteCode OBJECT-IDENTITY
-    STATUS  current
-    DESCRIPTION
-	"Java byte code to be processed by a Java virtual machine.
-	 A script written in Java byte code is transferred by using
-	 the Java archive file format (JAR)."
-    REFERENCE
-	"The Java Virtual Machine Specification.
-	 ISBN 0-201-63452-X"
-    ::= { ianaLanguages 1 }
-
-ianaLangTcl OBJECT-IDENTITY
-    STATUS  current
-    DESCRIPTION
-	"The Tool Command Language (Tcl). A script written in the
-	 Tcl language is transferred in Tcl source code format."
-    REFERENCE
-	"Tcl and the Tk Toolkit.
-	 ISBN 0-201-63337-X"
-    ::= { ianaLanguages 2 }
-
-ianaLangPerl OBJECT-IDENTITY
-    STATUS  current
-    DESCRIPTION
-	"The Perl language. A script written in the Perl language
-	 is transferred in Perl source code format."
-    REFERENCE
-	"Programming Perl.
-	 ISBN 1-56592-149-6"
-    ::= { ianaLanguages 3 }
-
-ianaLangScheme OBJECT-IDENTITY
-    STATUS  current
-    DESCRIPTION
-	"The Scheme language. A script written in the Scheme
-	 language is transferred in Scheme source code format."
-    REFERENCE
-	"The Revised^4 Report on the Algorithmic Language Scheme.
-	 MIT Press"
-    ::= { ianaLanguages 4 }
-
-ianaLangSRSL OBJECT-IDENTITY
-    STATUS  current
-    DESCRIPTION
-	"The SNMP Script Language defined by SNMP Research. A
-	 script written in the SNMP Script Language is transferred
-	 in the SNMP Script Language source code format."
-    ::= { ianaLanguages 5 }
-
-ianaLangPSL OBJECT-IDENTITY
-    STATUS  current
-    DESCRIPTION
-	"The Patrol Script Language defined by BMC Software. A script
-	 written in the Patrol Script Language is transferred in the
-	 Patrol Script Language source code format."
-    REFERENCE
-	"PATROL Script Language Reference Manual, Version 3.0,
-	 November 30, 1995. BMC Software, Inc. 2101 City West Blvd.,
-	 Houston, Texas 77042."
-    ::= { ianaLanguages 6 }
-
-ianaLangSMSL OBJECT-IDENTITY
-    STATUS  current
-    DESCRIPTION
-	"The Systems Management Scripting Language. A script written
-	 in the SMSL language is transferred in the SMSL source code
-	 format."
-    REFERENCE
-	"ISO/ITU Command Sequencer.
-	 ISO 10164-21 or ITU X.753"
-    ::= { ianaLanguages 7 }
-
-END

 .bp
 .PP
 \fBTable of Contents\fR
 .sp 1
 .xp t