| Intranet/Hosting Toolkit | [table of contents] |
|
v1.15 Feb 24th 2001 |
CFX_IIS
COMMERCIAL NT DLL for Cold Fusion 4.0.1 and up Lewis A. Sellers http://www.intrafoundation.com/intranethostingtoolkit.html ihtk@intrafoundation.com |
|
FOREWORD This is an Allaire Cold Fusion Extension Tag (CFX). It is for use with Allaire Cold Fusion Servers 4.01 (and up) running on Microsoft NT. It was written by Lewis A. Sellers of Intrafoundation Software.
Please read the version history for current tag status before emailing questions. |
C O N T E N T S |
The tag itself returns a couple variables back no matter what you do (IISDescription, IISVersion and IISError). These are always available unless there is a catastrophic failure of the tag.
Additionally you can use the ABOUT function to return more detailed information on the tag. The fields returned are mostly only of interest for curiosity or in debugging a situation.
Note below that though the tag returns it's SerialNumber, it's not used currently, and hasn't been for a very long time, but probably will be again soon.
For the curious, it also proves the total number of lines of c/c++ that the current build was using. This includes the scant comments in the source code. For instance, this build of the tag has 6370 lines of code.
The quality field will be one of the following four: "Alpha", "Beta", "Gamma" or "Omega". Quality relates the quality control status of the version of the tag you're currently using.
Alpha code is highly unstable and shouldn't be trusted for anything. Do not use on production machines.
Beta code is close to being finish and it is in a debugging phase. Do not use on production machines.
Gamma code is for use on production machines. As far as the beta testers have determined it works as it should.
When a product goes Omega that generally means it is long used Gamma code that is now no longer being maintained.
Web, aka HTTP or HyperText Transfer Protocol. This is the standard protocol used to browse information on the internet.
The CFX tag CFX_IIS tries to emulate as closely as possible the general naming strategy of the IIS Manager GUI. So... if you're familiar it, then the purpose of the fields of the following functions should be fairly self-evident.
| FIELDS | |
|---|---|
| Server | string |
| State | string |
| Description | string |
| Path | string |
| AnonymousUsername | string |
| AnonymousPassword | string |
| Bindings | string |
| SSLBindings | string |
| MaxConnections | numeric |
| ConnectionTimeout | numeric |
| DefaultLogonDomain | string |
| AccessRead | boolean |
| AccessWrite | boolean |
| AccessExecute | boolean |
| AccessScript | boolean |
| DirectoryBrowsingAllowed | boolean |
| CustomErrors | 2level list |
| HTTPHeaders | 2level list |
| HTTPRedirect | string |
| EnableDefaultDoc | boolean |
| DefaultDoc | string (csv) |
| EnableDocFooter | boolean |
| DocFooter | string (csv) |
| ApplicationName | string |
| ApplicationProtection | string |
| EnableLogging | boolean |
| ActiveLogFormat | string |
| NCSA, W3C, ODBC | |
| OPTIONAL | |
|---|---|
| Computer | string |
| Query | string |
| REQUIRED | |
|---|---|
| Action | WEBSERVERS |
| RETURNED VARIABLES | |
|---|---|
| IISComputer | string |
Bindings for the web are the same as for FTP. A very simple binding might be:
127.0.0.1:80:Localhost.
A binding is a grouping of an IP address, a port address and a host header seperated by colons. Additional bindings may be made up of multiple sets of these groups seperated by semi-colons. Thus you might see something like:
205.181.25.11:80:www.allaire.com;205.181.25.11:80:www.coldfusion.com.
The field "SSLBindings" is the bindings for an SSL connection, "Bindings" for the normal one.
HTTPErrors is a 2 level CSV similiar to bindings. It defines errors basic error messages such as "404 NOT FOUND" an so forth. It consists of four elements: the error number, the ordering number, the page type, the page url.
The page type can be either Default, FILE or URL. If you do not specify any message for an error, then Default is assumed. For example:
400,*,FILE,D:\WINNT\help\common\400.htm;401,1,FILE,D:\WINNT\help\common\401-1.htm;401,2,FILE,D:\WINNT\help\common\401-2.htm
| Logging with "ODBC" | |
|---|---|
| ODBCDataSource | string |
| ODBCTable | string |
| ODBCUserName | string |
| ODBCPassword | string |
EnableLogging is "1" if logging is enabled. Otherwise is "0". The type of the logging is specified with ActiveLogFormat: "NCSA", "ODBC" or "W3C"
When of type ODBC the relevant fields are: "ODBCDataSource", "ODBCTable", "ODBCUserName" and "ODBCPassword".
| Logging with "NCSA" | |
|---|---|
| NewLogTimePeriod | string |
| Hourly, Daily, Weekly, Monthly, Unlimited | |
| MB | numeric |
| LogFileDirectory | string |
When of type NCSA the relevant fields are: "NewLogTimePeriod", "MB" and "LogFileDirectory".
| Logging with "W3C" | |
|---|---|
| NewLogTimePeriod | string |
| Hourly, Daily, Weekly, Monthly, Unlimited | |
| MB | numeric |
| LogFileDirectory | string |
| UseLocalTime | boolean |
When of type W3C the relevant fields are: "NewLogTimePeriod", "MB", "LogFileDirectory" and "UseLocalTime".
This is exactly the same as the WEBSERVERS function documented above except that it takes a SERVER parameter as input. Thus you can selectively interrogate a single server.
| FIELDS | |
|---|---|
| Server | string |
| DirectoryType | string |
| Description | string |
| AnonymousUsername | string |
| AnonymousPassword | string |
| AccessRead | boolean |
| AccessWrite | boolean |
| AccessExecute | boolean |
| AccessScript | boolean |
| AuthBasic | boolean |
| AuthAnonymous | boolean |
| AuthNTLM | boolean |
| DirectoryBrowsingAllowed | boolean |
| ContentIndexed | boolean |
| Path | string |
| DefaultLogonDomain | string |
| UNCUsername | string |
| UNCPassword | string |
| CustomErrors | 2level list |
| HTTPHeaders | 2level list |
| HTTPRedirect | string |
| EnableDefaultDoc | boolean |
| DefaultDoc | string (csv) |
| EnableDocFooter | boolean |
| DocFooter | string (csv) |
| OPTIONAL | |
|---|---|
| Computer | string |
| Query | string |
| REQUIRED | |
|---|---|
| Action | WEBDIRECTORIES |
| Server | number |
| RETURNED VARIABLES | |
|---|---|
| IISComputer | string |
| IISServer | string |
Lists virtual directories assigned to a web server.
| OPTIONAL | |
|---|---|
| Computer | string |
| Server | string |
| AnonymousUsername | string |
| AnonymousPassword | string |
| Bindings | string |
| SSLBindings | string |
| MaxConnections | numeric |
| ConnectionTimeout | numeric |
| DefaultLogonDomain | string |
| AccessRead | boolean |
| AccessWrite | boolean |
| AccessExecute | boolean |
| AccessScript | boolean |
| DirectoryBrowsingAllowed | boolean |
| CustomErrors | 2level list |
| HTTPHeaders | 2level list |
| HTTPRedirect | string |
| EnableDefaultDoc | boolean |
| DefaultDoc | string (csv) |
| EnableDocFooter | boolean |
| DocFooter | string (csv) |
| ApplicationName | string |
| ApplicationProtection | string |
| EnableLogging | boolean |
| ActiveLogFormat | string |
| IIS, NCSA, W3C, ODBC | |
| REQUIRED | |
|---|---|
| Action | ADDWEBSERVER |
| Server | string |
| Description | string |
| Path | string |
| RETURNED VARIABLES | |
|---|---|
| IISDescription | string |
| IISPath | string |
| IISComputer | string |
| IISServer | string |
Adds a web server.
By default ADDWEBSERVER automatically assigns the next free server number to an added server. However you can override this with the SERVER parameter and use whatever number you wish.
HTTPRedirect supplies the redirection url for incoming visitors. You can tag on any of the three phrases (seperated by commas) for further effects.
HTTPHeaders, as you might guess, allows you to prepend any http headers to a page you wish. Unlike most every other list the headers are not semi-colon seperated. They use a comma. (That is, since semicolons are used in http headers, we have to use colons, which generall are not so as to avoid confusion.) Typical HTTPHeaders might be:
HTTP/1.0 200 OK Content-type: text/html Set-Cookie: mycookie=hasfleas; path=/; expires= Sat 28-Jul-2000 04:00:00 GMT Server: Microsoft-IIS/5.0 Date: Wed, 28 Jul 2000 04:00:00 GMT Connection: Keep-Alive Content-Length: 2011 Content-Type: application/zip Location: www.allaire.com
By default all webservers created do not support ISAPI. This means ASP and CF will not run under them. ApplicationName and ApplicationProtection may be used to enable ISAPI. Calling on any of them sets up the default ISAPI properities.
ApplicationName is generally "Default Application". ApplicationProtection can be either "Low", "Medium" or "High". By default "Medium" is used.
In short, if you want to enable cfm to run in the webserver, use
ApplicationName="Default Application"
ApplicationProtection="Medium"
A binding is a grouping of an IP address, a port address and a host header seperated by colons. See WEBSERVERS.
Multi-homed IPs. These are created by using bindings. For a site use the same IP and ports but different host headers. (You of course also have to set up your DNS (Domain Name Server) to map these as well. This can be done with pure cfm with some DNS servers. One day CFX_Domains might appear to handle this automatically no matter what brand of DNS you use.)
Host headers do not work with SSL. (That is, you can not multi-home HTTPS sites.)
Example: <CFX_IIS ACTION="ADDWEBSERVER" DESCRIPTION="Public Web Server" PATH="c:\wwwroot">
| Logging with "ODBC" | |
|---|---|
| ODBCDataSource | string |
| ODBCTable | string |
| ODBCUserName | string |
| ODBCPassword | string |
To turn off all logging use set EnableLogging to "0". Otherwise, to use logging set Enable logging to "1" and the type of logging with ActiveLogFormat. With web ActiveLogFormat may be: "NCSA", "W3C", or "ODBC".
When of type ODBC the relevant fields are: "ODBCDataSource", "ODBCTable", "ODBCUserName" and "ODBCPassword".
| Logging with "NCSA" | |
|---|---|
| NewLogTimePeriod | string |
| Hourly, Daily, Weekly, Monthly, Unlimited | |
| MB | numeric |
| LogFileDirectory | string |
When of type NCSA the relevant fields are: "NewLogTimePeriod", "MB" and "LogFileDirectory".
| Logging with "W3C" | |
|---|---|
| NewLogTimePeriod | string |
| Hourly, Daily, Weekly, Monthly, Unlimited | |
| MB | numeric |
| LogFileDirectory | string |
| UseLocalTime | boolean |
When of type W3C the relevant fields are: "NewLogTimePeriod", "MB", "LogFileDirectory" and "UseLocalTime".
| OPTIONAL | |
|---|---|
| Computer | string |
| AnonymousUsername | string |
| AnonymousPassword | string |
| AccessRead | boolean |
| AccessWrite | boolean |
| AccessExecute | boolean |
| AccessScript | boolean |
| AuthBasic | boolean |
| AuthAnonymous | boolean |
| AuthNTLM | boolean |
| DirectoryBrowsingAllowed | boolean |
| ContentIndexed | boolean |
| Path | string |
| DefaultLogonDomain | string |
| UNCUsername | string |
| UNCPassword | string |
| CustomErrors | 2level list |
| HTTPHeaders | 2level list |
| HTTPRedirect | string |
| EnableDefaultDoc | boolean |
| DefaultDoc | string (csv) |
| EnableDocFooter | boolean |
| DocFooter | string (csv) |
| REQUIRED | |
|---|---|
| Action | ADDWEBDIRECTORY |
| Server | string |
| Directory | string |
| Path | string |
| RETURNED VARIABLES | |
|---|---|
| IISDescription | string |
| IISPath | string |
| IISComputer | string |
| IISServer | string |
Adds a virtual directory to a web server.
Example: <CFX_IIS ACTION="ADDWEBDIRECTORY" SERVER="1" DIRECTORY="test" PATH="c:\test">
| OPTIONAL | |
|---|---|
| Computer | string |
| REQUIRED | |
|---|---|
| Action | DELETEWEBSERVER |
| Server | string |
| RETURNED VARIABLES | |
|---|---|
| IISComputer | string |
| IISServer | string |
Deletes a web server.
Example: <CFX_IIS ACTION="DELETEWEBSERVER" SERVER="1">
| OPTIONAL | |
|---|---|
| Computer | string |
| REQUIRED | |
|---|---|
| Action | DELETEWEBDIRECTORY |
| Server | string |
| Directory | string |
Deletes a virtual web server directory.
Example: <CFX_IIS ACTION="DELETEWEBDIRECTORY" SERVER="1" DIRECTORY="public">
File Transfer Protocol. FTP. This is the standard protocol uses to transfer files across the internet.
| FIELDS | |
|---|---|
| Server | string |
| State | string |
| Description | string |
| Path | string |
| AnonymousUsername | string |
| AnonymousPassword | string |
| AnonymousPasswordSync | boolean |
| Bindings | 2level list |
| MaxConnections | numeric |
| ConnectionTimeout | numeric |
| DefaultLogonDomain | string |
| AccessRead | boolean |
| AccessWrite | boolean |
| LogAccess | boolean |
| DirectoryBrowsingAllowed | boolean |
| ExitMessage | string |
| GreetingMessage | string |
| MaxClientsMessage | string |
| AnonymousOnly | boolean |
| AllowAnonymous | boolean |
| EnableLogging | boolean |
| ActiveLogFormat | string |
| IIS, W3C, ODBC | |
| OPTIONAL | |
|---|---|
| Computer | string |
| Query | string |
| REQUIRED | |
|---|---|
| Action | FTPSERVERS |
| RETURNED VARIABLES | |
|---|---|
| IISComputer | string |
Lists all FTP servers on the local computer, or the computer specified.
Of all the fields, bindings needs the most explaination. However, a very simple binding might be:
127.0.0.1:21:Localhost.
A binding is a grouping of an IP address, a port address and a subdomain seperated by colons. Additional bindings may be made up of multiple sets of these groups seperated by semi-colons. Thus you might see something like:
205.181.25.11:21:ftp.allaire.com;205.181.25.11:21:ftp.coldfusion.com.
The state field return text of: Starting, Started, Stopping, Stopped, Pausing, Paused or Continuing.
| Logging with "ODBC" | |
|---|---|
| ODBCDataSource | string |
| ODBCTable | string |
| ODBCUserName | string |
| ODBCPassword | string |
EnableLogging is "1" if logging is enabled. Otherwise is "0". The type of the logging is specified with ActiveLogFormat: "IIS", "ODBC" or "W3C"
When of type ODBC the relevant fields are: "ODBCDataSource", "ODBCTable", "ODBCUserName" and "ODBCPassword".
| Logging with "IIS" | |
|---|---|
| NewLogTimePeriod | string |
| Hourly, Daily, Weekly, Monthly, Unlimited | |
| MB | numeric |
| LogFileDirectory | string |
When of type IIS the relevant fields are: "NewLogTimePeriod", "MB" and "LogFileDirectory".
| Logging with "W3C" | |
|---|---|
| NewLogTimePeriod | string |
| Hourly, Daily, Weekly, Monthly, Unlimited | |
| MB | numeric |
| LogFileDirectory | string |
| UseLocalTime | boolean |
When of type W3C the relevant fields are: "NewLogTimePeriod", "MB", "LogFileDirectory" and "UseLocalTime".
This is exactly the same as the FTPSERVERS function documented above except that it takes a SERVER parameter as input. Thus you can selectively interrogate a single server.
| FIELDS | |
|---|---|
| Server | string |
| Name | string |
| Path | string |
| AccessRead | boolean |
| AccessWrite | boolean |
| LogAccess | boolean |
| UNCUsername | string |
| UNCPassword | string |
| OPTIONAL | |
|---|---|
| Computer | string |
| Query | string |
| REQUIRED | |
|---|---|
| Action | FTPDIRECTORIES |
| Server | number |
| RETURNED VARIABLES | |
|---|---|
| IISComputer | string |
| IISServer | string |
Lists the directories assigned to a FTP server on the local or specified computer.
| OPTIONAL | |
|---|---|
| Computer | string |
| Server | string |
| AnonymousUsername | string |
| AnoymousPassword | string |
| AnonymousPasswordSync | boolean |
| Bindings | 2level list |
| MaxConnections | numeric |
| ConnectionTimeout | numeric |
| DefaultLogonDomain | string |
| AccessRead | boolean |
| AccessWrite | boolean |
| LogAccess | boolean |
| DirectoryBrowsingAllowed | boolean |
| ExitMessage | string |
| GreetingMessage | string |
| MaxClientsMessage | string |
| AnonymousOnly | boolean |
| AllowAnonymous | boolean |
| REQUIRED | |
|---|---|
| Action | ADDFTPSERVER |
| Description | string |
| Path | string |
| RETURNED VARIABLES | |
|---|---|
| IISComputer | string |
| IISServer | string |
| IISPath | string |
| IISDescription | string |
Adds a new FTP server to IIS.
By default ADDFTPSERVER automatically assigns the next free server number to an added server. However you can override this with the SERVER parameter and use whatever number you wish.
Example: <CFX_IIS ACTION="ADDFTPSERVER" DESCRIPTION="Public FTP Server" PATH="c:\public\">
| Logging with "ODBC" | |
|---|---|
| ODBCDataSource | string |
| ODBCTable | string |
| ODBCUserName | string |
| ODBCPassword | string |
To turn off all logging use set EnableLogging to "0". Otherwise, to use logging set Enable logging to "1" and the type of logging with ActiveLogFormat. With ftp ActiveLogFormat may be: "IIS", "W3C", or "ODBC".
When of type ODBC the relevant fields are: "ODBCDataSource", "ODBCTable", "ODBCUserName" and "ODBCPassword".
| Logging with "IIS" | |
|---|---|
| NewLogTimePeriod | string |
| Hourly, Daily, Weekly, Monthly, Unlimited | |
| MB | numeric |
| LogFileDirectory | string |
When of type IIS the relevant fields are: "NewLogTimePeriod", "MB" and "LogFileDirectory".
| Logging with "W3C" | |
|---|---|
| NewLogTimePeriod | string |
| Hourly, Daily, Weekly, Monthly, Unlimited | |
| MB | numeric |
| LogFileDirectory | string |
| UseLocalTime | boolean |
When of type W3C the relevant fields are: "NewLogTimePeriod", "MB", "LogFileDirectory" and "UseLocalTime".
| OPTIONAL | |
|---|---|
| Computer | string |
| AccessRead | boolean |
| AccessWrite | boolean |
| LogAccess | boolean |
| UNCUsername | string |
| UNCPassword | string |
| REQUIRED | |
|---|---|
| Action | ADDFTPDIRECTORY |
| Server | number |
| Directory | string |
| Path | string |
| RETURNED VARIABLES | |
|---|---|
| IISComputer | string |
| IISServer | string |
| IISPath | string |
| IISDirectory | string |
Adds a virtual directory to a FTP server.
| OPTIONAL | |
|---|---|
| Computer | string |
| REQUIRED | |
|---|---|
| Action | DELETEFTPSERVRE |
| Server | string |
| RETURNED VARIABLES | |
|---|---|
| IISComputer | string |
| IISServer | string |
Deletes an FTP server from IIS.
Example: <CFX_IIS ACTION="DELETEFTPSERVER" SERVER="1">
| OPTIONAL | |
|---|---|
| Computer | string |
| REQUIRED | |
|---|---|
| Action | DELETEFTPDIRECTORY |
| Server | string |
| Directory | string |
| RETURNED VARIABLES | |
|---|---|
| IISComputer | string |
| IISServer | string |
| IISDirectory | string |
Removes a virtual FTP directory from an IIS FTP server.
Example: <CFX_IIS ACTION="DELETEFTPDIRECTORY" SERVER="1" DIRECTORY="public">
Simple Mail Transfer Protocol. The backbone of all mail transports on the internet.
| FIELDS | |
|---|---|
| Server | string |
| State | string |
| Description | string |
| Bindings | string |
| Version | numeric |
| MessagesizeLimit | numeric |
| SessionSizeLimit | numeric |
| RecipientsPerMessageLimit | numeric |
| BadMailDirectory | string |
| NonDeliveryMailTo | string |
| BadMailTo | string |
| RetryInterval | numeric |
| DelayNotification | numeric |
| ExpirationTimeout | numeric |
| HopCount | numeric |
| MasqueradeDomain | string |
| FullyQualifiedDomainName | string |
| SmartHost | string |
| EnableReverseDnsLookup | boolean |
| REQUIRED | |
|---|---|
| Action | SMTPSERVERS |
| RETURNED VARIABLES | |
|---|---|
| IISComputer | string |
Lists all SMTP servers.
Bindings for the web are the same as for FTP. A very simple binding might be:
127.0.0.1:25:Localhost.
A binding is a grouping of an IP address, a port address and a subdomain seperated by colons. Additional bindings may be made up of multiple sets of these groups seperated by semi-colons. Thus you might see something like:
205.181.25.11:25:smtp.allaire.com;205.181.25.11:80:smtp2.coldfusion.com.
IIS allows you to selectively start or stop virtual sites, be they ftp or web. Through the CFX_IIS START and STOP functions you can access this ability. These functions only work if the site is properly functioning (the path exists, the bindings are valid, etc). Otherwise there will be a services delay of up to several seconds.
If you do not specify a SERVICETYPE of either "Web" or "FTP" it currently defaults to "Web".
| OPTIONAL | |
|---|---|
| Computer | string |
| REQUIRED | |
|---|---|
| Action | START |
| Server | number |
| Servicetype | string |
| RETURNED VARIABLES | |
|---|---|
| IISServer | string |
| IISServiceType | string |
Starts a virtual site, ftp or web. Servicetype can be either "FTP" or "Web".
Example: <CFX_IIS ACTION="START" SERVER="1" SERVICETYPE="FTP">
| OPTIONAL | |
|---|---|
| Computer | string |
| REQUIRED | |
|---|---|
| Action | STOP |
| Server | number |
| Servicetype | string |
| RETURNED VARIABLES | |
|---|---|
| IISServer | string |
| IISServiceType | string |
Stops a virtual site, ftp or web. Servicetype can be either "FTP" or "Web".
Example: <CFX_IIS ACTION="STOP" SERVER="1" SERVICETYPE="FTP">
| OPTIONAL | |
|---|---|
| Computer | string |
| REQUIRED | |
|---|---|
| Action | PAUSE |
| Server | number |
| Servicetype | string |
| RETURNED VARIABLES | |
|---|---|
| IISServer | string |
| IISServiceType | string |
Pauses a virtual site, ftp or web. Servicetype can be either "FTP" or "Web".
Example: <CFX_IIS ACTION="PAUSE" SERVER="1" SERVICETYPE="FTP">
| OPTIONAL | |
|---|---|
| Computer | string |
| REQUIRED | |
|---|---|
| Action | CONTINUE |
| Server | number |
| Servicetype | string |
| RETURNED VARIABLES | |
|---|---|
| IISServer | string |
| IISServiceType | string |
Continues a paused virtual site, ftp or web. Servicetype can be either "FTP" or "Web".
Example: <CFX_IIS ACTION="CONTINUE" SERVER="1" SERVICETYPE="FTP">
By request added WEBSERVER and FTPSERVER functions and cleared up docs.
ATTENTION: As per request a password protection for a shared hosting environments has been added. See IHTKPASSWORD for more details.
Documentation clarifiations.
Well, while fixing a subfunction the last go around, I missed a possible null pointer issue. Fixed.
The senior administrator of a hosting company reported intermittant crashes of the tag with the ADDWEBSERVER function. It was unreproducible locally.
After a few days of back and forth talk that didn't seem to be getting us anywhere, the problem was finally tracked down to the subroutine that chooses the next free server number.
This piece of code was probably the oldest bit left in the entire tag and had been overlooked when a general strengthing of the error handling took place a few versions back. In particular, there were some instances where it would try to interrogate the IIS metabase beyond an enumerable range. This has been corrected.
A few other things were cleaned up in the attempt, which at the time were not logged, but in general should make the tag more stable.
Added additional tests to test the use of directly specifying the name of the computer the IIS is on.
Upgraded error reporting code to v1.2. Addressed some NT4/IIS4 issues.
Clarifications to the documents on some points (fields and multi-homing, etc). Overhauled tag's error reporting functions.
Fixed HTPPHeaders issue. Anything else?
There were some problems with HTTP headers and redirects. Cleaned up.
Go rudy.
Haven't checked 1.2 out on NT4, but there shouldn't be any difference (ie, NT4 is sometimes a slug with CFX_IIS and the other tags while Windows 2000 flies through before you can blink.)
It is done.
This does not mean you rush this onto your production servers. It's all brand new ADSI code that's still drying. You should test any implimentations THROUGHLY on your dev network before moving out to production machines. And if it all works just fine, well, please inform me. And if it does, or I completely forgot some obvious feature, that I want to know as well.
Don't really feel like working on a voluminous documentation set right now, but you should be able to figure out most of it without: All the field names were made to match up closely to the their equivilents in the IIS MMC. And there are the tests/examples to look over.
UMS2.3 is, btw, the last email distribution. (Chokes up the mail servers for hours anyway). It's moving to web-based distribution.
Anyway....
For Sasha.
Finished-off FTP function code. Completed Web functions. Added stop/pause virtual site code. Spawned off CFX_Services to control NT services such as IISADMIN, W3SVC, MSFTPSVC (and Cold Fusion Application Server if needed), etc.
Hesitantly brought versioning up to 1.0beta. For some reason a lot of US MIL or DoD-related GOV are interested in my tags (the freeware inclusive) so I'm a bit hesitant to release versions as early as I might want to. It's close though. Send feedback. Good or bad.
Well, after five days of non-stop coding (sans the sabbath) I've almost got the bloody thing done. Feel free to send in your checks as today I found out the hard way I seem to be needing to pop for a new transmission on my truck.* Always a lovely surprise. :)
Anyway, on a more serious level, this is a completely new bit of c++ code using ADSI (the Active Directory Services) which are built in to Windows 2000. The tag works under NT4 as well if you install the ADSI pack from Microsoft. (This comes with Cold Fusion 4.x and up and is required by it to work, so you probably already have a version of it installed.)
.4 is the first public-release beta version. It does more or less work except for the stop/start/pause functions, HOWEVER, you need to be aware of a few things. This version of the tag has not had ANY outside testing yet. Before you use it on your dev machine please go to the IIS Microsoft Management Control and do a backup from the Backup/Restore Configuration. Early on there were a few issues with unicode being incorrectly passed that would corrupt some entries during an add operation (which explains the dangerous and otherwise undocumented FTPSERVERSPURGEPURGEPURGE and WEBSERVERSPURGEPURGEPURGE functions you might find buried in the tests). This has since been tracked down and fixed, but I urge caution until the gamma version comes out (Probably CFX_IIS .5/IIS Suite 2.2. And Probably within a few days if I get a decent amount of feedback.)
Also, some fields are not completely debugged. You'll just have to wait til the next release before you can use it in production. But send feedback.
On a side note (for those who've asked) concerning CFX_ExchangeServer... yes, it is entirely possible take this ADSI code and build a CFX that will allow you to setup and manage email, etc accounts. And I have started it in fact. At the moment I'm very burnt out on these tags though. If you really want to see such a thing, just send me a message. If enough of you bug me about it then I'll finish it. (Or send a check with a large amount of zeros to the right. Same difference.)
I'll see about proper documentation next release. The bug fix of CFX_NFS has been sitting around for a week or so and I'm sure it's more important to get that out asap.
Sorry this took so long.
*Official guilt-trip.