diff options
author | Norbert Preining <preining@logic.at> | 2010-05-12 16:51:27 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2010-05-12 16:51:27 +0000 |
commit | b645030efc22e13c2498a1522083634ab91b2de1 (patch) | |
tree | c75c7a71998200d419af56eb755dac2f5115b585 /Master/tlpkg/tlperl/lib/Win32/NetResource.pm | |
parent | 44ccd4efc5352f9eb1099ba357708e7b5ff03b83 (diff) |
move tlperl to tlperl.old
git-svn-id: svn://tug.org/texlive/trunk@18209 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Win32/NetResource.pm')
-rw-r--r-- | Master/tlpkg/tlperl/lib/Win32/NetResource.pm | 456 |
1 files changed, 0 insertions, 456 deletions
diff --git a/Master/tlpkg/tlperl/lib/Win32/NetResource.pm b/Master/tlpkg/tlperl/lib/Win32/NetResource.pm deleted file mode 100644 index 04ac87acabd..00000000000 --- a/Master/tlpkg/tlperl/lib/Win32/NetResource.pm +++ /dev/null @@ -1,456 +0,0 @@ -package Win32::NetResource; - -require Exporter; -require DynaLoader; -require AutoLoader; - -$VERSION = '0.053'; - -@ISA = qw(Exporter DynaLoader); -# Items to export into callers namespace by default. Note: do not export -# names by default without a very good reason. Use EXPORT_OK instead. -# Do not simply export all your public functions/methods/constants. -@EXPORT = qw( - RESOURCEDISPLAYTYPE_DOMAIN - RESOURCEDISPLAYTYPE_FILE - RESOURCEDISPLAYTYPE_GENERIC - RESOURCEDISPLAYTYPE_GROUP - RESOURCEDISPLAYTYPE_SERVER - RESOURCEDISPLAYTYPE_SHARE - RESOURCEDISPLAYTYPE_TREE - RESOURCETYPE_ANY - RESOURCETYPE_DISK - RESOURCETYPE_PRINT - RESOURCETYPE_UNKNOWN - RESOURCEUSAGE_CONNECTABLE - RESOURCEUSAGE_CONTAINER - RESOURCEUSAGE_RESERVED - RESOURCE_CONNECTED - RESOURCE_GLOBALNET - RESOURCE_REMEMBERED - STYPE_DISKTREE - STYPE_PRINTQ - STYPE_DEVICE - STYPE_IPC - STYPE_SPECIAL - SHARE_NETNAME_PARMNUM - SHARE_TYPE_PARMNUM - SHARE_REMARK_PARMNUM - SHARE_PERMISSIONS_PARMNUM - SHARE_MAX_USES_PARMNUM - SHARE_CURRENT_USES_PARMNUM - SHARE_PATH_PARMNUM - SHARE_PASSWD_PARMNUM - SHARE_FILE_SD_PARMNUM -); - -@EXPORT_OK = qw( - GetSharedResources - AddConnection - CancelConnection - WNetGetLastError - GetError - GetUNCName - NetShareAdd - NetShareCheck - NetShareDel - NetShareGetInfo - NetShareSetInfo -); - -=head1 NAME - -Win32::NetResource - manage network resources in perl - -=head1 SYNOPSIS - - use Win32::NetResource; - - $ShareInfo = { - 'path' => "C:\\MyShareDir", - 'netname' => "MyShare", - 'remark' => "It is good to share", - 'passwd' => "", - 'current-users' =>0, - 'permissions' => 0, - 'maxusers' => -1, - 'type' => 0, - }; - - Win32::NetResource::NetShareAdd( $ShareInfo,$parm ) - or die "unable to add share"; - - -=head1 DESCRIPTION - -This module offers control over the network resources of Win32.Disks, -printers etc can be shared over a network. - -=head1 DATA TYPES - -There are two main data types required to control network resources. -In Perl these are represented by hash types. - -=over 4 - -=item %NETRESOURCE - - KEY VALUE - - 'Scope' => Scope of an Enumeration - RESOURCE_CONNECTED, - RESOURCE_GLOBALNET, - RESOURCE_REMEMBERED. - - 'Type' => The type of resource to Enum - RESOURCETYPE_ANY All resources - RESOURCETYPE_DISK Disk resources - RESOURCETYPE_PRINT Print resources - - 'DisplayType' => The way the resource should be displayed. - RESOURCEDISPLAYTYPE_DOMAIN - The object should be displayed as a domain. - RESOURCEDISPLAYTYPE_GENERIC - The method used to display the object does not matter. - RESOURCEDISPLAYTYPE_SERVER - The object should be displayed as a server. - RESOURCEDISPLAYTYPE_SHARE - The object should be displayed as a sharepoint. - - 'Usage' => Specifies the Resources usage: - RESOURCEUSAGE_CONNECTABLE - RESOURCEUSAGE_CONTAINER. - - 'LocalName' => Name of the local device the resource is - connected to. - - 'RemoteName' => The network name of the resource. - - 'Comment' => A string comment. - - 'Provider' => Name of the provider of the resource. - -=back - -=item %SHARE_INFO - -This hash represents the SHARE_INFO_502 struct. - -=over 4 - - KEY VALUE - 'netname' => Name of the share. - 'type' => type of share. - 'remark' => A string comment. - 'permissions' => Permissions value - 'maxusers' => the max # of users. - 'current-users' => the current # of users. - 'path' => The path of the share. - 'passwd' => A password if one is req'd - -=back - -=head1 FUNCTIONS - -=head2 NOTE - -All of the functions return false if they fail. - -=over 4 - -=item GetSharedResources(\@Resources,dwType,\%NetResource = NULL) - -Creates a list in @Resources of %NETRESOURCE hash references. - -The return value indicates whether there was an error in accessing -any of the shared resources. All the shared resources that were -encountered (until the point of an error, if any) are pushed into -@Resources as references to %NETRESOURCE hashes. See example -below. The \%NetResource argument is optional. If it is not supplied, -the root (that is, the topmost container) of the network is assumed, -and all network resources available from the toplevel container will -be enumerated. - -=item AddConnection(\%NETRESOURCE,$Password,$UserName,$Connection) - -Makes a connection to a network resource specified by %NETRESOURCE - -=item CancelConnection($Name,$Connection,$Force) - -Cancels a connection to a network resource connected to local device -$name.$Connection is either 1 - persistent connection or 0, non-persistent. - -=item WNetGetLastError($ErrorCode,$Description,$Name) - -Gets the Extended Network Error. - -=item GetError( $ErrorCode ) - -Gets the last Error for a Win32::NetResource call. - -=item GetUNCName( $UNCName, $LocalPath ); - -Returns the UNC name of the disk share connected to $LocalPath in $UNCName. -$LocalPath should be a drive based path. e.g. "C:\\share\\subdir" - -=back - -=head2 NOTE - -$servername is optional for all the calls below. (if not given the -local machine is assumed.) - -=over 4 - -=item NetShareAdd(\%SHARE,$parm_err,$servername = NULL ) - -Add a share for sharing. - -=item NetShareCheck($device,$type,$servername = NULL ) - -Check if a directory or a device is available for connection from the -network through a share. This includes all directories that are -reachable through a shared directory or device, meaning that if C:\foo -is shared, C:\foo\bar is also available for sharing. This means that -this function is pretty useless, given that by default every disk -volume has an administrative share such as "C$" associated with its -root directory. - -$device must be a drive name, directory, or a device. For example, -"C:", "C:\dir", "LPT1", "D$", "IPC$" are all valid as the $device -argument. $type is an output argument that will be set to one of -the following constants that describe the type of share: - - STYPE_DISKTREE Disk drive - STYPE_PRINTQ Print queue - STYPE_DEVICE Communication device - STYPE_IPC Interprocess communication (IPC) - STYPE_SPECIAL Special share reserved for interprocess - communication (IPC$) or remote administration - of the server (ADMIN$). Can also refer to - administrative shares such as C$, D$, etc. - -=item NetShareDel( $netname, $servername = NULL ) - -Remove a share from a machines list of shares. - -=item NetShareGetInfo( $netname, \%SHARE,$servername=NULL ) - -Get the %SHARE_INFO information about the share $netname on the -server $servername. - -=item NetShareSetInfo( $netname,\%SHARE,$parm_err,$servername=NULL) - -Set the information for share $netname. - -=back - -=head1 EXAMPLE - -=over 4 - -=item Enumerating all resources on the network - - # - # This example displays all the share points in the entire - # visible part of the network. - # - - use strict; - use Win32::NetResource qw(:DEFAULT GetSharedResources GetError); - my $resources = []; - unless(GetSharedResources($resources, RESOURCETYPE_ANY)) { - my $err; - GetError($err); - warn Win32::FormatMessage($err); - } - - foreach my $href (@$resources) { - next if ($$href{DisplayType} != RESOURCEDISPLAYTYPE_SHARE); - print "-----\n"; - foreach( keys %$href){ - print "$_: $href->{$_}\n"; - } - } - -=item Enumerating all resources on a particular host - - # - # This example displays all the share points exported by the local - # host. - # - - use strict; - use Win32::NetResource qw(:DEFAULT GetSharedResources GetError); - if (GetSharedResources(my $resources, RESOURCETYPE_ANY, - { RemoteName => "\\\\" . Win32::NodeName() })) - { - foreach my $href (@$resources) { - print "-----\n"; - foreach(keys %$href) { print "$_: $href->{$_}\n"; } - } - } - -=back - -=head1 AUTHOR - -Jesse Dougherty for Hip Communications. - -Additional general cleanups and bug fixes by Gurusamy Sarathy <gsar@activestate.com>. - -=cut - -sub AUTOLOAD { - # This AUTOLOAD is used to 'autoload' constants from the constant() - # XS function. If a constant is not found then control is passed - # to the AUTOLOAD in AutoLoader. - - my($constname); - ($constname = $AUTOLOAD) =~ s/.*:://; - #reset $! to zero to reset any current errors. - local $! = 0; - my $val = constant($constname, @_ ? $_[0] : 0); - if ($! != 0) { - if ($! =~ /Invalid/) { - $AutoLoader::AUTOLOAD = $AUTOLOAD; - goto &AutoLoader::AUTOLOAD; - } - else { - ($pack,$file,$line) = caller; - die "Your vendor has not defined Win32::NetResource macro $constname, used at $file line $line. -"; - } - } - eval "sub $AUTOLOAD { $val }"; - goto &$AUTOLOAD; -} - -sub AddConnection -{ - my $h = $_[0]; - die "AddConnection: HASH reference required" unless ref($h) eq "HASH"; - - # - # The last four items *must* not be deallocated until the - # _AddConnection() completes (since the packed structure is - # pointing into these values. - # - my $netres = pack( 'i4 p4', $h->{Scope}, - $h->{Type}, - $h->{DisplayType}, - $h->{Usage}, - $h->{LocalName}, - $h->{RemoteName}, - $h->{Comment}, - $h->{Provider}); - _AddConnection($netres,$_[1],$_[2],$_[3]); -} - -#use Data::Dumper; - -sub GetSharedResources -{ - die "GetSharedResources: ARRAY reference required" - if defined $_[0] and ref($_[0]) ne "ARRAY"; - - my $aref = []; - - # Get the shared resources. - - my $ret; - - if (@_ > 2 and $_[2]) { - my $netres = pack('i4 p4', @{$_[2]}{qw(Scope - Type - DisplayType - Usage - LocalName - RemoteName - Comment - Provider)}); - $ret = _GetSharedResources( $aref , $_[1], $netres ); - } - else { - $ret = _GetSharedResources( $aref , $_[1] ); - } - - # build the array of hashes in $_[0] -# print Dumper($aref); - foreach ( @$aref ) { - my %hash; - @hash{'Scope', - 'Type', - 'DisplayType', - 'Usage', - 'LocalName', - 'RemoteName', - 'Comment', - 'Provider'} = split /\001/, $_; - push @{$_[0]}, \%hash; - } - - $ret; -} - -sub NetShareAdd -{ - my $shareinfo = _hash2SHARE( $_[0] ); - _NetShareAdd($shareinfo,$_[1], $_[2] || ""); -} - -sub NetShareGetInfo -{ - my ($netinfo,$val); - $val = _NetShareGetInfo( $_[0],$netinfo,$_[2] || ""); - %{$_[1]} = %{_SHARE2hash( $netinfo )}; - $val; -} - -sub NetShareSetInfo -{ - my $shareinfo = _hash2SHARE( $_[1] ); - _NetShareSetInfo( $_[0],$shareinfo,$_[2],$_[3] || ""); -} - - -# These are private functions to work with the ShareInfo structure. -# please note that the implementation of these calls requires the -# SHARE_INFO_502 level of information. - -sub _SHARE2hash -{ - my %hash = (); - @hash{'type', - 'permissions', - 'maxusers', - 'current-users', - 'remark', - 'netname', - 'path', - 'passwd'} = unpack('i4 A257 A81 A257 A257',$_[0]); - - return \%hash; -} - -sub _hash2SHARE -{ - my $h = $_[0]; - die "Argument must be a HASH reference" unless ref($h) eq "HASH"; - - return pack 'i4 a257 a81 a257 a257', - @$h{'type', - 'permissions', - 'maxusers', - 'current-users', - 'remark', - 'netname', - 'path', - 'passwd'}; -} - - -bootstrap Win32::NetResource; - -1; -__END__ |