svn commit: samba r15987 - in branches/SOC/bnh: .

brad at samba.org brad at samba.org
Thu Jun 1 03:21:23 GMT 2006


Author: brad
Date: 2006-06-01 03:21:22 +0000 (Thu, 01 Jun 2006)
New Revision: 15987

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=15987

Log:
common.vbs is the start of a library. Right now it sets up stdin and stdout, and has a class to handle command line options.
Added library handling to the user and share scripts. They also use the library option handling class.


Added:
   branches/SOC/bnh/common.vbs
Modified:
   branches/SOC/bnh/ads_adduser.vbs
   branches/SOC/bnh/ads_deluser.vbs
   branches/SOC/bnh/smb_addshare.vbs
   branches/SOC/bnh/smb_delshare.vbs


Changeset:
Modified: branches/SOC/bnh/ads_adduser.vbs
===================================================================
--- branches/SOC/bnh/ads_adduser.vbs	2006-05-31 17:34:04 UTC (rev 15986)
+++ branches/SOC/bnh/ads_adduser.vbs	2006-06-01 03:21:22 UTC (rev 15987)
@@ -1,46 +1,58 @@
-Const ADS_UF_ACCOUNTDISABLE=2
+const READ_ONLY = 1
+const USAGE_STATEMENT = "Usage: cscript ads_adduser.vbs /username:<username> /password:<password>"
+const ADS_UF_ACCOUNTDISABLE = 2
 
-Set stdout = WScript.StdOut
-Set stdin = WScript.StdIn
+' This function returns the contents of a file.
+' When passed the name of a .vbs script and passed to execute, the contents
+' of the script are visible within the relevant scope of this script.
+function include(library_filename)
+	dim filesystem_object, file
+	set filesystem_object = createobject("scripting.filesystemobject")
+	set file = filesystem_object.opentextfile(library_filename, READ_ONLY)
 
-'Check passed in parameters.
-Set argv = WScript.Arguments.Named
+	include = file.readall
+	set file = nothing
+	set filesystem_object = nothing
+end function
 
-if WScript.Arguments.Count = 2 Then
-	username = argv.Item("username")
-	password = argv.Item("password")
-	
-	If Not argv.Exists("username") Then
-	        stdout.Write "You must specify a username (/username:<username>)"
-	        WScript.Quit
-	ElseIf Not argv.Exists("password") Then
-	        stdout.Write "You must specify a password (/password:<password>)"
-	        WScript.Quit
-	End If
-Else
-	stdout.Write "Usage: cscript ads_adduser.vbs /username:<username> /password:<password>"
-	WScript.Quit
-End If
+execute include("common.vbs")
 
-'Bind to the DC.
-Set rootDSE = GetObject("LDAP://rootDSE")
-Set container = GetObject("LDAP://CN=Users," & _
-	rootDSE.Get("defaultNamingContext"))
+' Required command line options
+dim required_options, provided_options 
 
-'Create the user account.
-Set userAccount = container.Create("User", "CN=" & username)
-userAccount.Put "sAMAccountName", username
-userAccount.SetInfo
+required_options = array("username", "password")
+set provided_options = wscript.arguments.named
 
-'Get user account info.
-Set userAccount = GetObject _
-	("LDAP://CN=" & username & ",CN=Users," & _ 
-	rootDSE.Get("defaultNamingContext"))
+set setup_options = new setup_object
+setup_options.check_options provided_options, required_options
 
-'Set the password and enable the account.
-userAccount.SetPassword password
-userAccountControl = userAccount.Get("userAccountControl")
-userAccount.Put "userAccountControl", _
-	userAccountControl XOR ADS_UF_ACCOUNTDISABLE
-userAccount.SetInfo
+if setup_options.error_code = RTN_ERR then
+	setup_options.list_missing_options
+	stdout.writeline USAGE_STATEMENT
+	wscript.quit(setup_options.error_code)
+end if
 
+username = provided_options.item("username")
+password = provided_options.item("password")
+
+' Bind to the DC.
+set rootDSE = getobject("LDAP://rootDSE")
+set container = getobject("LDAP://CN=Users," & _
+	rootDSE.get("defaultNamingContext"))
+
+' Create the user account.
+set user_account = container.create("User", "CN=" & username)
+user_account.put "sAMAccountName", username
+user_account.setinfo
+
+' Get user account info.
+set user_account = getobject _
+	("LDAP://CN=" & username & ",CN=Users," & _
+	rootDSE.get("defaultNamingContext"))
+
+' Set the password and enable the account.
+user_account.setpassword password
+useraccountcontrol = user_account.get("userAccountControl")
+user_account.put "userAccountControl", _
+	useraccountcontrol XOR ADS_UF_ACCOUNTDISABLE
+user_account.setinfo

Modified: branches/SOC/bnh/ads_deluser.vbs
===================================================================
--- branches/SOC/bnh/ads_deluser.vbs	2006-05-31 17:34:04 UTC (rev 15986)
+++ branches/SOC/bnh/ads_deluser.vbs	2006-06-01 03:21:22 UTC (rev 15987)
@@ -1,20 +1,42 @@
-Set stdout = WScript.StdOut
-Set stdin = WScript.StdIn
+const READ_ONLY = 1
+const USAGE_STATEMENT = "Usage: cscript ads_deluser.vbs /username:<username>"
 
-' Check passed in parameters.
-Set argv = WScript.Arguments.Named
+' This function returns the contents of a file.
+' When passed the name of a .vbs script and passed to execute, the contents
+' of the script are visible within the relevant scope of this script.
+function include(library_filename)
+        dim filesystem_object, file
+        set filesystem_object = createobject("scripting.filesystemobject")
+        set file = filesystem_object.opentextfile(library_filename, READ_ONLY)
 
-If Not argv.Exists("username") Then
-	stdout.Write "You must specify a username (/username:<username>)"
-	WScript.Quit
-Else        
-	username = argv.Item("username")
-End If
+        include = file.readall
+        set file = Nothing
+        set filesystem_object = nothing
+end function
 
+execute include("common.vbs")
+
+' Required command line options.
+dim required_options, provided_options
+
+required_options = array("username")
+set provided_options = wscript.arguments.named
+
+set setup_options = new setup_object
+setup_options.check_options provided_options, required_options
+
+if setup_options.error_code = RTN_ERR then
+	setup_options.list_missing_options
+	stdout.writeline USAGE_STATEMENT
+	wscript.quit(setup_options.error_code)
+end if
+
+username = provided_options.item("username")
+
 ' Bind to the DC.
-Set rootDSE = GetObject("LDAP://rootDSE")
-Set container = GetObject("LDAP://CN=Users," & _
-	rootDSE.Get("defaultNamingContext"))
+set rootDSE = getobject("LDAP://rootDSE")
+Set container = getobject("LDAP://CN=Users," & _
+	rootDSE.get("defaultNamingContext"))
 
 ' Delete the user account.
-container.Delete "User", "CN=" & username
+container.delete "User", "CN=" & username

Added: branches/SOC/bnh/common.vbs
===================================================================
--- branches/SOC/bnh/common.vbs	2006-05-31 17:34:04 UTC (rev 15986)
+++ branches/SOC/bnh/common.vbs	2006-06-01 03:21:22 UTC (rev 15987)
@@ -0,0 +1,40 @@
+const RTN_OK = 0
+const RTN_ERR = 1
+
+set stdout = wscript.stdout
+set stdin = wscript.stdin
+
+class setup_object
+	dim error_code, missing_options
+
+	public function check_options(provided, required)
+		dim opt, index
+		index = 0
+
+		' Make sure all required options are available in
+		' the provided list. The redim call resizes the array.
+		for each opt in required
+			if not provided.exists(opt) then
+				error_code = RTN_ERR
+				redim preserve missing_options(index)
+				missing_options(index) = opt
+				index = index + 1
+			end if
+		next
+	end function
+
+	public function list_missing_options
+		dim opt
+		stdout.writeline "The following required options are missing:"
+		for each opt in missing_options
+			stdout.writeline "/" & opt & ":"
+		next
+	end function
+
+	' A subroutine named class_initialize is used to set default values
+	' on object instantiation.
+	private sub class_initialize
+		error_code = RTN_OK
+		missing_options = array(25)
+	end sub
+end class

Modified: branches/SOC/bnh/smb_addshare.vbs
===================================================================
--- branches/SOC/bnh/smb_addshare.vbs	2006-05-31 17:34:04 UTC (rev 15986)
+++ branches/SOC/bnh/smb_addshare.vbs	2006-06-01 03:21:22 UTC (rev 15987)
@@ -1,30 +1,41 @@
+const READ_ONLY = 1
+const USAGE_STATEMENT = "Usage: cscript smb_addshare.vbs /username:<username> /sharename:<share name> /sharepath:<share path>"
 
-Set stdout = WScript.StdOut
-Set stdin = WScript.StdIn
+' This function returns the contents of a file.
+' When passed the name of a .vbs script and passed to execute, the contents
+' of the script are visible within the relevant scope of this script.
+function include(library_filename)
+        dim filesystem_object, file
 
-' Check passed in parameters.
-Set argv = WScript.Arguments.Named
+        set filesystem_object = CreateObject("Scripting.FileSystemObject")
+        set file = filesystem_object.OpenTextFile(library_filename, READ_ONLY)
 
-if WScript.Arguments.Count = 3 Then
-	username = argv.Item("username")
-	sharename = argv.Item("sharename")
-	pathname = argv.Item("sharepath")
-	
-	If Not argv.Exists("username") Then
-		stdout.Write "You must specify a username (/username:<username>)"
-		WScript.Quit
-	ElseIf Not argv.Exists("sharename") Then
-		stdout.Write "You must specify a share name (/sharename:<share name>)"
-		WScript.Quit
-	ElseIf Not argv.Exists("sharepath") Then
-		stdout.Write "You must specify a share path (/sharepath:<share path>)"
-		WScript.Quit
-	End If
-Else
-	stdout.Write "Usage: cscript smb_addshare.vbs /username:<username> /sharename:<share name> /sharepath:<share path>"
-	WScript.Quit
-End If
+        include = file.readall
+        set file = nothing
+        set filesystem_object = nothing
+end function
 
+execute include("common.vbs")
+
+' Required command line options
+dim required_options, provided_options
+
+required_options = array("username", "sharename", "sharepath")
+set provided_options = wscript.arguments.named
+
+set setup_options = new setup_object
+setup_options.check_options provided_options, required_options
+
+if setup_options.error_code = RTN_ERR then
+        setup_options.list_missing_options
+        stdout.writeline USAGE_STATEMENT
+        wscript.quit(setup_options.error_code)
+end if
+
+username = provided_options.item("username")
+sharename = provided_options.item("sharename")
+pathname = provided_options.item("sharepath")
+
 ' Check if the directory exists, and exit if it does.
 Set fileSystemObject = CreateObject("Scripting.FileSystemObject")
 if fileSystemObject.FolderExists(pathname) Then
@@ -45,4 +56,3 @@
 ' Remove share.
 ' Delete shared directory.
 'fileSystemObject.DeleteFolder(pathname)
-

Modified: branches/SOC/bnh/smb_delshare.vbs
===================================================================
--- branches/SOC/bnh/smb_delshare.vbs	2006-05-31 17:34:04 UTC (rev 15986)
+++ branches/SOC/bnh/smb_delshare.vbs	2006-06-01 03:21:22 UTC (rev 15987)
@@ -1,36 +1,51 @@
-Set stdout = WScript.StdOut
-Set stdin = WScript.StdIn
+const READ_ONLY = 1
+const USAGE_STATEMENT =  "Usage: cscript smb_delshare.vbs /sharename:<share name> /sharepath:<share path>"
+const NEW_WINDOW_MINIMIZED = 7
 
-' Check passed in parameters.
-Set argv = WScript.Arguments.Named
+' This function returns the contents of a file.
+' When passed the name of a .vbs script and passed to execute, the contents
+' of the script are visible within the relevant scope of this script.
+function include(library_filename)
+        dim filesystem_object, file
+        set filesystem_object = createobject("scripting.filesystemobject")
+        set file = filesystem_object.opentextfile(library_filename, READ_ONLY)
 
-if WScript.Arguments.Count = 2 Then
-	sharename = argv.Item("sharename")
-	pathname = argv.Item("sharepath")
+        include = file.readall
+        set file = Nothing
+        set filesystem_object = nothing
+end function
 
-	If Not argv.Exists("sharename") Then
-		stdout.Write "You must specify a share name (/sharename:<share name>)"
-		WScript.Quit
-	ElseIf Not argv.Exists("sharepath") Then
-		stdout.Write "You must specify a share path (/sharepath:<share path>)"
-		WScript.Quit
-	End If
-Else
-	stdout.Write "Usage: cscript smb_addshare.vbs /sharename:<share name> /sharepath:<share path>"
-	WScript.Quit
-End If
+execute include("common.vbs")
 
+' Required command line options
+dim required_options, provided_options
+
+required_options = array("sharename", "sharepath")
+set provided_options = wscript.arguments.named
+
+set setup_options = new setup_object
+setup_options.check_options provided_options, required_options
+
+if setup_options.error_code = RTN_ERR then
+        setup_options.list_missing_options
+        stdout.writeline USAGE_STATEMENT
+        wscript.quit(setup_options.error_code)
+end if
+
+sharename = provided_options.item("sharename")
+pathname = provided_options.item("sharepath")
+
 ' Check if the directory exists, and exit if it does not.
-Set fileSystemObject = CreateObject("Scripting.FileSystemObject")
-if Not fileSystemObject.FolderExists(pathname) Then
-	stdout.Write "Error: Directory " & pathname & " does not exist. Exiting." 
-	WScript.Quit
-End If
+set filesystemobject = createobject("scripting.filesystemobject")
+if not filesystemobject.folderexists(pathname) then
+	stdout.write "Error: Directory " & pathname & " does not exist. Exiting." 
+	wscript.quit
+end if
 
 ' Delete the share.
-Set shell = WScript.CreateObject("WScript.Shell")
+set shell = wscript.createobject("wscript.shell")
 netsharecmd = "net share " & sharename & " /DELETE"
-shell.Run netsharecmd, 7, True
+shell.run netsharecmd, NEW_WINDOW_MINIMIZED, True
 
 ' Delete the directory.
-fileSystemObject.DeleteFolder(pathname)
+filesystemobject.deletefolder(pathname)



More information about the samba-cvs mailing list