
        +==========================================================+
        |                                                          |
        |           AdminMisc extension for Win32 Perl             |
        |           ----------------------------------             |
        |                                                          |
        |              by Dave Roth <rothd@roth.net>               |
        |                                                          |
        |                     version v961016                      |
        |                                                          |
        |                                                          |
        |    Copyright (c) 1996 Dave Roth. All rights reserved.    |
        |   This program is free software; you can redistribute    |
        | it and/or modify it under the same terms as Perl itself. |
        |                                                          |
        +==========================================================+



   Use under GNU General Public License or Larry Wall's "Artistic License"
   -----------------------------------------------------------------------


This is a modification of the NetAdmin extension to Win32 Perl. This is used
ONLY on a Windows NT platform (most of these functions are not available on
the Windows 95 platform).
Please let me know if you hack the AdminMisc file and get it to successfully
work on Win95.


Added/altered functions to this version of NetAdmin:

UserCheckPassword($Domain, $User, $Password)
    This will verify whether or not $Password is the correct password for
    $User on the domain $Domain ($Domain could be a server instead).
    If $Domain is Null ('') then the $User is assumed to be in the domain in which
    the account is running.
    If $User is Null ('') then the account to be changed is assumed to be the
    account which the perl script is executing under.
    account is running.
    Returns: 0 if password is incorrect
             1 if password is correct


UserChangePassword($Domain, $User, $OldPassword, $NewPassword)
    This will change the password for the user $User in domain $Domain ($Domain
    could be a server instead) from $OldPassword to $NewPassword.
    If $Domain is Null ('') then the $User is assumed to be in the domain in which
    the account is running.
    If $User is Null ('') then the account to be changed is assumed to be the
    account which the perl script is executing under.
    Returns: 0 if password was NOT changed
             1 if password was changed

GetLogonName()
    This will return the name of the user this account is logged on as. This is
    NOT necessarily the same as the account the perl script is running under.
    An account can log on as another user (known as "impersonating" another
    account).
    Returns: Name that the current account is logged in as.

LogonAsUser($Domain, $User, $Password [, $LogonType)
    This will log the current account on under a different account. The account
    to log on under will be in the domain $Domain, user $User with the password
    $Password.
    If $Domain is Null ('') then the $User is assumed to be in the domain in which
    the account is running.
    $LogonType is by default (if not specified) LOGON32_LOGON_INTERACTIVE but
    can be any valid logon type (eg. LOGON32_LOGON_BATCH).
    Returns: 0 if unsuccessfull
             1 if successfull

LogoffAsUser([1|0])
    This will log the current account out from an "impersonated" account if
    the current account is indeed impersonating another account.
    If a non 0 parameter is passed then the the logoff is forced, that is,
    you can force the impersonation to end even if LogonAsUser() was not called.
    Returns: always returns 1

CreateProcessAsUser($CommandString [, $DefaultDirectory])
    This creates a new process $CommandString starting in the $DefaultDirectory
    (optional). The new process will be running under the account of the
    currently impersonated user (LogonAsUser()).
    There has been problems with this under NT 4.0 when the impersonated user
    is not an Administrator.
    Returns: -1 if failure otherwise the return is the OS createprocess result.

UserSetAttributes($Server, $UserName, $UserFullName, $Password, $PasswordAge,
                  $Privilege, $HomeDir, $Comment, $Flags, $ScriptPath)
    This performs the same function as the original UserSetAttributes()
    with the addition that it adds the ability to set the user's Full Name
    ($UserFullName).
    Returns: 0 if unsuccessfull
             1 if successfull

UserGetAttributes($Server, $UserName, $UserFullName, $Password, $PasswordAge,
                    $Privilege, $HomeDir, $Comment, $Flags, $ScriptPath)
    This performs the same functino as the original UserGetAttributes()
    with the addition that it adds the ability to get the user's Full Name
    ($UserFullName).
    Returns: 0 if unsuccessfull
             1 if successfull

GetHostAddress($DNS_Name)
gethostbyname($DNS_Name)
GetHostName($IP_Address)
gethostbyaddr($IP_Address)
    These four functions are the same but go by different names for the sake
    of sanity. You can freely mix and match any of these.
    Providing either an IP address or a DNS name it will return the opposite
    of what you provided or return a 0 if it fails.
    Returns: IP address, DNS name if successful.
             0 if failure.

DNSCache([1|0])
    Sets the local DNS cache on (1) or off (0). If nothing is specified it
    only returns the current state of the DNS cache.
    Returns: 1 local DNS cache is active.
             0 local DNS cache is not active.

DNSCacheSize([$Size])
    Sets the local DNS cache size to $Size elements (or name/ip associations).
    If nothing is specified then it only returns the current size of the cache.
    NOTE: If a number is specified then the cache will be reset and every
          thing in it will be lost.
    NOTE: The size could be anything. Don't make it too large for memory and
          speed sake.
    The default size is 600.
    Returns: Current size of the DNS cache.

DNSCacheCount()
    Returns the current number of cached elements. This can not exceed the
    value of DNSCacheSize.
    Returns: Current number of cached elements.


