예제 #1
0
function HandleProvision($backend, $devid, $protocolversion)
{
    global $user, $auth_pw, $policykey;
    global $zpushdtd, $policies;
    global $output, $input;
    $status = SYNC_PROVISION_STATUS_SUCCESS;
    $phase2 = true;
    $decoder = new WBXMLDecoder($input, $zpushdtd);
    $encoder = new WBXMLEncoder($output, $zpushdtd);
    if (!$decoder->getElementStartTag(SYNC_PROVISION_PROVISION)) {
        return false;
    }
    //handle android remote wipe.
    if ($decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) {
        if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) {
            return false;
        }
        $status = $decoder->getElementContent();
        if (!$decoder->getElementEndTag()) {
            return false;
        }
        if (!$decoder->getElementEndTag()) {
            return false;
        }
    } else {
        if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICIES)) {
            return false;
        }
        if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICY)) {
            return false;
        }
        if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICYTYPE)) {
            return false;
        }
        $policytype = $decoder->getElementContent();
        if ($policytype != 'MS-WAP-Provisioning-XML') {
            $status = SYNC_PROVISION_STATUS_SERVERERROR;
        }
        if (!$decoder->getElementEndTag()) {
            //policytype
            return false;
        }
        if ($decoder->getElementStartTag(SYNC_PROVISION_POLICYKEY)) {
            $devpolicykey = $decoder->getElementContent();
            if (!$decoder->getElementEndTag()) {
                return false;
            }
            if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) {
                return false;
            }
            $status = $decoder->getElementContent();
            //do status handling
            $status = SYNC_PROVISION_STATUS_SUCCESS;
            if (!$decoder->getElementEndTag()) {
                return false;
            }
            $phase2 = false;
        }
        if (!$decoder->getElementEndTag()) {
            //policy
            return false;
        }
        if (!$decoder->getElementEndTag()) {
            //policies
            return false;
        }
        if ($decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) {
            if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) {
                return false;
            }
            $status = $decoder->getElementContent();
            if (!$decoder->getElementEndTag()) {
                return false;
            }
            if (!$decoder->getElementEndTag()) {
                return false;
            }
        }
    }
    if (!$decoder->getElementEndTag()) {
        //provision
        return false;
    }
    $encoder->StartWBXML();
    //set the new final policy key in the backend
    if (!$phase2) {
        $policykey = $backend->generatePolicyKey();
        $backend->setPolicyKey($policykey, $devid);
    }
    $encoder->startTag(SYNC_PROVISION_PROVISION);
    $encoder->startTag(SYNC_PROVISION_STATUS);
    $encoder->content($status);
    $encoder->endTag();
    $encoder->startTag(SYNC_PROVISION_POLICIES);
    $encoder->startTag(SYNC_PROVISION_POLICY);
    $encoder->startTag(SYNC_PROVISION_POLICYTYPE);
    $encoder->content($policytype);
    $encoder->endTag();
    $encoder->startTag(SYNC_PROVISION_STATUS);
    $encoder->content($status);
    $encoder->endTag();
    $encoder->startTag(SYNC_PROVISION_POLICYKEY);
    $encoder->content($policykey);
    $encoder->endTag();
    if ($phase2) {
        $encoder->startTag(SYNC_PROVISION_DATA);
        if ($policytype == 'MS-WAP-Provisioning-XML') {
            $encoder->content('<wap-provisioningdoc><characteristic type="SecurityPolicy"><parm name="4131" value="1"/><parm name="4133" value="1"/></characteristic></wap-provisioningdoc>');
        } else {
            debugLog("Wrong policy type");
            return false;
        }
        $encoder->endTag();
        //data
    }
    $encoder->endTag();
    //policy
    $encoder->endTag();
    //policies
    $rwstatus = $backend->getDeviceRWStatus($user, $auth_pw, $devid);
    //wipe data if status is pending or wiped
    if ($rwstatus == SYNC_PROVISION_RWSTATUS_PENDING || $rwstatus == SYNC_PROVISION_RWSTATUS_WIPED) {
        $encoder->startTag(SYNC_PROVISION_REMOTEWIPE, false, true);
        $backend->setDeviceRWStatus($user, $auth_pw, $devid, SYNC_PROVISION_RWSTATUS_WIPED);
        //$rwstatus = SYNC_PROVISION_RWSTATUS_WIPED;
    }
    $encoder->endTag();
    //provision
    return true;
}
예제 #2
0
function HandleMeetingResponse($backend, $protocolversion)
{
    global $zpushdtd;
    global $output, $input;
    $response = false;
    $folderid = false;
    $requestid = false;
    $decoder = new WBXMLDecoder($input, $zpushdtd);
    $encoder = new WBXMLEncoder($output, $zpushdtd);
    if (!$decoder->getElementStartTag(SYNC_MEETINGRESPONSE_MEETINGRESPONSE)) {
        return false;
    }
    if (!$decoder->getElementStartTag(SYNC_MEETINGRESPONSE_REQUEST)) {
        return false;
    }
    if ($decoder->getElementStartTag(SYNC_MEETINGRESPONSE_USERRESPONSE)) {
        $response = $decoder->getElementContent();
        if (!$decoder->getElementEndTag()) {
            return false;
        }
    }
    if ($decoder->getElementStartTag(SYNC_MEETINGRESPONSE_FOLDERID)) {
        $folderid = $decoder->getElementContent();
        if (!$decoder->getElementEndTag()) {
            return false;
        }
    }
    if ($decoder->getElementStartTag(SYNC_MEETINGRESPONSE_REQUESTID)) {
        $requestid = $decoder->getElementContent();
        if (!$decoder->getElementEndTag()) {
            return false;
        }
    }
    if (!$decoder->getElementEndTag()) {
        return false;
    }
    if (!$decoder->getElementEndTag()) {
        return false;
    }
    $calendarid = "";
    $ok = $backend->MeetingResponse($requestid, $folderid, $response, $calendarid);
    // Start output, simply the error code
    $encoder->StartWBXML();
    $encoder->startTag(SYNC_MEETINGRESPONSE_MEETINGRESPONSE);
    $encoder->startTag(SYNC_MEETINGRESPONSE_RESULT);
    $encoder->startTag(SYNC_MEETINGRESPONSE_REQUESTID);
    $encoder->content($requestid);
    $encoder->endTag();
    $encoder->startTag(SYNC_MEETINGRESPONSE_ERROR);
    $encoder->content($ok ? 1 : 2);
    $encoder->endTag();
    if ($ok) {
        $encoder->startTag(SYNC_MEETINGRESPONSE_CALENDARID);
        $encoder->content($calendarid);
        $encoder->endTag();
    }
    $encoder->endTag();
    $encoder->endTag();
    return true;
}
예제 #3
0
function HandleMeetingResponse($backend, $protocolversion)
{
    global $zpushdtd;
    global $output, $input;
    $requests = array();
    $decoder = new WBXMLDecoder($input, $zpushdtd);
    $encoder = new WBXMLEncoder($output, $zpushdtd);
    if (!$decoder->getElementStartTag(SYNC_MEETINGRESPONSE_MEETINGRESPONSE)) {
        return false;
    }
    while ($decoder->getElementStartTag(SYNC_MEETINGRESPONSE_REQUEST)) {
        $req = array();
        if ($decoder->getElementStartTag(SYNC_MEETINGRESPONSE_USERRESPONSE)) {
            $req["response"] = $decoder->getElementContent();
            if (!$decoder->getElementEndTag()) {
                return false;
            }
        }
        if ($decoder->getElementStartTag(SYNC_MEETINGRESPONSE_FOLDERID)) {
            $req["folderid"] = $decoder->getElementContent();
            if (!$decoder->getElementEndTag()) {
                return false;
            }
        }
        if ($decoder->getElementStartTag(SYNC_MEETINGRESPONSE_REQUESTID)) {
            $req["requestid"] = $decoder->getElementContent();
            if (!$decoder->getElementEndTag()) {
                return false;
            }
        }
        if (!$decoder->getElementEndTag()) {
            return false;
        }
        array_push($requests, $req);
    }
    if (!$decoder->getElementEndTag()) {
        return false;
    }
    // Start output, simply the error code, plus the ID of the calendar item that was generated by the
    // accept of the meeting response
    $encoder->StartWBXML();
    $encoder->startTag(SYNC_MEETINGRESPONSE_MEETINGRESPONSE);
    foreach ($requests as $req) {
        $calendarid = "";
        $ok = $backend->MeetingResponse($req["requestid"], $req["folderid"], $req["response"], $calendarid);
        $encoder->startTag(SYNC_MEETINGRESPONSE_RESULT);
        $encoder->startTag(SYNC_MEETINGRESPONSE_REQUESTID);
        $encoder->content($req["requestid"]);
        $encoder->endTag();
        $encoder->startTag(SYNC_MEETINGRESPONSE_ERROR);
        $encoder->content($ok ? 1 : 2);
        $encoder->endTag();
        if ($ok) {
            $encoder->startTag(SYNC_MEETINGRESPONSE_CALENDARID);
            $encoder->content($calendarid);
            $encoder->endTag();
        }
        $encoder->endTag();
    }
    $encoder->endTag();
    return true;
}
예제 #4
0
function HandleProvision($backend, $devid, $protocolversion)
{
    global $user, $auth_pw, $policykey;
    global $zpushdtd, $policies;
    global $output, $input;
    $status = SYNC_PROVISION_STATUS_SUCCESS;
    $phase2 = true;
    $decoder = new WBXMLDecoder($input, $zpushdtd);
    $encoder = new WBXMLEncoder($output, $zpushdtd);
    if (!$decoder->getElementStartTag(SYNC_PROVISION_PROVISION)) {
        return false;
    }
    //handle android remote wipe.
    if ($decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) {
        if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) {
            return false;
        }
        $status = $decoder->getElementContent();
        if (!$decoder->getElementEndTag()) {
            return false;
        }
        if (!$decoder->getElementEndTag()) {
            return false;
        }
    } else {
        if ($decoder->getElementStartTag(SYNC_SETTINGS_DEVICEINFORMATION)) {
            if ($decoder->getElementStartTag(SYNC_SETTINGS_SET)) {
                while (($field = $decoder->getElementStartTag(SYNC_SETTINGS_MODEL) ? SYNC_SETTINGS_MODEL : ($decoder->getElementStartTag(SYNC_SETTINGS_IMEI) ? SYNC_SETTINGS_IMEI : ($decoder->getElementStartTag(SYNC_SETTINGS_FRIENDLYNAME) ? SYNC_SETTINGS_FRIENDLYNAME : ($decoder->getElementStartTag(SYNC_SETTINGS_OS) ? SYNC_SETTINGS_OS : ($decoder->getElementStartTag(SYNC_SETTINGS_OSLANGUAGE) ? SYNC_SETTINGS_OSLANGUAGE : ($decoder->getElementStartTag(SYNC_SETTINGS_PHONENUMBER) ? SYNC_SETTINGS_PHONENUMBER : ($decoder->getElementStartTag(SYNC_SETTINGS_USERAGENT) ? SYNC_SETTINGS_USERAGENT : ($decoder->getElementStartTag(SYNC_SETTINGS_MOBILEOPERATOR) ? SYNC_SETTINGS_MOBILEOPERATOR : ($decoder->getElementStartTag(SYNC_SETTINGS_ENABLEOUTBOUNDSMS) ? SYNC_SETTINGS_ENABLEOUTBOUNDSMS : -1))))))))) != -1) {
                    if (($deviceinfo[$field] = $decoder->getElementContent()) !== false) {
                        $decoder->getElementEndTag();
                        // end $field
                    }
                }
                $request["set"]["deviceinformation"] = $deviceinfo;
                $decoder->getElementEndTag();
                // end SYNC_SETTINGS_SET
            }
            $decoder->getElementEndTag();
            // end SYNC_SETTINGS_DEVICEINFORMATION
            if (isset($request["set"])) {
                $result["set"] = $backend->setSettings($request["set"], $devid);
            }
        }
        if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICIES)) {
            return false;
        }
        if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICY)) {
            return false;
        }
        if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICYTYPE)) {
            return false;
        }
        $policytype = $decoder->getElementContent();
        // START CHANGED dw2412 Support V12.0
        if ($protocolversion >= 12.0) {
            if ($policytype != 'MS-EAS-Provisioning-WBXML') {
                $status = SYNC_PROVISION_STATUS_SERVERERROR;
            }
        } else {
            if ($policytype != 'MS-WAP-Provisioning-XML') {
                $status = SYNC_PROVISION_STATUS_SERVERERROR;
            }
        }
        // END CHANGED dw2412 Support V12.0
        if (!$decoder->getElementEndTag()) {
            //policytype
            return false;
        }
        if ($decoder->getElementStartTag(SYNC_PROVISION_POLICYKEY)) {
            $devpolicykey = $decoder->getElementContent();
            if (!$decoder->getElementEndTag()) {
                return false;
            }
            if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) {
                return false;
            }
            $status = $decoder->getElementContent();
            //do status handling
            $status = SYNC_PROVISION_STATUS_SUCCESS;
            if (!$decoder->getElementEndTag()) {
                return false;
            }
            $phase2 = false;
        }
        if (!$decoder->getElementEndTag()) {
            //policy
            return false;
        }
        if (!$decoder->getElementEndTag()) {
            //policies
            return false;
        }
        if ($decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) {
            if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) {
                return false;
            }
            $status = $decoder->getElementContent();
            if (!$decoder->getElementEndTag()) {
                return false;
            }
            if (!$decoder->getElementEndTag()) {
                return false;
            }
        }
    }
    if (!$decoder->getElementEndTag()) {
        //provision
        return false;
    }
    $encoder->StartWBXML();
    //set the new final policy key in the backend
    //in case the send one does not macht the one already in backend. If it matches, we
    //just return the already defined key. (This Helps at least the RoadSync 5.0 Client to sync...
    if ($backend->CheckPolicy($policykey, $devid) == SYNC_PROVISION_STATUS_SUCCESS) {
        debugLog("Policykey is OK! Will not generate a new one!");
    } else {
        if (!$phase2) {
            $policykey = $backend->generatePolicyKey();
            $backend->setPolicyKey($policykey, $devid);
        } else {
            // just create a temporary key (i.e. iPhone OS4 Beta does not like policykey 0 in response)
            $policykey = $backend->generatePolicyKey();
        }
    }
    $encoder->startTag(SYNC_PROVISION_PROVISION);
    if (isset($request)) {
        $encoder->startTag(SYNC_SETTINGS_DEVICEINFORMATION);
        $encoder->startTag(SYNC_SETTINGS_STATUS);
        if (!isset($result["set"]["deviceinformation"]["status"])) {
            $encoder->content(0);
        } else {
            $encoder->content($result["set"]["deviceinformation"]["status"]);
        }
        $encoder->endTag();
        // end SYNC_SETTINGS_STATUS
        $encoder->endTag();
        // end SYNC_SETTINGS_DEVICEINFORMATION
    }
    $encoder->startTag(SYNC_PROVISION_STATUS);
    $encoder->content($status);
    $encoder->endTag();
    $encoder->startTag(SYNC_PROVISION_POLICIES);
    $encoder->startTag(SYNC_PROVISION_POLICY);
    $encoder->startTag(SYNC_PROVISION_POLICYTYPE);
    $encoder->content($policytype);
    $encoder->endTag();
    $encoder->startTag(SYNC_PROVISION_STATUS);
    $encoder->content($status);
    $encoder->endTag();
    $encoder->startTag(SYNC_PROVISION_POLICYKEY);
    $encoder->content($policykey);
    $encoder->endTag();
    if ($phase2) {
        $encoder->startTag(SYNC_PROVISION_DATA);
        if ($policytype == 'MS-WAP-Provisioning-XML') {
            $encoder->content('<wap-provisioningdoc><characteristic type="SecurityPolicy"><parm name="4131" value="1"/><parm name="4133" value="1"/></characteristic></wap-provisioningdoc>');
            /* dw2412 maybe we can make use of this later on in as2.5 proivsioning.
                    	    <characteristic type="Registry">
            					// 0 = no frequency 1 = set and take minutes from FrequencyValue
                                <characteristic type="HKLM\Comm\Security\Policy\LASSD\AE\{50C13377-C66D-400C-889E-C316FC4AB374}">
                            	    <parm name="AEFrequencyType" value="1"/>
                                    <parm name="AEFrequencyValue" value="3"/>
                                </characteristic>
            					// Wipe after n unsuccessful password entries.
                            	<characteristic type="HKLM\Comm\Security\Policy\LASSD">
                                    <parm name="DeviceWipeThreshold" value="6"/>
                        		</characteristic>
            					// Show password reminder after n attemps
                            	<characteristic type="HKLM\Comm\Security\Policy\LASSD">
                                    <parm name="CodewordFrequency" value="3"/>
                            	</characteristic>
            					// if not send there is no PIN required
                                <characteristic type="HKLM\Comm\Security\Policy\LASSD\LAP\lap_pw">
                                    <parm name="MinimumPasswordLength" value="5"/>
                                </characteristic>
            					// 0 = require alphanum, 1 = require numeric, 2 = anything
                                <characteristic type="HKLM\Comm\Security\Policy\LASSD\LAP\lap_pw">
                                    <parm name="PasswordComplexity" value="2"/>
                                </characteristic>
                            </characteristic>
            */
        } else {
            if ($policytype == 'MS-EAS-Provisioning-WBXML') {
                $encoder->startTag('Provision:EASProvisionDoc');
                $devicepasswordenable = 0;
                $encoder->startTag('Provision:DevicePasswordEnabled');
                $encoder->content($devicepasswordenable);
                $encoder->endTag();
                if ($devicepasswordenable == 1 || defined('NOKIA_DETECTED') && NOKIA_DETECTED == true) {
                    $encoder->startTag('Provision:AlphanumericDevicePasswordRequired');
                    $encoder->content('0');
                    $encoder->endTag();
                    $encoder->startTag('Provision:PasswordRecoveryEnabled');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:MinDevicePasswordLength');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:MaxDevicePasswordFailedAttempts');
                    $encoder->content('5');
                    $encoder->endTag();
                    $encoder->startTag('Provision:AllowSimpleDevicePassword');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:DevicePasswordExpiration', false, true);
                    // was 0
                    $encoder->startTag('Provision:DevicePasswordHistory');
                    $encoder->content('0');
                    $encoder->endTag();
                }
                $encoder->startTag('Provision:DeviceEncryptionEnabled');
                $encoder->content('0');
                $encoder->endTag();
                $encoder->startTag('Provision:AttachmentsEnabled');
                $encoder->content('1');
                $encoder->endTag();
                $encoder->startTag('Provision:MaxInactivityTimeDeviceLock');
                $encoder->content('9999');
                $encoder->endTag();
                //				    $encoder->startTag('Provision:MaxInactivityTimeDeviceLock');$encoder->content('0');$encoder->endTag();
                $encoder->startTag('Provision:MaxAttachmentSize');
                $encoder->content('5000000');
                $encoder->endTag();
                if ($protocolversion >= 12.1) {
                    $encoder->startTag('Provision:AllowStorageCard');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:AllowCamera');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:RequireDeviceEncryption');
                    $encoder->content('0');
                    $encoder->endTag();
                    $encoder->startTag('Provision:AllowUnsignedApplications');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:AllowUnsignedInstallationPackages');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:MinDevicePasswordComplexCharacters');
                    $encoder->content('3');
                    $encoder->endTag();
                    // was 0
                    $encoder->startTag('Provision:AllowWiFi');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:AllowTextMessaging');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:AllowPOPIMAPEmail');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:AllowBluetooth');
                    $encoder->content('2');
                    $encoder->endTag();
                    $encoder->startTag('Provision:AllowIrDA');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:RequireManualSyncWhenRoaming');
                    $encoder->content('0');
                    $encoder->endTag();
                    // Set to one in case you'd like to save money...
                    $encoder->startTag('Provision:AllowDesktopSync');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:MaxCalendarAgeFilter');
                    $encoder->content('0');
                    $encoder->endTag();
                    $encoder->startTag('Provision:AllowHTMLEmail');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:MaxEmailAgeFilter');
                    $encoder->content('0');
                    $encoder->endTag();
                    $encoder->startTag('Provision:MaxEmailBodyTruncationSize');
                    $encoder->content('5000000');
                    $encoder->endTag();
                    // was 5000000
                    $encoder->startTag('Provision:MaxHTMLBodyTruncationSize');
                    $encoder->content('5000000');
                    $encoder->endTag();
                    // was 5000000
                    $encoder->startTag('Provision:RequireSignedSMIMEMessages');
                    $encoder->content('0');
                    $encoder->endTag();
                    $encoder->startTag('Provision:RequireEncryptedSMIMEMessages');
                    $encoder->content('0');
                    $encoder->endTag();
                    $encoder->startTag('Provision:RequireSignedSMIMEAlgorithm');
                    $encoder->content('0');
                    $encoder->endTag();
                    $encoder->startTag('Provision:RequireEncryptedSMIMEAlgorithm');
                    $encoder->content('0');
                    $encoder->endTag();
                    $encoder->startTag('Provision:AllowSMIMEEncryptionAlgorithmNegotiation');
                    $encoder->content('2');
                    $encoder->endTag();
                    // was 1
                    $encoder->startTag('Provision:AllowSMIMESoftCerts');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:AllowBrowser');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:AllowConsumerEmail');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:AllowRemoteDesktop');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:AllowInternetSharing');
                    $encoder->content('1');
                    $encoder->endTag();
                    $encoder->startTag('Provision:UnapprovedInROMApplicationList', false, true);
                    //						$encoder->startTag('Provision:ApplicationName');$encoder->content('');$encoder->endTag();
                    $encoder->startTag('Provision:ApprovedApplicationList', false, true);
                    //						$encoder->startTag('Provision:Hash');$encoder->content('');$encoder->endTag();
                }
                $encoder->endTag();
            } else {
                debugLog("Wrong policy type");
                return false;
            }
        }
        $encoder->endTag();
        //data
    }
    $encoder->endTag();
    //policy
    $encoder->endTag();
    //policies
    $rwstatus = $backend->getDeviceRWStatus($user, $auth_pw, $devid);
    //wipe data if status is pending or wiped
    if ($rwstatus == SYNC_PROVISION_RWSTATUS_PENDING || $rwstatus == SYNC_PROVISION_RWSTATUS_WIPED) {
        $encoder->startTag(SYNC_PROVISION_REMOTEWIPE, false, true);
        $backend->setDeviceRWStatus($user, $auth_pw, $devid, SYNC_PROVISION_RWSTATUS_WIPED);
        //$rwstatus = SYNC_PROVISION_RWSTATUS_WIPED;
    }
    $encoder->endTag();
    //provision
    return true;
}
예제 #5
0
파일: request.php 프로젝트: nnaannoo/paskot
function HandleProvision($backend, $devid, $protocolversion)
{
    global $user, $auth_pw, $policykey;
    global $zpushdtd, $policies;
    global $output, $input;
    $status = SYNC_PROVISION_STATUS_SUCCESS;
    $rwstatus = $backend->getDeviceRWStatus($user, $auth_pw, $devid);
    $rwstatusWiped = false;
    $phase2 = true;
    $decoder = new WBXMLDecoder($input, $zpushdtd);
    $encoder = new WBXMLEncoder($output, $zpushdtd);
    if (!$decoder->getElementStartTag(SYNC_PROVISION_PROVISION)) {
        return false;
    }
    //handle android remote wipe.
    if ($decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) {
        if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) {
            return false;
        }
        $status = $decoder->getElementContent();
        if (!$decoder->getElementEndTag()) {
            return false;
        }
        if (!$decoder->getElementEndTag()) {
            return false;
        }
        $phase2 = false;
        $rwstatusWiped = true;
    } else {
        if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICIES)) {
            return false;
        }
        if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICY)) {
            return false;
        }
        if (!$decoder->getElementStartTag(SYNC_PROVISION_POLICYTYPE)) {
            return false;
        }
        $policytype = $decoder->getElementContent();
        if ($policytype != 'MS-WAP-Provisioning-XML') {
            $status = SYNC_PROVISION_STATUS_SERVERERROR;
        }
        if (!$decoder->getElementEndTag()) {
            //policytype
            return false;
        }
        if ($decoder->getElementStartTag(SYNC_PROVISION_POLICYKEY)) {
            $devpolicykey = $decoder->getElementContent();
            if (!$decoder->getElementEndTag()) {
                return false;
            }
            if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) {
                return false;
            }
            $status = $decoder->getElementContent();
            //do status handling
            $status = SYNC_PROVISION_STATUS_SUCCESS;
            if (!$decoder->getElementEndTag()) {
                return false;
            }
            $phase2 = false;
        }
        if (!$decoder->getElementEndTag()) {
            //policy
            return false;
        }
        if (!$decoder->getElementEndTag()) {
            //policies
            return false;
        }
        if ($decoder->getElementStartTag(SYNC_PROVISION_REMOTEWIPE)) {
            if (!$decoder->getElementStartTag(SYNC_PROVISION_STATUS)) {
                return false;
            }
            $status = $decoder->getElementContent();
            if (!$decoder->getElementEndTag()) {
                return false;
            }
            if (!$decoder->getElementEndTag()) {
                return false;
            }
            $rwstatusWiped = true;
        }
    }
    if (!$decoder->getElementEndTag()) {
        //provision
        return false;
    }
    $encoder->StartWBXML();
    //set the new final policy key in the backend
    // START ADDED dw2412 Android provisioning fix
    //in case the send one does not match the one already in backend. If it matches, we
    //just return the already defined key. (This helps at least the RoadSync 5.0 Client to sync)
    if ($backend->CheckPolicy($policykey, $devid) == SYNC_PROVISION_STATUS_SUCCESS) {
        debugLog("Policykey is OK! Will not generate a new one!");
    } else {
        if (!$phase2) {
            $policykey = $backend->generatePolicyKey();
            //android sends "validate" as deviceid, it does not need to be added to the device list
            if (strcasecmp("validate", $devid) != 0) {
                $backend->setPolicyKey($policykey, $devid);
            }
        } else {
            // just create a temporary key (i.e. iPhone OS4 Beta does not like policykey 0 in response)
            $policykey = $backend->generatePolicyKey();
        }
    }
    // END ADDED dw2412 Android provisioning fix
    $encoder->startTag(SYNC_PROVISION_PROVISION);
    $encoder->startTag(SYNC_PROVISION_STATUS);
    $encoder->content($status);
    $encoder->endTag();
    $encoder->startTag(SYNC_PROVISION_POLICIES);
    $encoder->startTag(SYNC_PROVISION_POLICY);
    if (isset($policytype)) {
        $encoder->startTag(SYNC_PROVISION_POLICYTYPE);
        $encoder->content($policytype);
        $encoder->endTag();
    }
    $encoder->startTag(SYNC_PROVISION_STATUS);
    $encoder->content($status);
    $encoder->endTag();
    $encoder->startTag(SYNC_PROVISION_POLICYKEY);
    $encoder->content($policykey);
    $encoder->endTag();
    if ($phase2) {
        $encoder->startTag(SYNC_PROVISION_DATA);
        if ($policytype == 'MS-WAP-Provisioning-XML') {
            $encoder->content('<wap-provisioningdoc><characteristic type="SecurityPolicy"><parm name="4131" value="1"/><parm name="4133" value="1"/></characteristic></wap-provisioningdoc>');
        } else {
            debugLog("Wrong policy type");
            return false;
        }
        $encoder->endTag();
        //data
    }
    $encoder->endTag();
    //policy
    $encoder->endTag();
    //policies
    //wipe data if status is pending or wiped
    if ($rwstatus == SYNC_PROVISION_RWSTATUS_PENDING || $rwstatus == SYNC_PROVISION_RWSTATUS_WIPED) {
        $encoder->startTag(SYNC_PROVISION_REMOTEWIPE, false, true);
        $backend->setDeviceRWStatus($user, $auth_pw, $devid, $rwstatusWiped ? SYNC_PROVISION_RWSTATUS_WIPED : SYNC_PROVISION_RWSTATUS_PENDING);
    }
    $encoder->endTag();
    //provision
    return true;
}