40bcb40598ceaf7c338e09b3ee2b976597ac01cf
bernd Bessere Darstellung des Dom...

bernd authored 15 years ago

1) <?php
Bernd Wurst Added license tags for CC0,...

Bernd Wurst authored 12 years ago

2) /*
3) This file belongs to the Webinterface of schokokeks.org Hosting
4) 
Bernd Wurst Copyright year update

Bernd Wurst authored 6 years ago

5) Written 2008-2018 by schokokeks.org Hosting, namely
Bernd Wurst Added license tags for CC0,...

Bernd Wurst authored 12 years ago

6)   Bernd Wurst <bernd@schokokeks.org>
7)   Hanno Böck <hanno@schokokeks.org>
8) 
9) To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty.
10) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

11) You should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see
Bernd Wurst Added license tags for CC0,...

Bernd Wurst authored 12 years ago

12) http://creativecommons.org/publicdomain/zero/1.0/
13) 
14) Nevertheless, in case you use a significant part of this code, we ask (but not require, see the license) that you keep the authors' names in place and return your changes to the public. We would be especially happy if you tell us what you're going to do with this code.
15) */
bernd Bessere Darstellung des Dom...

bernd authored 15 years ago

16) 
17) require_once('inc/debug.php');
18) 
bernd Mailman-Domains nur auslese...

bernd authored 14 years ago

19) 
bernd Bessere Darstellung des Dom...

bernd authored 15 years ago

20) function mailman_subdomains($domain)
21) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

22)     if (! in_array('mailman', config('modules'))) {
23)         return array();
24)     }
25)     $domain = (int) $domain;
26)     $result = db_query("SELECT id, hostname FROM mail.mailman_domains WHERE domain=?", array($domain));
27)     $ret = array();
28)     while ($line = $result->fetch()) {
29)         $ret[] = $line;
30)     }
31)     return $ret;
bernd Bessere Darstellung des Dom...

bernd authored 15 years ago

32) }
33) 
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

34) function dns_in_use($domain)
35) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

36)     if (! in_array('dns', config('modules'))) {
37)         return false;
38)     }
39)     $domain = (int) $domain;
40)     $result = db_query("SELECT id FROM dns.custom_records WHERE domain=?", array($domain));
41)     return ($result->rowCount() > 0);
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

42) }
43) 
44) 
45) function mail_in_use($domain)
46) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

47)     if (! in_array('email', config('modules'))) {
48)         return false;
49)     }
50)     $domain = (int) $domain;
51)     $result = db_query("SELECT mail FROM kundendaten.domains WHERE id=?", array($domain));
52)     if ($result->rowCount() < 1) {
53)         system_failure("Domain not found");
54)     }
55)     $d = $result->fetch();
56)     if ($d['mail'] == 'none') {
57)         return false;
58)     } // manually disabled
59)     $result = db_query("SELECT id FROM mail.virtual_mail_domains WHERE domain=?", array($domain));
60)     if ($result->rowCount() < 1) {
61)         return true;
62)     } // .courier
63)     $result = db_query("SELECT acc.id FROM mail.vmail_accounts acc LEFT JOIN mail.virtual_mail_domains dom ON (acc.domain=dom.id) WHERE dom.domain=?", array($domain));
64)     return ($result->rowCount() > 0);
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

65) }
66) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

67) function count_vmail($domain)
68) {
Bernd Wurst Zeige Mail-Deeplink korrekt...

Bernd Wurst authored 6 years ago

69)     $domain = (int) $domain;
70)     $result = db_query("SELECT acc.id FROM mail.vmail_accounts acc LEFT JOIN mail.virtual_mail_domains dom ON (acc.domain=dom.id) WHERE dom.domain=?", array($domain));
71)     return $result->rowCount();
72) }
73) 
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

74) function web_in_use($domain)
75) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

76)     if (! in_array('vhosts', config('modules'))) {
77)         return false;
78)     }
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

79) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

80)     $domain = (int) $domain;
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

81) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

82)     $result = db_query("SELECT id FROM kundendaten.domains WHERE id=? AND webserver=1", array($domain));
83)     if ($result->rowCount() < 1) {
84)         return false;
85)     }
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

86) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

87)     $result = db_query("SELECT id FROM vhosts.vhost WHERE domain=?", array($domain));
88)     $result2 = db_query("SELECT id FROM vhosts.alias WHERE domain=?", array($domain));
89)     return ($result->rowCount() > 0 || $result2->rowCount() > 0);
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

90) }
bernd Bessere Darstellung des Dom...

bernd authored 15 years ago

91) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

92) function domain_ownerchange($fqdn, $owner, $admin_c)
Bernd Wurst Domain-Update (Ownerchange)...

Bernd Wurst authored 6 years ago

93) {
94)     $cid = (int) $_SESSION['customerinfo']['customerno'];
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

95)     $dom = new Domain($fqdn);
Bernd Wurst Zuverlässigeres Logging bei...

Bernd Wurst authored 6 years ago

96)     db_query("UPDATE kundendaten.domains SET owner=?, admin_c=? WHERE id=? AND kunde=?", array($owner, $admin_c, $dom->id, $cid));
97)     if (update_possible($dom->id)) {
Bernd Wurst Domain-Transfer und -Regist...

Bernd Wurst authored 6 years ago

98)         require_once('domainapi.php');
Bernd Wurst Zuverlässigeres Logging bei...

Bernd Wurst authored 6 years ago

99)         DEBUG("Rufe Domain-API auf!");
100)         api_upload_domain($dom->fqdn);
Bernd Wurst Domain-Transfer und -Regist...

Bernd Wurst authored 6 years ago

101)     }
Bernd Wurst Domain-Update (Ownerchange)...

Bernd Wurst authored 6 years ago

102) }
103) 
bernd Bessere Darstellung des Dom...

bernd authored 15 years ago

104) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

105) function update_possible($domain)
106) {
Bernd Wurst Aktualisiere Domain- und In...

Bernd Wurst authored 6 years ago

107)     $dom = new Domain((int) $domain);
108)     if ($dom->provider != 'terions' || $dom->billing=='external') {
109)         // Domain nicht über uns verwaltet
Bernd Wurst Zuverlässigeres Logging bei...

Bernd Wurst authored 6 years ago

110)         DEBUG("Domain nicht über uns verwaltet!");
Bernd Wurst Aktualisiere Domain- und In...

Bernd Wurst authored 6 years ago

111)         return false;
112)     }
113)     $result = db_query("SELECT aenderung_eigentuemer, ruecksprache FROM misc.domainpreise WHERE tld=?", array($dom->tld));
114)     if ($result->rowCount() < 1) {
115)         // Endung nicht bei uns in der Liste erfasst
Bernd Wurst Zuverlässigeres Logging bei...

Bernd Wurst authored 6 years ago

116)         DEBUG("Endung nicht in der Preisliste!");
Bernd Wurst Aktualisiere Domain- und In...

Bernd Wurst authored 6 years ago

117)         return false;
118)     }
119)     $data = $result->fetch();
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

120)     if ($data['aenderung_eigentuemer'] != null || $data['ruecksprache'] == 'Y') {
Bernd Wurst Zuverlässigeres Logging bei...

Bernd Wurst authored 6 years ago

121)         DEBUG("Endung hat Eigenheiten (ruecksprache=Y)");
Bernd Wurst Aktualisiere Domain- und In...

Bernd Wurst authored 6 years ago

122)         // Endung mit speziellen Eigenheiten
123)         return false;
124)     }
Bernd Wurst Zuverlässigeres Logging bei...

Bernd Wurst authored 6 years ago

125)     DEBUG("Änderungen sollten möglich sein: {$dom->fqdn}");
Bernd Wurst Aktualisiere Domain- und In...

Bernd Wurst authored 6 years ago

126)     return true;
127) }
128) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

129) function unset_mailserver_lock($dom)
130) {
Bernd Wurst verify-Funktion um via DNS-...

Bernd Wurst authored 6 years ago

131)     $id = $dom->id;
132)     db_query("UPDATE kundendaten.domains SET secret=NULL, mailserver_lock=0 WHERE id=?", array($id));
133) }
134) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

135) function create_domain_secret($dom)
136) {
Bernd Wurst verify-Funktion um via DNS-...

Bernd Wurst authored 6 years ago

137)     $id = $dom->id;
138)     $secret = md5(random_string(20));
139)     db_query("UPDATE kundendaten.domains SET secret=? WHERE id=?", array($secret, $id));
140)     $dom->secret = $secret;
141)     return $secret;
142) }
143) 
Bernd Wurst Bestätige eine Domain ohne...

Bernd Wurst authored 6 years ago

144) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

145) function get_auth_dns($domainname, $tld)
146) {
147)     $domain=idn_to_ascii($domainname.".".$tld, 0, INTL_IDNA_VARIANT_UTS46);
Bernd Wurst verify-Funktion um via DNS-...

Bernd Wurst authored 6 years ago

148) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

149)     $resp = shell_exec('dig @a.root-servers.net. +noall +authority -t ns '.$tld.'.');
150)     $line = explode("\n", $resp, 2)[0];
151)     $NS = preg_replace("/^.*\\sIN\\s+NS\\s+(\\S+)$/", '\1', $line);
Bernd Wurst verify-Funktion um via DNS-...

Bernd Wurst authored 6 years ago

152) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

153)     $resp = shell_exec('dig @'.$NS.' -t ns '.$domain.'.');
154)     $lines = explode("\n", $resp);
Hanno remove whitespace in empty...

Hanno authored 6 years ago

155) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

156)     $NS = null;
157)     $NS_IP = null;
158)     $sec = null;
159)     foreach ($lines as $l) {
160)         if (preg_match("/;; AUTHORITY SECTION:.*/", $l)) {
161)             $sec = 'auth';
162)         } elseif (preg_match("/;; ADDITIONAL SECTION:.*/", $l)) {
163)             $sec = 'add';
164)         }
165)         if ($sec == 'auth' && preg_match("/^.*\\sIN\\s+NS\\s+\\S+$/", $l)) {
166)             $NS = preg_replace("/^.*\\sIN\\s+NS\\s+(\\S+)\\.$/", '\1', $l);
167)         }
168)         if ($sec == 'add' && $NS && preg_match("/^.*\\sIN\\s+A\\s+\\S+$/", $l)) {
169)             $NS_IP = preg_replace("/^.*\\sIN\\s+A\\s+(\\S+)$/", '\1', $l);
170)         }
171)     }
172)     return array("$NS" => $NS_IP);
Bernd Wurst Bestätige eine Domain ohne...

Bernd Wurst authored 6 years ago

173) }
174) 
Bernd Wurst verify-Funktion um via DNS-...

Bernd Wurst authored 6 years ago

175) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

176) function own_ns()
177) {
Bernd Wurst Zeige die Optionen zur Prüf...

Bernd Wurst authored 6 years ago

178)     $auth = dns_get_record(config('masterdomain'), DNS_NS);
179)     $own_ns = array();
180)     foreach ($auth as $ns) {
181)         $own_ns[] = $ns['target'];
182)     }
183) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

184)     return $own_ns;
Bernd Wurst Zeige die Optionen zur Prüf...

Bernd Wurst authored 6 years ago

185) }
186) 
187) 
188) 
189) 
Bernd Wurst Bestätige eine Domain ohne...

Bernd Wurst authored 6 years ago

190) function has_own_ns($domainname, $tld)
191) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

192)     $nsdata = get_auth_dns($domainname, $tld);
193)     $NS = null;
194)     foreach ($nsdata as $host => $ip) {
195)         $NS=$host;
196)     }
197)     if (in_array($NS, own_ns())) {
198)         DEBUG('Domain hat unsere DNS-Server!');
199)         return true;
200)     }
201)     return false;
Bernd Wurst Bestätige eine Domain ohne...

Bernd Wurst authored 6 years ago

202) }
203) 
Bernd Wurst verify-Funktion um via DNS-...

Bernd Wurst authored 6 years ago

204) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

205) function get_txt_record($hostname, $domainname, $tld)
206) {
207)     $domain=idn_to_ascii($domainname.".".$tld, 0, INTL_IDNA_VARIANT_UTS46);
208)     $nsdata = get_auth_dns($domainname, $tld);
209)     $NS = null;
210)     foreach ($nsdata as $host => $ip) {
211)         $NS = $host;
212)         if ($ip) {
213)             $NS = $ip;
214)         }
215)     }
216)     DEBUG('dig @'.$NS.' +short -t txt '.$hostname.'.'.$domain.'.');
217)     $resp = shell_exec('dig @'.$NS.' +short -t txt '.$hostname.'.'.$domain.'.');
218)     $TXT = trim($resp, "\n \"");
219)     DEBUG($TXT);
220)     return $TXT;
Bernd Wurst verify-Funktion um via DNS-...

Bernd Wurst authored 6 years ago

221) }
222) 
223) 
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

224) function list_useraccounts()
225) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

226)     $customerno = (int) $_SESSION['customerinfo']['customerno'];
227)     $result = db_query("SELECT uid,username,name FROM system.useraccounts WHERE kunde=?", array($customerno));
228)     $ret = array();
229)     while ($item = $result->fetch()) {
230)         $ret[] = $item;
231)     }
232)     DEBUG($ret);
233)     return $ret;
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

234) }
235) 
236) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

237) function change_user($domain, $uid)
Bernd Wurst Änderung des betreffenden U...

Bernd Wurst authored 6 years ago

238) {
239)     $domain = new Domain($domain);
240)     $domain->ensure_customerdomain();
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

241)     $targetuser = null;
Bernd Wurst Änderung des betreffenden U...

Bernd Wurst authored 6 years ago

242)     $useraccounts = list_useraccounts();
243)     foreach ($useraccounts as $u) {
244)         if ($u['uid'] == $uid) {
245)             $targetuser = $u['uid'];
246)             break;
247)         }
248)     }
249)     if (! $targetuser) {
250)         system_failure("Ungültiger Useraccount!");
251)     }
252)     db_query("UPDATE kundendaten.domains SET useraccount=? WHERE id=?", array($targetuser, $domain->id));
253) }
254) 
Bernd Wurst Wenn die E-Mail-Funktion ko...

Bernd Wurst authored 6 years ago

255) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

256) function get_domain_offer($tld)
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

257) {
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

258)     $tld = filter_input_hostname($tld);
259)     $cid = (int) $_SESSION['customerinfo']['customerno'];
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

260) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

261)     $data = array("tld" => $tld);
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

262) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

263)     $result = db_query("SELECT tld, gebuehr, `interval`, setup FROM misc.domainpreise_kunde WHERE kunde=:cid AND tld=:tld AND ruecksprache='N'", array(":cid" => $cid, ":tld" => $tld));
264)     if ($result->rowCount() != 1) {
265)         $result = db_query("SELECT tld, gebuehr, `interval`, setup FROM misc.domainpreise WHERE tld=:tld AND ruecksprache='N'", array(":tld" => $tld));
266)     }
267)     if ($result->rowCount() != 1) {
268)         return false;
269)     }
270)     $temp = $result->fetch();
271)     $data["gebuehr"] = $temp["gebuehr"];
272)     $data["interval"] = $temp["interval"];
273)     $data["setup"] = ($temp["setup"] ? $temp["setup"] : 0.0);
Hanno remove whitespace in empty...

Hanno authored 6 years ago

274) 
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

275)     return $data;
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

276) }
277) 
Bernd Wurst Erste Vorbereitungen für Do...

Bernd Wurst authored 6 years ago

278) function set_domain_pretransfer($domain)
279) {
280)     $cid = (int) $_SESSION['customerinfo']['customerno'];
281)     $uid = (int) $_SESSION['userinfo']['uid'];
282)     $domain = (int) $domain;
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

283)     db_query(
284)         "UPDATE kundendaten.domains SET status='pretransfer', dns=1 WHERE id=? AND kunde=?",
Hanno Update codingstyle accordin...

Hanno authored 5 years ago

285)         array($domain, $cid)
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

286)     );
Bernd Wurst Erste Vorbereitungen für Do...

Bernd Wurst authored 6 years ago

287) }
288) 
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

289) 
Bernd Wurst Erste Vorbereitungen für Do...

Bernd Wurst authored 6 years ago

290) 
291) function set_domain_prereg($domain)
Bernd Wurst Wenn die E-Mail-Funktion ko...

Bernd Wurst authored 6 years ago

292) {
293)     $cid = (int) $_SESSION['customerinfo']['customerno'];
294)     $uid = (int) $_SESSION['userinfo']['uid'];
Bernd Wurst Erste Vorbereitungen für Do...

Bernd Wurst authored 6 years ago

295)     $domain = (int) $domain;
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

296)     db_query(
297)         "UPDATE kundendaten.domains SET status='prereg', dns=1 WHERE id=? AND kunde=?",
Hanno Update codingstyle accordin...

Hanno authored 5 years ago

298)         array($domain, $cid)
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

299)     );
Bernd Wurst Wenn die E-Mail-Funktion ko...

Bernd Wurst authored 6 years ago

300) }
301) 
302) 
303) function insert_domain_external($domain, $dns = false, $mail = true)
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

304) {
305)     $cid = (int) $_SESSION['customerinfo']['customerno'];
Bernd Wurst Zeige die Optionen zur Prüf...

Bernd Wurst authored 6 years ago

306)     $uid = (int) $_SESSION['userinfo']['uid'];
Bernd Wurst Lasse die API bestimmen was...

Bernd Wurst authored 6 years ago

307)     require_once("domainapi.php");
308)     $info = api_domain_available($domain);
309)     if (in_array($info['status'], array('nameContainsForbiddenCharacter', 'suffixDoesNotExist'))) {
310)         system_failure("Diese Domain scheint ungültig zu sein!");
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

311)     }
Bernd Wurst Lasse die API bestimmen was...

Bernd Wurst authored 6 years ago

312)     $tld = $info['domainSuffix'];
313)     $domainname = str_replace(".$tld", "", $info['domainNameUnicode']);
Bernd Wurst Logging beim Eintragen und...

Bernd Wurst authored 6 years ago

314)     logger(LOG_WARNING, 'modules/domains/include/domains', 'domains', 'Inserting external domain '.$info['domainNameUnicode']." DNS:{$dns} / Mail:{$mail}");
Hanno remove whitespace in empty...

Hanno authored 6 years ago

315) 
Bernd Wurst Wenn die E-Mail-Funktion ko...

Bernd Wurst authored 6 years ago

316)     db_query("INSERT INTO kundendaten.domains (status, kunde, useraccount, domainname, tld, billing, provider, dns, mail, mailserver_lock) VALUES 
317)         ('external', ?, ?, ?, ?, 'external', 'other', 0, ?, 1)", array($cid, $uid, $domainname, $tld, ($mail ? 'auto' : 'none')));
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

318)     $id = db_insert_id();
319)     if ($dns) {
320)         db_query("UPDATE kundendaten.domains SET dns=1 WHERE id=?", array($id));
321)     }
Bernd Wurst Wenn die E-Mail-Funktion ko...

Bernd Wurst authored 6 years ago

322)     if ($mail) {
323)         $vmailserver = (int) $_SESSION['userinfo']['server'];
324)         db_query("INSERT INTO mail.virtual_mail_domains (domain, server) VALUES (?, ?)", array($id, $vmailserver));
325)     }
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

326)     return $id;
327) }
328) 
Bernd Wurst Transfer-Freigabe und Kündi...

Bernd Wurst authored 6 years ago

329) function delete_domain($id)
330) {
331)     $cid = (int) $_SESSION['customerinfo']['customerno'];
Bernd Wurst Logging beim Eintragen und...

Bernd Wurst authored 6 years ago

332)     logger(LOG_WARNING, 'modules/domains/include/domains', 'domains', 'Deleting domain '.$id);
Hanno Fix coding style with php-c...

Hanno authored 6 years ago

333)     db_query("DELETE FROM kundendaten.domains WHERE id=? AND kunde=?", array($id, $cid));