apache
Sponsored Links
Sponsored Links
Secleted [ 0 ] software to compare
Results 1 - 15 of about 1019
dotDefender Monitor for Apache 3.84
dotDefender Monitor for Apache is the only way to know who is attacking your web site in real time. Residing on the server as webserver plug-in, dotDefender can be installed and implemented in minutes without influence on traffic or network archite more>> <<less
Download (17.17MB)
Added: 2009-04-10 License: Freeware Price:
196 downloads
Apache::SiteControl 1.01
Apache::SiteControl is a Perl web site authentication/authorization system. more>>
Apache::SiteControl is a Perl web site authentication/authorization system.
SYNOPSIS
See samples/site for complete example. Note, this module is intended for mod_perl. See Apache2::SiteControl for mod_perl2.
Apache::SiteControl is a set of perl object-oriented classes that implement a fine-grained security control system for a web-based application. The intent is to provide a clear, easy-to-integrate system that does not require the policies to be written into your application components. It attempts to separate the concerns of how to show and manipulate data from the concerns of who is allowed to view and manipulate data and why.
For example, say your web application is written in HTML::Mason. Your individual "screens" are composed of Mason modules, and you would like to keep those as clean as possible, but decisions have to be made about what to allow as the component is processed. SiteControl attempts to make that as easy as possible.
DEVELOPERS VIEWPOINT - EXAMPLE
In this document we use HTML::Mason to create examples of how to use the control mechanisms, but any mod_perl based system should be supportable.
A good mason component tries to do most of the perl processing in a separate block, so that simple substitutions can be made in HTML in the rest of the page. This makes it much easier for web developers and perl developers to co-exist on a project.
The SiteControl system tries to make it possible to continue to follow this model. You obtain a user object and permission manager from the SiteControl system. These are intended to be opaque data types to the page designer, and are defined elsewhere (see USERS). The actual web page component should carry these objects around without implementing anything in the way of policy.
<<lessSYNOPSIS
See samples/site for complete example. Note, this module is intended for mod_perl. See Apache2::SiteControl for mod_perl2.
Apache::SiteControl is a set of perl object-oriented classes that implement a fine-grained security control system for a web-based application. The intent is to provide a clear, easy-to-integrate system that does not require the policies to be written into your application components. It attempts to separate the concerns of how to show and manipulate data from the concerns of who is allowed to view and manipulate data and why.
For example, say your web application is written in HTML::Mason. Your individual "screens" are composed of Mason modules, and you would like to keep those as clean as possible, but decisions have to be made about what to allow as the component is processed. SiteControl attempts to make that as easy as possible.
DEVELOPERS VIEWPOINT - EXAMPLE
In this document we use HTML::Mason to create examples of how to use the control mechanisms, but any mod_perl based system should be supportable.
A good mason component tries to do most of the perl processing in a separate block, so that simple substitutions can be made in HTML in the rest of the page. This makes it much easier for web developers and perl developers to co-exist on a project.
The SiteControl system tries to make it possible to continue to follow this model. You obtain a user object and permission manager from the SiteControl system. These are intended to be opaque data types to the page designer, and are defined elsewhere (see USERS). The actual web page component should carry these objects around without implementing anything in the way of policy.
Download (0.020MB)
Added: 2007-08-14 License: Perl Artistic License Price:
802 downloads
Apache Tomcat 6.0.14
Apache Tomcat is a Java Servlet and JSP Container. more>>
Jakarta Projects goal is to provide commercial-quality server solutions based on the Java Platform that are developed in an open and cooperative fashion.
Tomcat 3.x is an implementation of the Java Servlet 2.2 and JavaServer Pages 1.1 Specifications.
Tomcat 4.x is an implementation of the Java Servlet 2.3 and JavaServer Pages 1.2 Specifications, and is a re-implementation of the Tomcat servlet engine from the ground up.
<<lessTomcat 3.x is an implementation of the Java Servlet 2.2 and JavaServer Pages 1.1 Specifications.
Tomcat 4.x is an implementation of the Java Servlet 2.3 and JavaServer Pages 1.2 Specifications, and is a re-implementation of the Tomcat servlet engine from the ground up.
Download (3.1MB)
Added: 2007-08-10 License: The Apache License Price:
5951 downloads
Apache::WebSNMP 0.11
Apache::WebSNMP is a Perl module that allows for SNMP calls to be embedded in HTML. more>>
Apache::WebSNMP is a Perl module that allows for SNMP calls to be embedded in HTML.
SYNOPSIS
< html >
< body >
< snmp >
host=zoom.google.org
community=public
connect
interface=ifDescr.2
mac=ifPhysAddress.2
query
< /snmp >
The interface < b >descriptor< /b > for the ethernet card is < snmp > print(interface) < /snmp >
and its mac address is < snmp > print(mac) < /snmp >
< /body >
< /html >
The WebSNMP module allows one to embed SNMP commands directly into HTML code.
REQUIRES
This module requires the perl SNMP module, available at the CPAN site.
USAGE
The module allows for three different kinds of statements, surrounded by < snmp > and < /snmp > html tags. The three types of statements consist of configurations, variable assignments, and commands. A brief description of each type of statement follows:
Configuration:
The configuration statements allow the user the set which host to poll for SNMP information, as well as the SNMP community that the get statements will draw from. This essentially takes the form of assigning values to the reserved variables host and community. All variables are assigned with the following syntax: varible_name=value
Note: there must not be any intervening whitespace between the = and the name and value. Thus to set the SNMP host to machine.domain.net, we would issue the configuration statement:
< snmp >host=machine.domain.net< /snmp >
If not specified, the default host is localhost, and the default community is public.
<<lessSYNOPSIS
< html >
< body >
< snmp >
host=zoom.google.org
community=public
connect
interface=ifDescr.2
mac=ifPhysAddress.2
query
< /snmp >
The interface < b >descriptor< /b > for the ethernet card is < snmp > print(interface) < /snmp >
and its mac address is < snmp > print(mac) < /snmp >
< /body >
< /html >
The WebSNMP module allows one to embed SNMP commands directly into HTML code.
REQUIRES
This module requires the perl SNMP module, available at the CPAN site.
USAGE
The module allows for three different kinds of statements, surrounded by < snmp > and < /snmp > html tags. The three types of statements consist of configurations, variable assignments, and commands. A brief description of each type of statement follows:
Configuration:
The configuration statements allow the user the set which host to poll for SNMP information, as well as the SNMP community that the get statements will draw from. This essentially takes the form of assigning values to the reserved variables host and community. All variables are assigned with the following syntax: varible_name=value
Note: there must not be any intervening whitespace between the = and the name and value. Thus to set the SNMP host to machine.domain.net, we would issue the configuration statement:
< snmp >host=machine.domain.net< /snmp >
If not specified, the default host is localhost, and the default community is public.
Download (0.006MB)
Added: 2007-08-01 License: Perl Artistic License Price:
814 downloads
Apache::ReverseProxy 0.07
Apache::ReverseProxy is an Apache mod_perl reverse proxy. more>>
Apache::ReverseProxy is an Apache mod_perl reverse proxy.
SYNOPSIS
# In Apache config file
< Location / >
SetHandler perl-script
PerlHandler Apache::ReverseProxy
PerlSetVar ReverseProxyConfig /usr/local/apache/conf/rproxy.conf
< /Location >
# In rproxy.conf / http://www.cpan.org/
This is a reverse proxy module for Apache with mod_perl. It is intended to replace Apache::ProxyPass. Given a list of URI mappings, this module will translate an incoming URI, retrieve the contents for the translated URI, and return the contents to the original requestor. This module allows you to specify exact matching (instead of regular expression matching) and handles query string translations.
CONFIGURATION
You will need to set the ReverseProxyConfig perl variable in Apache to the path of the reverse proxy mapping file. For example:
< Location / >
SetHandler perl-script
PerlHandler Apache::ReverseProxy
PerlSetVar ReverseProxyConfig /usr/local/apache/conf/rproxy.conf
# Optional configuration items:
#PerlSetVar ReverseProxyChain http://proxy.mycompany.com:8888/
#PerlSetVar ReverseProxyNoChain mycompany.com
< /Location >
ReverseProxyChain specifies a proxy server to use. This is sometimes called proxy chaining when one proxy server uses another proxy server. The ReverseProxyNoChain directive can specify a domain to not use proxy chaining on.
Reverse proxy configuration files have three fields, each separated by white space. The first field is the uri to look for, the second field is the replacement uri, and the third field is optional and allows you to specify comma separated options for the mapping. The only option that is currently supported is the exact parameter, which will make the reverse proxy use exact matching for the first parameter instead of using regular expressions. This feature is convenient when the first parameter contains characters that may need to be escaped or quotemetaed. Exact options are evaluated first. If there isnt an exact match, regular expression matches are performed. Configuration files may contain comments, which start with a pound sign. For example:
/news/ http://www.news.com/
/ http://www.perl.com/
/stats http://localhost/stats exact
# /stats maps exactly to http://localhost/stats
# /stats/b maps to http://www.perl.com/stats/b
/french/news http://www.news.com/?language=french
# /french/news/index -> http://www.news.com/index?language=french
# /french/news/index?a=b -> http://www.news.com/index?language=french&a=b
<<lessSYNOPSIS
# In Apache config file
< Location / >
SetHandler perl-script
PerlHandler Apache::ReverseProxy
PerlSetVar ReverseProxyConfig /usr/local/apache/conf/rproxy.conf
< /Location >
# In rproxy.conf / http://www.cpan.org/
This is a reverse proxy module for Apache with mod_perl. It is intended to replace Apache::ProxyPass. Given a list of URI mappings, this module will translate an incoming URI, retrieve the contents for the translated URI, and return the contents to the original requestor. This module allows you to specify exact matching (instead of regular expression matching) and handles query string translations.
CONFIGURATION
You will need to set the ReverseProxyConfig perl variable in Apache to the path of the reverse proxy mapping file. For example:
< Location / >
SetHandler perl-script
PerlHandler Apache::ReverseProxy
PerlSetVar ReverseProxyConfig /usr/local/apache/conf/rproxy.conf
# Optional configuration items:
#PerlSetVar ReverseProxyChain http://proxy.mycompany.com:8888/
#PerlSetVar ReverseProxyNoChain mycompany.com
< /Location >
ReverseProxyChain specifies a proxy server to use. This is sometimes called proxy chaining when one proxy server uses another proxy server. The ReverseProxyNoChain directive can specify a domain to not use proxy chaining on.
Reverse proxy configuration files have three fields, each separated by white space. The first field is the uri to look for, the second field is the replacement uri, and the third field is optional and allows you to specify comma separated options for the mapping. The only option that is currently supported is the exact parameter, which will make the reverse proxy use exact matching for the first parameter instead of using regular expressions. This feature is convenient when the first parameter contains characters that may need to be escaped or quotemetaed. Exact options are evaluated first. If there isnt an exact match, regular expression matches are performed. Configuration files may contain comments, which start with a pound sign. For example:
/news/ http://www.news.com/
/ http://www.perl.com/
/stats http://localhost/stats exact
# /stats maps exactly to http://localhost/stats
# /stats/b maps to http://www.perl.com/stats/b
/french/news http://www.news.com/?language=french
# /french/news/index -> http://www.news.com/index?language=french
# /french/news/index?a=b -> http://www.news.com/index?language=french&a=b
Download (0.006MB)
Added: 2007-07-30 License: Perl Artistic License Price:
816 downloads
Apache::ProxyConf 1.0
Apache::ProxyConf is a Perl module that can generate proxy configuration for browsers. more>>
Apache::ProxyConf is a Perl module that can generate proxy configuration for browsers.
SYNOPSIS
# In httpd.conf:
< Location / >
SetHandler perl-script
PerlHandler Apache::ProxyConf
PerlSetVar ProxyConfConfig "/some/location/proxyconf.ini"
< /Location >
The Apache::ProxyConf is used to configure the proxy settings in browsers automatically. The modules returns a script that conforms to the Navigator Proxy Auto-Config File Format. The module is suitable for large scale installations that have multiple (cascading) proxies. It can be used to return the closest proxy based on the network topology. Failover and load distribution is also provided.
Browser configuration
The (virtual) webserver must be entered in the Autoconfigure URL of the browser to make use of the ProxyConf script.
http://proxyconf.some.domain/
In IE the URL must be specified in the Address field, just below the Use automatic configuration script tickbox.
THE CONFIGURATION FILE
The ProxyConf module first reads a .ini-style configuration file to determine the proxy settings of the network. The configuration file contains three sections: proxy, noproxy and https.
The proxy section
The sections proxy and https have an identical format. They contain lines of the form subnet=proxyip:port.
Single proxy
[proxy]
172.16.32.0/20=172.16.32.10:3128
The subnet 172.16.32.0/20 has a single proxy defined. The proxy server is 172.16.32.10 and it listens on port 3128.
Multiple proxies
[proxy]
172.16.0.0/20=172.16.0.10:3128,172.16.0.20:3128
Multiple proxy servers are defined in a comma separated list. In this example clients in the 172.16.0.0/20 subnet use 172.16.0.10 as their primary proxy server. When this server becomes unavailable, the clients will move over to 172.16.0.20 for their proxy requests.
Multiple proxies with load distribution
[proxy]
172.16.0.0/20=(172.16.0.10:3128,172.16.0.20:3128)
When proxy servers are placed between brackets, the load is distribution amongst the proxies. Some clients will have the first proxy as primary and some clients will have the second proxy as primary. The other proxy is used as a backup. The order in which the proxies are tried depends on the IP address of the client. The script is deterministic, so for a given IP address the priority list is always the same.
To determine the proxy list for a given IP address multiple rules may be applied. Subnets are tried from the highest to the lowest mask. The module puts all proxies that are found in a list.
The noproxy section
The noproxy section contains hosts that should be contacted by the clients directly. Noticeably, web servers that use NTLM authentication will not work when clients connect to them via a proxy server. The syntax for specifying noproxy hosts is subnet=fqhn1,fqhn2,... Alternatively, the multiline syntax can be used, as shown in this example.
[noproxy]
0.0.0.0/0=<<less
SYNOPSIS
# In httpd.conf:
< Location / >
SetHandler perl-script
PerlHandler Apache::ProxyConf
PerlSetVar ProxyConfConfig "/some/location/proxyconf.ini"
< /Location >
The Apache::ProxyConf is used to configure the proxy settings in browsers automatically. The modules returns a script that conforms to the Navigator Proxy Auto-Config File Format. The module is suitable for large scale installations that have multiple (cascading) proxies. It can be used to return the closest proxy based on the network topology. Failover and load distribution is also provided.
Browser configuration
The (virtual) webserver must be entered in the Autoconfigure URL of the browser to make use of the ProxyConf script.
http://proxyconf.some.domain/
In IE the URL must be specified in the Address field, just below the Use automatic configuration script tickbox.
THE CONFIGURATION FILE
The ProxyConf module first reads a .ini-style configuration file to determine the proxy settings of the network. The configuration file contains three sections: proxy, noproxy and https.
The proxy section
The sections proxy and https have an identical format. They contain lines of the form subnet=proxyip:port.
Single proxy
[proxy]
172.16.32.0/20=172.16.32.10:3128
The subnet 172.16.32.0/20 has a single proxy defined. The proxy server is 172.16.32.10 and it listens on port 3128.
Multiple proxies
[proxy]
172.16.0.0/20=172.16.0.10:3128,172.16.0.20:3128
Multiple proxy servers are defined in a comma separated list. In this example clients in the 172.16.0.0/20 subnet use 172.16.0.10 as their primary proxy server. When this server becomes unavailable, the clients will move over to 172.16.0.20 for their proxy requests.
Multiple proxies with load distribution
[proxy]
172.16.0.0/20=(172.16.0.10:3128,172.16.0.20:3128)
When proxy servers are placed between brackets, the load is distribution amongst the proxies. Some clients will have the first proxy as primary and some clients will have the second proxy as primary. The other proxy is used as a backup. The order in which the proxies are tried depends on the IP address of the client. The script is deterministic, so for a given IP address the priority list is always the same.
To determine the proxy list for a given IP address multiple rules may be applied. Subnets are tried from the highest to the lowest mask. The module puts all proxies that are found in a list.
The noproxy section
The noproxy section contains hosts that should be contacted by the clients directly. Noticeably, web servers that use NTLM authentication will not work when clients connect to them via a proxy server. The syntax for specifying noproxy hosts is subnet=fqhn1,fqhn2,... Alternatively, the multiline syntax can be used, as shown in this example.
[noproxy]
0.0.0.0/0=<<less
Download (0.007MB)
Added: 2007-07-30 License: Perl Artistic License Price:
816 downloads
Apache::TestUtil 1.29
Apache::TestUtil Perl module contains utility functions for writing tests. more>>
Apache::TestUtil Perl module contains utility functions for writing tests.
SYNOPSIS
use Apache::Test;
use Apache::TestUtil;
ok t_cmp("foo", "foo", "sanity check");
t_write_file("filename", @content);
my $fh = t_open_file($filename);
t_mkdir("/foo/bar");
t_rmtree("/foo/bar");
t_is_equal($a, $b);
Apache::TestUtil automatically exports a number of functions useful in writing tests.
All the files and directories created using the functions from this package will be automatically destroyed at the end of the program execution (via END block). You should not use these functions other than from within tests which should cleanup all the created directories and files at the end of the test.
FUNCTIONS
t_cmp()
t_cmp($received, $expected, $comment);
t_cmp() prints the values of $comment, $expected and $received. e.g.:
t_cmp(1, 1, "1 == 1?");
prints:
# testing : 1 == 1?
# expected: 1
# received: 1
then it returns the result of comparison of the $expected and the $received variables. Usually, the return value of this function is fed directly to the ok() function, like this:
ok t_cmp(1, 1, "1 == 1?");
the third argument ($comment) is optional, mostly useful for telling what the comparison is trying to do.
It is valid to use undef as an expected value. Therefore:
my $foo;
t_cmp(undef, $foo, "undef == undef?");
will return a true value.
You can compare any two data-structures with t_cmp(). Just make sure that if you pass non-scalars, you have to pass their references. The datastructures can be deeply nested. For example you can compare:
t_cmp({1 => [2..3,{5..8}], 4 => [5..6]},
{1 => [2..3,{5..8}], 4 => [5..6]},
"hash of array of hashes");
You can also compare the second argument against the first as a regex. Use the qr// function in the second argument. For example:
t_cmp("abcd", qr/^abc/, "regex compare");
will do:
"abcd" =~ /^abc/;
This function is exported by default.
t_filepath_cmp()
This function is used to compare two filepaths via t_cmp(). For non-Win32, it simply uses t_cmp() for the comparison, but for Win32, Win32::GetLongPathName() is invoked to convert the first two arguments to their DOS long pathname. This is useful when there is a possibility the two paths being compared are not both represented by their long or short pathname.
This function is exported by default.
t_debug()
t_debug("testing feature foo");
t_debug("test", [1..3], 5, {a=>[1..5]});
t_debug() prints out any datastructure while prepending # at the beginning of each line, to make the debug printouts comply with Test::Harnesss requirements. This function should be always used for debug prints, since if in the future the debug printing will change (e.g. redirected into a file) your tests wont need to be changed.
the special global variable $Apache::TestUtil::DEBUG_OUTPUT can be used to redirect the output from t_debug() and related calls such as t_write_file(). for example, from a server-side test you would probably need to redirect it to STDERR:
sub handler {
plan $r, tests => 1;
local $Apache::TestUtil::DEBUG_OUTPUT = *STDERR;
t_write_file(/tmp/foo, bar);
...
}
left to its own devices, t_debug() will collide with the standard HTTP protocol during server-side tests, resulting in a situation both confusing difficult to debug. but STDOUT is left as the default, since you probably dont want debug output under normal circumstances unless running under verbose mode.
This function is exported by default.
t_write_file()
t_write_file($filename, @lines);
t_write_file() creates a new file at $filename or overwrites the existing file with the content passed in @lines. If only the $filename is passed, an empty file will be created.
If parent directories of $filename dont exist they will be automagically created.
The generated file will be automatically deleted at the end of the programs execution.
This function is exported by default.
t_append_file()
t_append_file($filename, @lines);
t_append_file() is similar to t_write_file(), but it doesnt clobber existing files and appends @lines to the end of the file. If the file doesnt exist it will create it.
If parent directories of $filename dont exist they will be automagically created.
The generated file will be registered to be automatically deleted at the end of the programs execution, only if the file was created by t_append_file().
This function is exported by default.
t_write_shell_script()
Apache::TestUtil::t_write_shell_script($filename, @lines);
Similar to t_write_file() but creates a portable shell/batch script. The created filename is constructed from $filename and an appropriate extension automatically selected according to the platform the code is running under.
It returns the extension of the created file.
t_write_perl_script()
Apache::TestUtil::t_write_perl_script($filename, @lines);
Similar to t_write_file() but creates a executable Perl script with correctly set shebang line.
t_open_file()
my $fh = t_open_file($filename);
t_open_file() opens a file $filename for writing and returns the file handle to the opened file.
If parent directories of $filename dont exist they will be automagically created.
The generated file will be automatically deleted at the end of the programs execution.
This function is exported by default.
t_mkdir()
t_mkdir($dirname);
t_mkdir() creates a directory $dirname. The operation will fail if the parent directory doesnt exist.
If parent directories of $dirname dont exist they will be automagically created.
The generated directory will be automatically deleted at the end of the programs execution.
This function is exported by default.
t_rmtree()
t_rmtree(@dirs);
t_rmtree() deletes the whole directories trees passed in @dirs.
This function is exported by default.
t_chown()
Apache::TestUtil::t_chown($file);
Change ownership of $file to the tests User/Group. This function is noop on platforms where chown(2) is unsupported (e.g. Win32).
t_is_equal()
t_is_equal($a, $b);
t_is_equal() compares any two datastructures and returns 1 if they are exactly the same, otherwise 0. The datastructures can be nested hashes, arrays, scalars, undefs or a combination of any of these. See t_cmp() for an example.
If $b is a regex reference, the regex comparison $a =~ $b is performed. For example:
t_is_equal($server_version, qr{^Apache});
If comparing non-scalars make sure to pass the references to the datastructures.
This function is exported by default.
t_server_log_error_is_expected()
If the handlers execution results in an error or a warning logged to the error_log file which is expected, its a good idea to have a disclaimer printed before the error itself, so one can tell real problems with tests from expected errors. For example when testing how the package behaves under error conditions the error_log file might be loaded with errors, most of which are expected.
For example if a handler is about to generate a run-time error, this function can be used as:
use Apache::TestUtil;
...
sub handler {
my $r = shift;
...
t_server_log_error_is_expected();
die "failed because ...";
}
After running this handler the error_log file will include:
*** The following error entry is expected and harmless ***
[Tue Apr 01 14:00:21 2003] [error] failed because ...
When more than one entry is expected, an optional numerical argument, indicating how many entries to expect, can be passed. For example:
t_server_log_error_is_expected(2);
will generate:
*** The following 2 error entries are expected and harmless ***
If the error is generated at compile time, the logging must be done in the BEGIN block at the very beginning of the file:
BEGIN {
use Apache::TestUtil;
t_server_log_error_is_expected();
}
use DOES_NOT_exist;
After attempting to run this handler the error_log file will include:
*** The following error entry is expected and harmless ***
[Tue Apr 01 14:04:49 2003] [error] Cant locate "DOES_NOT_exist.pm"
in @INC (@INC contains: ...
Also see t_server_log_warn_is_expected() which is similar but used for warnings.
This function is exported by default.
t_server_log_warn_is_expected()
t_server_log_warn_is_expected() generates a disclaimer for expected warnings.
See the explanation for t_server_log_error_is_expected() for more details.
This function is exported by default.
t_client_log_error_is_expected()
t_client_log_error_is_expected() generates a disclaimer for expected errors. But in contrast to t_server_log_error_is_expected() called by the client side of the script.
See the explanation for t_server_log_error_is_expected() for more details.
For example the following client script fails to find the handler:
use Apache::Test;
use Apache::TestUtil;
use Apache::TestRequest qw(GET);
plan tests => 1;
t_client_log_error_is_expected();
my $url = "/error_document/cannot_be_found";
my $res = GET($url);
ok t_cmp(404, $res->code, "test 404");
After running this test the error_log file will include an entry similar to the following snippet:
*** The following error entry is expected and harmless ***
[Tue Apr 01 14:02:55 2003] [error] [client 127.0.0.1]
File does not exist: /tmp/test/t/htdocs/error
When more than one entry is expected, an optional numerical argument, indicating how many entries to expect, can be passed. For example:
t_client_log_error_is_expected(2);
will generate:
*** The following 2 error entries are expected and harmless ***
This function is exported by default.
t_client_log_warn_is_expected()
t_client_log_warn_is_expected() generates a disclaimer for expected warnings on the client side.
See the explanation for t_client_log_error_is_expected() for more details.
This function is exported by default.
t_catfile(a, b, c)
This function is essentially File::Spec->catfile, but on Win32 will use Win32::GetLongpathName() to convert the result to a long path name (if the result is an absolute file). The function is not exported by default.
t_catfile_apache(a, b, c)
This function is essentially File::Spec::Unix->catfile, but on Win32 will use Win32::GetLongpathName() to convert the result to a long path name (if the result is an absolute file). It is useful when comparing something to that returned by Apache, which uses a Unix-style specification with forward slashes for directory separators. The function is not exported by default.
t_start_error_log_watch(), t_finish_error_log_watch()
This pair of functions provides an easy interface for checking the presence or absense of any particular message or messages in the httpd error_log that were generated by the httpd daemon as part of a test suite. It is likely, that you should proceed this with a call to one of the t_*_is_expected() functions.
t_start_error_log_watch();
do_it;
ok grep {...} t_finish_error_log_watch()
<<lessSYNOPSIS
use Apache::Test;
use Apache::TestUtil;
ok t_cmp("foo", "foo", "sanity check");
t_write_file("filename", @content);
my $fh = t_open_file($filename);
t_mkdir("/foo/bar");
t_rmtree("/foo/bar");
t_is_equal($a, $b);
Apache::TestUtil automatically exports a number of functions useful in writing tests.
All the files and directories created using the functions from this package will be automatically destroyed at the end of the program execution (via END block). You should not use these functions other than from within tests which should cleanup all the created directories and files at the end of the test.
FUNCTIONS
t_cmp()
t_cmp($received, $expected, $comment);
t_cmp() prints the values of $comment, $expected and $received. e.g.:
t_cmp(1, 1, "1 == 1?");
prints:
# testing : 1 == 1?
# expected: 1
# received: 1
then it returns the result of comparison of the $expected and the $received variables. Usually, the return value of this function is fed directly to the ok() function, like this:
ok t_cmp(1, 1, "1 == 1?");
the third argument ($comment) is optional, mostly useful for telling what the comparison is trying to do.
It is valid to use undef as an expected value. Therefore:
my $foo;
t_cmp(undef, $foo, "undef == undef?");
will return a true value.
You can compare any two data-structures with t_cmp(). Just make sure that if you pass non-scalars, you have to pass their references. The datastructures can be deeply nested. For example you can compare:
t_cmp({1 => [2..3,{5..8}], 4 => [5..6]},
{1 => [2..3,{5..8}], 4 => [5..6]},
"hash of array of hashes");
You can also compare the second argument against the first as a regex. Use the qr// function in the second argument. For example:
t_cmp("abcd", qr/^abc/, "regex compare");
will do:
"abcd" =~ /^abc/;
This function is exported by default.
t_filepath_cmp()
This function is used to compare two filepaths via t_cmp(). For non-Win32, it simply uses t_cmp() for the comparison, but for Win32, Win32::GetLongPathName() is invoked to convert the first two arguments to their DOS long pathname. This is useful when there is a possibility the two paths being compared are not both represented by their long or short pathname.
This function is exported by default.
t_debug()
t_debug("testing feature foo");
t_debug("test", [1..3], 5, {a=>[1..5]});
t_debug() prints out any datastructure while prepending # at the beginning of each line, to make the debug printouts comply with Test::Harnesss requirements. This function should be always used for debug prints, since if in the future the debug printing will change (e.g. redirected into a file) your tests wont need to be changed.
the special global variable $Apache::TestUtil::DEBUG_OUTPUT can be used to redirect the output from t_debug() and related calls such as t_write_file(). for example, from a server-side test you would probably need to redirect it to STDERR:
sub handler {
plan $r, tests => 1;
local $Apache::TestUtil::DEBUG_OUTPUT = *STDERR;
t_write_file(/tmp/foo, bar);
...
}
left to its own devices, t_debug() will collide with the standard HTTP protocol during server-side tests, resulting in a situation both confusing difficult to debug. but STDOUT is left as the default, since you probably dont want debug output under normal circumstances unless running under verbose mode.
This function is exported by default.
t_write_file()
t_write_file($filename, @lines);
t_write_file() creates a new file at $filename or overwrites the existing file with the content passed in @lines. If only the $filename is passed, an empty file will be created.
If parent directories of $filename dont exist they will be automagically created.
The generated file will be automatically deleted at the end of the programs execution.
This function is exported by default.
t_append_file()
t_append_file($filename, @lines);
t_append_file() is similar to t_write_file(), but it doesnt clobber existing files and appends @lines to the end of the file. If the file doesnt exist it will create it.
If parent directories of $filename dont exist they will be automagically created.
The generated file will be registered to be automatically deleted at the end of the programs execution, only if the file was created by t_append_file().
This function is exported by default.
t_write_shell_script()
Apache::TestUtil::t_write_shell_script($filename, @lines);
Similar to t_write_file() but creates a portable shell/batch script. The created filename is constructed from $filename and an appropriate extension automatically selected according to the platform the code is running under.
It returns the extension of the created file.
t_write_perl_script()
Apache::TestUtil::t_write_perl_script($filename, @lines);
Similar to t_write_file() but creates a executable Perl script with correctly set shebang line.
t_open_file()
my $fh = t_open_file($filename);
t_open_file() opens a file $filename for writing and returns the file handle to the opened file.
If parent directories of $filename dont exist they will be automagically created.
The generated file will be automatically deleted at the end of the programs execution.
This function is exported by default.
t_mkdir()
t_mkdir($dirname);
t_mkdir() creates a directory $dirname. The operation will fail if the parent directory doesnt exist.
If parent directories of $dirname dont exist they will be automagically created.
The generated directory will be automatically deleted at the end of the programs execution.
This function is exported by default.
t_rmtree()
t_rmtree(@dirs);
t_rmtree() deletes the whole directories trees passed in @dirs.
This function is exported by default.
t_chown()
Apache::TestUtil::t_chown($file);
Change ownership of $file to the tests User/Group. This function is noop on platforms where chown(2) is unsupported (e.g. Win32).
t_is_equal()
t_is_equal($a, $b);
t_is_equal() compares any two datastructures and returns 1 if they are exactly the same, otherwise 0. The datastructures can be nested hashes, arrays, scalars, undefs or a combination of any of these. See t_cmp() for an example.
If $b is a regex reference, the regex comparison $a =~ $b is performed. For example:
t_is_equal($server_version, qr{^Apache});
If comparing non-scalars make sure to pass the references to the datastructures.
This function is exported by default.
t_server_log_error_is_expected()
If the handlers execution results in an error or a warning logged to the error_log file which is expected, its a good idea to have a disclaimer printed before the error itself, so one can tell real problems with tests from expected errors. For example when testing how the package behaves under error conditions the error_log file might be loaded with errors, most of which are expected.
For example if a handler is about to generate a run-time error, this function can be used as:
use Apache::TestUtil;
...
sub handler {
my $r = shift;
...
t_server_log_error_is_expected();
die "failed because ...";
}
After running this handler the error_log file will include:
*** The following error entry is expected and harmless ***
[Tue Apr 01 14:00:21 2003] [error] failed because ...
When more than one entry is expected, an optional numerical argument, indicating how many entries to expect, can be passed. For example:
t_server_log_error_is_expected(2);
will generate:
*** The following 2 error entries are expected and harmless ***
If the error is generated at compile time, the logging must be done in the BEGIN block at the very beginning of the file:
BEGIN {
use Apache::TestUtil;
t_server_log_error_is_expected();
}
use DOES_NOT_exist;
After attempting to run this handler the error_log file will include:
*** The following error entry is expected and harmless ***
[Tue Apr 01 14:04:49 2003] [error] Cant locate "DOES_NOT_exist.pm"
in @INC (@INC contains: ...
Also see t_server_log_warn_is_expected() which is similar but used for warnings.
This function is exported by default.
t_server_log_warn_is_expected()
t_server_log_warn_is_expected() generates a disclaimer for expected warnings.
See the explanation for t_server_log_error_is_expected() for more details.
This function is exported by default.
t_client_log_error_is_expected()
t_client_log_error_is_expected() generates a disclaimer for expected errors. But in contrast to t_server_log_error_is_expected() called by the client side of the script.
See the explanation for t_server_log_error_is_expected() for more details.
For example the following client script fails to find the handler:
use Apache::Test;
use Apache::TestUtil;
use Apache::TestRequest qw(GET);
plan tests => 1;
t_client_log_error_is_expected();
my $url = "/error_document/cannot_be_found";
my $res = GET($url);
ok t_cmp(404, $res->code, "test 404");
After running this test the error_log file will include an entry similar to the following snippet:
*** The following error entry is expected and harmless ***
[Tue Apr 01 14:02:55 2003] [error] [client 127.0.0.1]
File does not exist: /tmp/test/t/htdocs/error
When more than one entry is expected, an optional numerical argument, indicating how many entries to expect, can be passed. For example:
t_client_log_error_is_expected(2);
will generate:
*** The following 2 error entries are expected and harmless ***
This function is exported by default.
t_client_log_warn_is_expected()
t_client_log_warn_is_expected() generates a disclaimer for expected warnings on the client side.
See the explanation for t_client_log_error_is_expected() for more details.
This function is exported by default.
t_catfile(a, b, c)
This function is essentially File::Spec->catfile, but on Win32 will use Win32::GetLongpathName() to convert the result to a long path name (if the result is an absolute file). The function is not exported by default.
t_catfile_apache(a, b, c)
This function is essentially File::Spec::Unix->catfile, but on Win32 will use Win32::GetLongpathName() to convert the result to a long path name (if the result is an absolute file). It is useful when comparing something to that returned by Apache, which uses a Unix-style specification with forward slashes for directory separators. The function is not exported by default.
t_start_error_log_watch(), t_finish_error_log_watch()
This pair of functions provides an easy interface for checking the presence or absense of any particular message or messages in the httpd error_log that were generated by the httpd daemon as part of a test suite. It is likely, that you should proceed this with a call to one of the t_*_is_expected() functions.
t_start_error_log_watch();
do_it;
ok grep {...} t_finish_error_log_watch()
Download (0.15MB)
Added: 2007-07-30 License: Perl Artistic License Price:
816 downloads
Apache::TimedRedirect 0.13
Apache::TimedRedirect is an Apache (mod_perl) TransHandler. more>>
Apache::TimedRedirect is an Apache (mod_perl) TransHandler.
SYNOPSIS
use Apache::TimedRedirect;
requires TimePeriod be installed (go to nearest CPAN)
requires Apache have mod_perl installed.
httpd.conf entry...
**** NOTE ***
CANNOT be inside < LOCATION >< /LOCATION > tags
PerlTransHandler Apache::TimedRedirect
PerlSetVar B< redirecturl > http://www.somewhere.far/
PerlSetVar B< timewindow > hr {6am-8pm}
PerlSetVar B< uriregex > foo|bar|do or maybe ..*(foo)>
PerlSetVar B< log > 1
PerlSetVar B< excludeip > 127.0.0.0
Apache::TimedRedirect is a mod_perl TransHandler module that allows the configuration of a timed redirect. In other words if someone enters a a website and the URI matches a regex AND it is within a certain time period they will be redirected somewhere else.
It was first created to politely redirect visitors away from database driven sections of a website while the databases were being refreshed.
<<lessSYNOPSIS
use Apache::TimedRedirect;
requires TimePeriod be installed (go to nearest CPAN)
requires Apache have mod_perl installed.
httpd.conf entry...
**** NOTE ***
CANNOT be inside < LOCATION >< /LOCATION > tags
PerlTransHandler Apache::TimedRedirect
PerlSetVar B< redirecturl > http://www.somewhere.far/
PerlSetVar B< timewindow > hr {6am-8pm}
PerlSetVar B< uriregex > foo|bar|do or maybe ..*(foo)>
PerlSetVar B< log > 1
PerlSetVar B< excludeip > 127.0.0.0
Apache::TimedRedirect is a mod_perl TransHandler module that allows the configuration of a timed redirect. In other words if someone enters a a website and the URI matches a regex AND it is within a certain time period they will be redirected somewhere else.
It was first created to politely redirect visitors away from database driven sections of a website while the databases were being refreshed.
Download (0.003MB)
Added: 2007-07-21 License: Perl Artistic License Price:
825 downloads
Apache::AppSamurai 0.9
Apache::AppSamurai Perl module protects vulnerable or sensitive web applications. more>>
Apache::AppSamurai Perl module protects vulnerable or sensitive web applications. The target use is in reverse proxy configurations, with a Apache mod_perl proxy inside a DMZ and a backend web server in another DMZ or an internal network.
Main features:
- Modular multi-factor authentication system
- Form based or basic auth based logins
- Encrypted storage of session data on proxy
- Able to use any Apache::Session storage type (including MySQL or Postgress for clustered deployment)
- Configurable from httpd.conf (no coding required)
- Coded with security in mind
Example uses of AppSamurai include:
- Moving authentication in front of sensitive web applications, only allowing traffic from authenticated users to even touch the web applications.
- Adding a strong authentication factor to a network appliances canned web interface.
- Protecting Exchange Outlook Web Access/ActiveSync with strong, multi-factor authentication, including dynamic tokens.
<<lessMain features:
- Modular multi-factor authentication system
- Form based or basic auth based logins
- Encrypted storage of session data on proxy
- Able to use any Apache::Session storage type (including MySQL or Postgress for clustered deployment)
- Configurable from httpd.conf (no coding required)
- Coded with security in mind
Example uses of AppSamurai include:
- Moving authentication in front of sensitive web applications, only allowing traffic from authenticated users to even touch the web applications.
- Adding a strong authentication factor to a network appliances canned web interface.
- Protecting Exchange Outlook Web Access/ActiveSync with strong, multi-factor authentication, including dynamic tokens.
Download (0.13MB)
Added: 2007-07-20 License: Perl Artistic License Price:
828 downloads
Apache LDAP vhost driver 1.1
Apache LDAP vhost driver lets you put vhost with all possible information in an LDAP database for both Apache 1.x and 2.x. more>>
Apache LDAP vhost driver project lets you put vhost with all possible information in an LDAP database for both Apache 1.x and 2.x.
Bug report system
With the new maintainence, there is now also a bug report system at the URL http://bugs.bayour.com/ (project mod_ldap_cfg).
Schemas
A schema called mod_ldap_cfg is used.
Apache config
To setup Apache to use this module, the httpd.conf is used.
<<lessBug report system
With the new maintainence, there is now also a bug report system at the URL http://bugs.bayour.com/ (project mod_ldap_cfg).
Schemas
A schema called mod_ldap_cfg is used.
Apache config
To setup Apache to use this module, the httpd.conf is used.
Download (MB)
Added: 2007-07-12 License: GPL (GNU General Public License) Price:
834 downloads
Apache::ErrorControl 1.026
Apache::ErrorControl Perl module is an Apache Handler for Templating Apache Error Documents. more>>
Apache::ErrorControl Perl module is an Apache Handler for Templating Apache Error Documents.
This mod_perl content handler will make templating your ErrorDocument pages easy. Basically you add a couple of entries to your httpd.conf file restart apache, make your template and your cruising.
The module uses HTML::Template::Set (which is essentially HTML::Template with the ability to use TMPL_SET tags). So for help templating your error pages please see: HTML::Template::Set and HTML::Template. Also check the OPTIONS section of this documentation for available TMPL_SET/TMPL_IF and TMPL_VAR params.
By default when an error 500 (internal server error) is encountered an error email is sent about it. the addresses emailed depend on the options specified. please see the OPTIONS section for help configuring this. you can also extend the system to send error emails on more than just internal server errors, please see the EmailOn option for how to do this.
Templates are looked up in the following order: the document root is scanned for allerrors, allerrors.tmpl, error code or error code.tmpl. if no templates are found the TemplateDir is scanned for the same files. if no templates are found the DefaultTemplate is used and if its not set the system dies.
Because so many places are checked for the templates its possible to have one global error handler and have different templates for each virtual host and also allow for defaults. It also means you can have a general catch-all template (allerrors/allerrors.tmpl) as well as single templates (i.e. 500.tmpl). Generally I just use allerrors.tmpl and use TMPL_IFs to display custom content per error message, but you can set it up any way you want.
<<lessThis mod_perl content handler will make templating your ErrorDocument pages easy. Basically you add a couple of entries to your httpd.conf file restart apache, make your template and your cruising.
The module uses HTML::Template::Set (which is essentially HTML::Template with the ability to use TMPL_SET tags). So for help templating your error pages please see: HTML::Template::Set and HTML::Template. Also check the OPTIONS section of this documentation for available TMPL_SET/TMPL_IF and TMPL_VAR params.
By default when an error 500 (internal server error) is encountered an error email is sent about it. the addresses emailed depend on the options specified. please see the OPTIONS section for help configuring this. you can also extend the system to send error emails on more than just internal server errors, please see the EmailOn option for how to do this.
Templates are looked up in the following order: the document root is scanned for allerrors, allerrors.tmpl, error code or error code.tmpl. if no templates are found the TemplateDir is scanned for the same files. if no templates are found the DefaultTemplate is used and if its not set the system dies.
Because so many places are checked for the templates its possible to have one global error handler and have different templates for each virtual host and also allow for defaults. It also means you can have a general catch-all template (allerrors/allerrors.tmpl) as well as single templates (i.e. 500.tmpl). Generally I just use allerrors.tmpl and use TMPL_IFs to display custom content per error message, but you can set it up any way you want.
Download (0.010MB)
Added: 2007-07-05 License: Perl Artistic License Price:
841 downloads
Apache::NNTPGateway 0.9
Apache::NNTPGateway is a NNTP interface (Usenet newsgroups) for mod_perl enabled Apache web server. more>>
Apache::NNTPGateway is a NNTP interface (Usenet newsgroups) for mod_perl enabled Apache web server.
SYNOPSIS
You must be using mod_perl, see http://perl.apache.org/ for details.
For the correct work your apache configuration should contain apache directives look like these:
In httpd.conf (or any other apache configuration file):
< Location "/path/to/newsgroup" >
SetHandler perl-script
PerlHandler Apache::NNTPGateway
PerlSetVar NNTPGatewayNewsGroup "newsgroup"
PerlSetVar NNTPGateway... (see L< CONFIGURATION > Directives)
< /Location >
This module implements a per group interface to NNTP (Usenet) News-Groups, it allow users to list, read, post, followup ... articles in a given newsgroup/newsserver depending of configuration. This is not a replacement for a real powerful newsreader client but just pretend to be a simple, useful mapping of some news articles into a web space.
<<lessSYNOPSIS
You must be using mod_perl, see http://perl.apache.org/ for details.
For the correct work your apache configuration should contain apache directives look like these:
In httpd.conf (or any other apache configuration file):
< Location "/path/to/newsgroup" >
SetHandler perl-script
PerlHandler Apache::NNTPGateway
PerlSetVar NNTPGatewayNewsGroup "newsgroup"
PerlSetVar NNTPGateway... (see L< CONFIGURATION > Directives)
< /Location >
This module implements a per group interface to NNTP (Usenet) News-Groups, it allow users to list, read, post, followup ... articles in a given newsgroup/newsserver depending of configuration. This is not a replacement for a real powerful newsreader client but just pretend to be a simple, useful mapping of some news articles into a web space.
Download (0.021MB)
Added: 2007-06-29 License: Perl Artistic License Price:
848 downloads
Apache::PageKit 1.18
Apache::PageKit is a MVCC web framework using mod_perl, XML and HTML::Template. more>>
Apache::PageKit is a MVCC web framework using mod_perl, XML and HTML::Template.
SYNOPSIS
In httpd.conf
SetHandler perl-script
PerlSetVar PKIT_ROOT /path/to/pagekit/files
PerlSetVar PKIT_SERVER staging
PerlHandler +Apache::PageKit
< Perl>
Apache::PageKit->startup(/path/to/pagekit/files, staging);
< /Perl>
In MyPageKit/Common.pm
package MyPageKit::Common;
use base Apache::PageKit::Model;
sub pkit_dbi_connect {
return DBI->connect("DBI:mysql:db","user","passwd");
}
sub pkit_session_setup {
my $model = shift;
my $dbh = $model->dbh;
return {
session_lock_class => MySQL,
session_store_class => MySQL,
session_args => {
Handle => $dbh,
LockHandle => $dbh,
},
};
}
sub pkit_auth_credential {
my ($model) = @_;
# in this example, login and passwd are the names of the credential fields
my $login = $model->input(login);
my $passwd = $model->input(passwd);
# create a session key
# your code here.........
return $ses_key;
}
sub pkit_auth_session_key {
my ($model, $ses_key) = @_;
# check whether $ses_key is valid, if so return user id in $user_id
# your code here.........
return $ok ? $user_id : undef;
}
<<lessSYNOPSIS
In httpd.conf
SetHandler perl-script
PerlSetVar PKIT_ROOT /path/to/pagekit/files
PerlSetVar PKIT_SERVER staging
PerlHandler +Apache::PageKit
< Perl>
Apache::PageKit->startup(/path/to/pagekit/files, staging);
< /Perl>
In MyPageKit/Common.pm
package MyPageKit::Common;
use base Apache::PageKit::Model;
sub pkit_dbi_connect {
return DBI->connect("DBI:mysql:db","user","passwd");
}
sub pkit_session_setup {
my $model = shift;
my $dbh = $model->dbh;
return {
session_lock_class => MySQL,
session_store_class => MySQL,
session_args => {
Handle => $dbh,
LockHandle => $dbh,
},
};
}
sub pkit_auth_credential {
my ($model) = @_;
# in this example, login and passwd are the names of the credential fields
my $login = $model->input(login);
my $passwd = $model->input(passwd);
# create a session key
# your code here.........
return $ses_key;
}
sub pkit_auth_session_key {
my ($model, $ses_key) = @_;
# check whether $ses_key is valid, if so return user id in $user_id
# your code here.........
return $ok ? $user_id : undef;
}
Download (0.12MB)
Added: 2007-06-21 License: Perl Artistic License Price:
855 downloads
Apache Lucene 2.2.0
Apache Lucene is a high-performance, full-featured text search engine library written entirely in Java. more>>
Apache Lucene is a high-performance, full-featured text search engine library written entirely in Java.
Apache Lucene is a technology suitable for nearly any application that requires full-text search, especially cross-platform.
Enhancements:
- Many new features, optimizations, and bugfixes have been added since 2.1.0, including "point-in-time" searching over NFS, payloads, function queries, and new APIs for pre-analyzed fields.
- This release includes index format changes that are not readable by older versions.
- It can both read and update older Lucene indexes.
- Adding to an index with an older format will cause it to be converted to the newer format.
<<lessApache Lucene is a technology suitable for nearly any application that requires full-text search, especially cross-platform.
Enhancements:
- Many new features, optimizations, and bugfixes have been added since 2.1.0, including "point-in-time" searching over NFS, payloads, function queries, and new APIs for pre-analyzed fields.
- This release includes index format changes that are not readable by older versions.
- It can both read and update older Lucene indexes.
- Adding to an index with an older format will cause it to be converted to the newer format.
Download (2.5MB)
Added: 2007-06-21 License: The Apache License 2.0 Price:
880 downloads
Apache::Dynagzip 0.16
Apache::Dynagzip is a mod_perl extension for Apache-1.3.X to compress the response with gzip format. more>>
Apache::Dynagzip is a mod_perl extension for Apache-1.3.X to compress the response with gzip format.
This Apache handler provides dynamic content compression of the response data stream for HTTP/1.0 and HTTP/1.1 requests. Standard gzip compression is optionally combined with an extra light compression that eliminates leading blank spaces and/or blank lines within the source document. An extra light compression could be applied even when the client (browser) is not capable to decompress gzip format.
Handler helps to compress the outbound HTML content usually by 3 to 20 times, and provides a list of useful features. This is particularly useful for compressing outgoing web content that is dynamically generated on the fly (using templates, DB data, XML, etc.), when at the time of the request it is impossible to determine the length of the document to be transmitted. Support for Perl, Java, and C source generators is provided.
Besides the benefits of reduced document size, this approach gains efficiency from being able to overlap the various phases of data generation, compression, transmission, and decompression. In fact, the browser can start to decompress a document, which has not yet been completely generated.
<<lessThis Apache handler provides dynamic content compression of the response data stream for HTTP/1.0 and HTTP/1.1 requests. Standard gzip compression is optionally combined with an extra light compression that eliminates leading blank spaces and/or blank lines within the source document. An extra light compression could be applied even when the client (browser) is not capable to decompress gzip format.
Handler helps to compress the outbound HTML content usually by 3 to 20 times, and provides a list of useful features. This is particularly useful for compressing outgoing web content that is dynamically generated on the fly (using templates, DB data, XML, etc.), when at the time of the request it is impossible to determine the length of the document to be transmitted. Support for Perl, Java, and C source generators is provided.
Besides the benefits of reduced document size, this approach gains efficiency from being able to overlap the various phases of data generation, compression, transmission, and decompression. In fact, the browser can start to decompress a document, which has not yet been completely generated.
Download (0.024MB)
Added: 2007-06-11 License: Perl Artistic License Price:
866 downloads
Secleted [ 0 ] software to compare
Copyright Notice:
Software piracy is theft, Using crack, password, serial numbers, registration codes, key generators is illegal and prevent future software development. The above apache search only lists software in full, demo and trial versions for free download. Download links are directly from our mirror sites or publisher sites, torrent files or links from rapidshare.com, yousendit.com or megaupload.com are not allowed