From 925115778b0042b030badc1c4ca73b9ab44ea1ff Mon Sep 17 00:00:00 2001
From: Charl Mert <cmert@lbsd.net>
Date: Wed, 30 Apr 2014 12:27:24 +0200
Subject: [PATCH] setting domain to expired if owned by different registrar
 closes issue #7

---
 modules/registrars/cozaepp/cozaepp.php | 24 ++++++++++++++++++++----
 1 file changed, 20 insertions(+), 4 deletions(-)

diff --git a/modules/registrars/cozaepp/cozaepp.php b/modules/registrars/cozaepp/cozaepp.php
index c64ab54..848453c 100644
--- a/modules/registrars/cozaepp/cozaepp.php
+++ b/modules/registrars/cozaepp/cozaepp.php
@@ -1223,13 +1223,13 @@ function cozaepp_TransferSync($params) {
 		$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
 		$msg = $doc->getElementsByTagName('msg')->item(0)->nodeValue;
 		# Check result
-		if($coderes != '1000') {
+		if ($coderes != '1000') {
 			$values['error'] = "TransferSync/domain-info($domain): Code("._cozaepp_message($coderes).") $msg";
 			return $values;
 		}
 
 		# Check if we can get a status back
-		if($doc->getElementsByTagName('status')->item(0)) {
+		if ($doc->getElementsByTagName('status')->item(0)) {
 			$statusres = $doc->getElementsByTagName('status')->item(0)->getAttribute('s');
 			$createdate = substr($doc->getElementsByTagName('crDate')->item(0)->nodeValue,0,10);
 			$nextduedate = substr($doc->getElementsByTagName('exDate')->item(0)->nodeValue,0,10);
@@ -1295,19 +1295,35 @@ function cozaepp_Sync($params) {
 		$doc->loadXML($request);
 		logModuleCall('Cozaepp', 'Sync', $xml, $request);
 
+		# Initialize the owningRegistrar which will contain the owning registrar
+		# The <domain:clID> element contains the unique identifier of the registrar that owns the domain.
+		$owningRegistrar = NULL;
+
 		$coderes = $doc->getElementsByTagName('result')->item(0)->getAttribute('code');
 		$msg = $doc->getElementsByTagName('msg')->item(0)->nodeValue;
 		# Check result
-		if($coderes != '1000') {
+		if ($coderes == '1000') {
+			if (
+				$doc->getElementsByTagName('infData') && 
+				$doc->getElementsByTagName('infData')->item(0)->getElementsByTagName('ns')->item(0) && 
+				$doc->getElementsByTagName('infData')->item(0)->getElementsByTagName('clID')
+			) {
+				$owningRegistrar = $doc->getElementsByTagName('infData')->item(0)->getElementsByTagName('clID')->item(0)->nodeValue;
+			}
+		} else {
 			$values['error'] = "Sync/domain-info($domain): Code("._cozaepp_message($coderes).") $msg";
 			return $values;
 		}
 
 		# Check if we can get a status back
-		if($doc->getElementsByTagName('status')->item(0)) {
+		if ($doc->getElementsByTagName('status')->item(0)) {
 			$statusres = $doc->getElementsByTagName('status')->item(0)->getAttribute('s');
 			$createdate = substr($doc->getElementsByTagName('crDate')->item(0)->nodeValue,0,10);
 			$nextduedate = substr($doc->getElementsByTagName('exDate')->item(0)->nodeValue,0,10);
+		} else if (!empty($owningRegistrar) && $owningRegistrar != $username) {
+			# If we got an owningRegistrar back and we're not the owning registrar, return error
+			$values['error'] = "Sync/domain-info($domain): Domain belongs to a different registrar, (owning registrar: $owningRegistrar, your registrar: $username)";
+			return $values;
 		} else {
 			$values['error'] = "Sync/domain-info($domain): Domain not found";
 			return $values;
-- 
GitLab