home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / NetAdmin.pm < prev    next >
Text File  |  2004-01-12  |  11KB  |  420 lines

  1. package Win32::NetAdmin;
  2.  
  3. #
  4. #NetAdmin.pm
  5. #Written by Douglas_Lankshear@ActiveWare.com
  6. #
  7.  
  8. $VERSION = '0.08';
  9.  
  10. require Exporter;
  11. require DynaLoader;
  12. use Win32;
  13.  
  14. die "The Win32::NetAdmin module works only on Windows NT" if(!Win32::IsWinNT() );
  15.  
  16. @ISA= qw( Exporter DynaLoader );
  17. # Items to export into callers namespace by default. Note: do not export
  18. # names by default without a very good reason. Use EXPORT_OK instead.
  19. # Do not simply export all your public functions/methods/constants.
  20. @EXPORT = qw(
  21.     DOMAIN_ALIAS_RID_ACCOUNT_OPS
  22.     DOMAIN_ALIAS_RID_ADMINS
  23.     DOMAIN_ALIAS_RID_BACKUP_OPS
  24.     DOMAIN_ALIAS_RID_GUESTS
  25.     DOMAIN_ALIAS_RID_POWER_USERS
  26.     DOMAIN_ALIAS_RID_PRINT_OPS
  27.     DOMAIN_ALIAS_RID_REPLICATOR
  28.     DOMAIN_ALIAS_RID_SYSTEM_OPS
  29.     DOMAIN_ALIAS_RID_USERS
  30.     DOMAIN_GROUP_RID_ADMINS
  31.     DOMAIN_GROUP_RID_GUESTS
  32.     DOMAIN_GROUP_RID_USERS
  33.     DOMAIN_USER_RID_ADMIN
  34.     DOMAIN_USER_RID_GUEST
  35.     FILTER_TEMP_DUPLICATE_ACCOUNT
  36.     FILTER_NORMAL_ACCOUNT
  37.     FILTER_INTERDOMAIN_TRUST_ACCOUNT
  38.     FILTER_WORKSTATION_TRUST_ACCOUNT
  39.     FILTER_SERVER_TRUST_ACCOUNT
  40.     SV_TYPE_WORKSTATION
  41.     SV_TYPE_SERVER
  42.     SV_TYPE_SQLSERVER
  43.     SV_TYPE_DOMAIN_CTRL
  44.     SV_TYPE_DOMAIN_BAKCTRL
  45.     SV_TYPE_TIMESOURCE
  46.     SV_TYPE_AFP
  47.     SV_TYPE_NOVELL
  48.     SV_TYPE_DOMAIN_MEMBER
  49.     SV_TYPE_PRINT
  50.     SV_TYPE_PRINTQ_SERVER
  51.     SV_TYPE_DIALIN
  52.     SV_TYPE_DIALIN_SERVER
  53.     SV_TYPE_XENIX_SERVER
  54.     SV_TYPE_NT
  55.     SV_TYPE_WFW
  56.     SV_TYPE_POTENTIAL_BROWSER
  57.     SV_TYPE_BACKUP_BROWSER
  58.     SV_TYPE_MASTER_BROWSER
  59.     SV_TYPE_DOMAIN_MASTER
  60.     SV_TYPE_DOMAIN_ENUM
  61.     SV_TYPE_SERVER_UNIX
  62.     SV_TYPE_SERVER_MFPN
  63.     SV_TYPE_SERVER_NT
  64.     SV_TYPE_SERVER_OSF
  65.     SV_TYPE_SERVER_VMS
  66.     SV_TYPE_WINDOWS
  67.     SV_TYPE_DFS
  68.     SV_TYPE_ALTERNATE_XPORT
  69.     SV_TYPE_LOCAL_LIST_ONLY
  70.     SV_TYPE_ALL
  71.     UF_TEMP_DUPLICATE_ACCOUNT
  72.     UF_NORMAL_ACCOUNT
  73.     UF_INTERDOMAIN_TRUST_ACCOUNT
  74.     UF_WORKSTATION_TRUST_ACCOUNT
  75.     UF_SERVER_TRUST_ACCOUNT
  76.     UF_MACHINE_ACCOUNT_MASK
  77.     UF_ACCOUNT_TYPE_MASK
  78.     UF_DONT_EXPIRE_PASSWD
  79.     UF_SETTABLE_BITS
  80.     UF_SCRIPT
  81.     UF_ACCOUNTDISABLE
  82.     UF_HOMEDIR_REQUIRED
  83.     UF_LOCKOUT
  84.     UF_PASSWD_NOTREQD
  85.     UF_PASSWD_CANT_CHANGE
  86.     USE_FORCE
  87.     USE_LOTS_OF_FORCE
  88.     USE_NOFORCE
  89.     USER_PRIV_MASK
  90.     USER_PRIV_GUEST
  91.     USER_PRIV_USER
  92.     USER_PRIV_ADMIN
  93. );
  94.  
  95. @EXPORT_OK = qw(
  96.     GetError
  97.     GetDomainController
  98.     GetAnyDomainController
  99.     UserCreate
  100.     UserDelete
  101.     UserGetAttributes
  102.     UserSetAttributes
  103.     UserChangePassword
  104.     UsersExist
  105.     GetUsers
  106.     GroupCreate
  107.     GroupDelete
  108.     GroupGetAttributes
  109.     GroupSetAttributes
  110.     GroupAddUsers
  111.     GroupDeleteUsers
  112.     GroupIsMember
  113.     GroupGetMembers
  114.     LocalGroupCreate
  115.     LocalGroupDelete
  116.     LocalGroupGetAttributes
  117.     LocalGroupSetAttributes
  118.     LocalGroupIsMember
  119.     LocalGroupGetMembers
  120.     LocalGroupGetMembersWithDomain
  121.     LocalGroupAddUsers
  122.     LocalGroupDeleteUsers
  123.     GetServers
  124.     GetTransports
  125.     LoggedOnUsers
  126.     GetAliasFromRID
  127.     GetUserGroupFromRID
  128.     GetServerDisks
  129. );
  130. $EXPORT_TAGS{ALL}= \@EXPORT_OK;
  131.  
  132. =head1 NAME
  133.  
  134. Win32::NetAdmin - manage network groups and users in perl
  135.  
  136. =head1 SYNOPSIS
  137.  
  138.     use Win32::NetAdmin;
  139.  
  140. =head1 DESCRIPTION
  141.  
  142. This module offers control over the administration of groups and users over a
  143. network.
  144.  
  145. =head1 FUNCTIONS
  146.  
  147. =head2 NOTE
  148.  
  149. All of the functions return false if they fail, unless otherwise noted.
  150. When a function fails call Win32::NetAdmin::GetError() rather than
  151. GetLastError() or $^E to retrieve the error code.
  152.  
  153. C<server> is optional for all the calls below. If not given the local machine is
  154. assumed.
  155.  
  156. =over 10
  157.  
  158. =item GetError()
  159.  
  160. Returns the error code of the last call to this module.
  161.  
  162. =item GetDomainController(server, domain, returnedName)
  163.  
  164. Returns the name of the domain controller for server.
  165.  
  166. =item GetAnyDomainController(server, domain, returnedName)
  167.  
  168. Returns the name of any domain controller for a domain that is directly trusted
  169. by the server.
  170.  
  171. =item UserCreate(server, userName, password, passwordAge, privilege, homeDir, comment, flags, scriptPath)
  172.  
  173. Creates a user on server with password, passwordAge, privilege, homeDir, comment,
  174. flags, and scriptPath.
  175.  
  176. =item UserDelete(server, user)
  177.  
  178. Deletes a user from server.
  179.  
  180. =item UserGetAttributes(server, userName, password, passwordAge, privilege, homeDir, comment, flags, scriptPath)
  181.  
  182. Gets password, passwordAge, privilege, homeDir, comment, flags, and scriptPath
  183. for user.
  184.  
  185. =item UserSetAttributes(server, userName, password, passwordAge, privilege, homeDir, comment, flags, scriptPath)
  186.  
  187. Sets password, passwordAge, privilege, homeDir, comment, flags, and scriptPath
  188. for user.
  189.  
  190. =item UserChangePassword(domainname, username, oldpassword, newpassword)
  191.  
  192. Changes a users password. Can be run under any account.
  193.  
  194. =item UsersExist(server, userName)
  195.  
  196. Checks if a user exists.
  197.  
  198. =item GetUsers(server, filter, userRef)
  199.  
  200. Fills userRef with user names if it is an array reference and with the user
  201. names and the full names if it is a hash reference.
  202.  
  203. =item GroupCreate(server, group, comment)
  204.  
  205. Creates a group.
  206.  
  207. =item GroupDelete(server, group)
  208.  
  209. Deletes a group.
  210.  
  211. =item GroupGetAttributes(server, groupName, comment)
  212.  
  213. Gets the comment.
  214.  
  215. =item GroupSetAttributes(server, groupName, comment)
  216.  
  217. Sets the comment.
  218.  
  219. =item GroupAddUsers(server, groupName, users)
  220.  
  221. Adds a user to a group.
  222.  
  223. =item GroupDeleteUsers(server, groupName, users)
  224.  
  225. Deletes a users from a group.
  226.  
  227. =item GroupIsMember(server, groupName, user)
  228.  
  229. Returns TRUE if user is a member of groupName.
  230.  
  231. =item GroupGetMembers(server, groupName, userArrayRef)
  232.  
  233. Fills userArrayRef with the members of groupName.
  234.  
  235. =item LocalGroupCreate(server, group, comment)
  236.  
  237. Creates a local group.
  238.  
  239. =item LocalGroupDelete(server, group)
  240.  
  241. Deletes a local group.
  242.  
  243. =item LocalGroupGetAttributes(server, groupName, comment)
  244.  
  245. Gets the comment.
  246.  
  247. =item LocalGroupSetAttributes(server, groupName, comment)
  248.  
  249. Sets the comment.
  250.  
  251. =item LocalGroupIsMember(server, groupName, user)
  252.  
  253. Returns TRUE if user is a member of groupName.
  254.  
  255. =item LocalGroupGetMembers(server, groupName, userArrayRef)
  256.  
  257. Fills userArrayRef with the members of groupName.
  258.  
  259. =item LocalGroupGetMembersWithDomain(server, groupName, userRef)
  260.  
  261. This function is similar LocalGroupGetMembers but accepts an array or
  262. a hash reference. Unlike LocalGroupGetMembers it returns each user name
  263. as C<DOMAIN\USERNAME>. If a hash reference is given, the function
  264. returns to each user or group name the type (group, user, alias etc.).
  265. The possible types are as follows:
  266.  
  267.   $SidTypeUser = 1;
  268.   $SidTypeGroup = 2;
  269.   $SidTypeDomain = 3;
  270.   $SidTypeAlias = 4;
  271.   $SidTypeWellKnownGroup = 5;
  272.   $SidTypeDeletedAccount = 6;
  273.   $SidTypeInvalid = 7;
  274.   $SidTypeUnknown = 8;
  275.  
  276. =item LocalGroupAddUsers(server, groupName, users)
  277.  
  278. Adds a user to a group.
  279.  
  280. =item LocalGroupDeleteUsers(server, groupName, users)
  281.  
  282. Deletes a users from a group.
  283.  
  284. =item GetServers(server, domain, flags, serverRef)
  285.  
  286. Gets an array of server names or an hash with the server names and the
  287. comments as seen in the Network Neighborhood or the server manager.
  288. For flags, see SV_TYPE_* constants.
  289.  
  290. =item GetTransports(server, transportRef)
  291.  
  292. Enumerates the network transports of a computer. If transportRef is an array
  293. reference, it is filled with the transport names. If transportRef is a hash
  294. reference then a hash of hashes is filled with the data for the transports.
  295.  
  296. =item LoggedOnUsers(server, userRef)
  297.  
  298. Gets an array or hash with the users logged on at the specified computer. If
  299. userRef is a hash reference, the value is a semikolon separated string of
  300. username, logon domain and logon server.
  301.  
  302. =item GetAliasFromRID(server, RID, returnedName)
  303.  
  304. =item GetUserGroupFromRID(server, RID, returnedName)
  305.  
  306. Retrieves the name of an alias (i.e local group) or a user group for a RID
  307. from the specified server. These functions can be used for example to get the
  308. account name for the administrator account if it is renamed or localized.
  309.  
  310. Possible values for C<RID>:
  311.  
  312.   DOMAIN_ALIAS_RID_ACCOUNT_OPS
  313.   DOMAIN_ALIAS_RID_ADMINS
  314.   DOMAIN_ALIAS_RID_BACKUP_OPS
  315.   DOMAIN_ALIAS_RID_GUESTS
  316.   DOMAIN_ALIAS_RID_POWER_USERS
  317.   DOMAIN_ALIAS_RID_PRINT_OPS
  318.   DOMAIN_ALIAS_RID_REPLICATOR
  319.   DOMAIN_ALIAS_RID_SYSTEM_OPS
  320.   DOMAIN_ALIAS_RID_USERS
  321.   DOMAIN_GROUP_RID_ADMINS
  322.   DOMAIN_GROUP_RID_GUESTS
  323.   DOMAIN_GROUP_RID_USERS
  324.   DOMAIN_USER_RID_ADMIN
  325.   DOMAIN_USER_RID_GUEST
  326.  
  327. =item GetServerDisks(server, arrayRef)
  328.  
  329. Returns an array with the disk drives of the specified server. The array
  330. contains two-character strings (drive letter followed by a colon).
  331.  
  332. =back
  333.  
  334. =head1 EXAMPLE
  335.  
  336.     # Simple script using Win32::NetAdmin to set the login script for
  337.     # all members of the NT group "Domain Users".  Only works if you
  338.     # run it on the PDC. (From Robert Spier <rspier@seas.upenn.edu>)
  339.     #
  340.     # FILTER_TEMP_DUPLICATE_ACCOUNTS
  341.     #    Enumerates local user account data on a domain controller.
  342.     #
  343.     # FILTER_NORMAL_ACCOUNT
  344.     #    Enumerates global user account data on a computer.
  345.     #
  346.     # FILTER_INTERDOMAIN_TRUST_ACCOUNT
  347.     #    Enumerates domain trust account data on a domain controller.
  348.     #
  349.     # FILTER_WORKSTATION_TRUST_ACCOUNT
  350.     #    Enumerates workstation or member server account data on a domain
  351.     #    controller.
  352.     #
  353.     # FILTER_SERVER_TRUST_ACCOUNT
  354.     #    Enumerates domain controller account data on a domain controller.
  355.  
  356.  
  357.     use Win32::NetAdmin qw(GetUsers GroupIsMember
  358.                UserGetAttributes UserSetAttributes);
  359.  
  360.     my %hash;
  361.     GetUsers("", FILTER_NORMAL_ACCOUNT , \%hash)
  362.     or die "GetUsers() failed: $^E";
  363.  
  364.     foreach (keys %hash) {
  365.     my ($password, $passwordAge, $privilege,
  366.         $homeDir, $comment, $flags, $scriptPath);
  367.     if (GroupIsMember("", "Domain Users", $_)) {
  368.         print "Updating $_ ($hash{$_})\n";
  369.         UserGetAttributes("", $_, $password, $passwordAge, $privilege,
  370.                   $homeDir, $comment, $flags, $scriptPath)
  371.         or die "UserGetAttributes() failed: $^E";
  372.         $scriptPath = "dnx_login.bat"; # this is the new login script
  373.         UserSetAttributes("", $_, $password, $passwordAge, $privilege,
  374.                   $homeDir, $comment, $flags, $scriptPath)
  375.         or die "UserSetAttributes() failed: $^E";
  376.     }
  377.     }
  378.  
  379. =cut
  380.  
  381. sub AUTOLOAD {
  382.     my($constname);
  383.     ($constname = $AUTOLOAD) =~ s/.*:://;
  384.     #reset $! to zero to reset any current errors.
  385.     local $! = 0;
  386.     my $val = constant($constname);
  387.     if ($! != 0) {
  388.     if ($! =~ /Invalid/) {
  389.         $AutoLoader::AUTOLOAD = $AUTOLOAD;
  390.         goto &AutoLoader::AUTOLOAD;
  391.     }
  392.     else {
  393.         ($pack,$file,$line) = caller;
  394.         die "Your vendor has not defined Win32::NetAdmin macro $constname, used in $file at line $line.";
  395.     }
  396.     }
  397.     eval "sub $AUTOLOAD { $val }";
  398.     goto &$AUTOLOAD;
  399. }
  400.  
  401. $SidTypeUser = 1;
  402. $SidTypeGroup = 2;
  403. $SidTypeDomain = 3;
  404. $SidTypeAlias = 4;
  405. $SidTypeWellKnownGroup = 5;
  406. $SidTypeDeletedAccount = 6;
  407. $SidTypeInvalid = 7;
  408. $SidTypeUnknown = 8;
  409.  
  410. sub GetError() {
  411.     our $__lastError;
  412.     $__lastError;
  413. }
  414.  
  415. bootstrap Win32::NetAdmin;
  416.  
  417. 1;
  418. __END__
  419.  
  420.