cad0f3e7e4107ec5541891e48f8b9a80de0b715d
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) 
11) You should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see 
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) {
bernd Mailman-Domains nur auslese...

bernd authored 14 years ago

22)   if ( ! in_array('mailman', config('modules')))
23)   {
24)     return array();
25)   }
bernd Bessere Darstellung des Dom...

bernd authored 15 years ago

26)   $domain = (int) $domain;
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

27)   $result = db_query("SELECT id, hostname FROM mail.mailman_domains WHERE domain=?", array($domain));
bernd Bessere Darstellung des Dom...

bernd authored 15 years ago

28)   $ret = array();
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

29)   while ($line = $result->fetch())
bernd Bessere Darstellung des Dom...

bernd authored 15 years ago

30)   {
31)     $ret[] = $line;
32)   }
33)   return $ret;
34) }
35) 
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

36) function dns_in_use($domain)
37) {
38)   if ( ! in_array('dns', config('modules')))
39)     return false;
40)   $domain = (int) $domain;
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

41)   $result = db_query("SELECT id FROM dns.custom_records WHERE domain=?", array($domain));
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

42)   return ($result->rowCount() > 0);
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

43) }
44) 
45) 
46) function mail_in_use($domain)
47) {
48)   if ( ! in_array('email', config('modules')))
49)   {
50)     return false;
51)   }
52)   $domain = (int) $domain;
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

53)   $result = db_query("SELECT mail FROM kundendaten.domains WHERE id=?", array($domain));
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

54)   if ($result->rowCount() < 1)
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

55)     system_failure("Domain not found");
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

56)   $d = $result->fetch();
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

57)   if ($d['mail'] == 'none')
58)     return false; // manually disabled
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

59)   $result = db_query("SELECT id FROM mail.virtual_mail_domains WHERE domain=?", array($domain));
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

60)   if ($result->rowCount() < 1)
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

61)     return true; // .courier
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

62)   $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));
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

63)   return ($result->rowCount() > 0);
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

64) }
65) 
Bernd Wurst Zeige Mail-Deeplink korrekt...

Bernd Wurst authored 6 years ago

66) function count_vmail($domain) {
67)     $domain = (int) $domain;
68)     $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));
69)     return $result->rowCount();
70) }
71) 
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

72) function web_in_use($domain)
73) {
74)   if ( ! in_array('vhosts', config('modules')))
75)     return false;
76) 
77)   $domain = (int) $domain;
78) 
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

79)   $result = db_query("SELECT id FROM kundendaten.domains WHERE id=? AND webserver=1", array($domain));
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

80)   if ($result->rowCount() < 1)
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

81)     return false;
82) 
Bernd Wurst Einige Statements auf Prepa...

Bernd Wurst authored 10 years ago

83)   $result = db_query("SELECT id FROM vhosts.vhost WHERE domain=?", array($domain));
84)   $result2 = db_query("SELECT id FROM vhosts.alias WHERE domain=?", array($domain));
Bernd Wurst Umstellung auf PDO-Datenban...

Bernd Wurst authored 10 years ago

85)   return ($result->rowCount() > 0 || $result2->rowCount() > 0);
bernd Wirkliche nutzung der Domai...

bernd authored 14 years ago

86) }
bernd Bessere Darstellung des Dom...

bernd authored 15 years ago

87) 
Bernd Wurst Domain-Update (Ownerchange)...

Bernd Wurst authored 6 years ago

88) function domain_ownerchange($fqdn, $owner, $admin_c) 
89) {
90)     $cid = (int) $_SESSION['customerinfo']['customerno'];
Bernd Wurst Zuverlässigeres Logging bei...

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

98) }
99) 
bernd Bessere Darstellung des Dom...

bernd authored 15 years ago

100) 
Bernd Wurst Aktualisiere Domain- und In...

Bernd Wurst authored 6 years ago

101) function update_possible($domain) {
102)     $dom = new Domain((int) $domain);
103)     if ($dom->provider != 'terions' || $dom->billing=='external') {
104)         // Domain nicht über uns verwaltet
Bernd Wurst Zuverlässigeres Logging bei...

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

112)         return false;
113)     }
114)     $data = $result->fetch();
115)     if ($data['aenderung_eigentuemer'] != NULL || $data['ruecksprache'] == 'Y') {
Bernd Wurst Zuverlässigeres Logging bei...

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

117)         // Endung mit speziellen Eigenheiten
118)         return false;
119)     }
Bernd Wurst Zuverlässigeres Logging bei...

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

121)     return true;
122) }
123) 
Bernd Wurst verify-Funktion um via DNS-...

Bernd Wurst authored 6 years ago

124) function unset_mailserver_lock($dom) {
125)     $id = $dom->id;
126)     db_query("UPDATE kundendaten.domains SET secret=NULL, mailserver_lock=0 WHERE id=?", array($id));
127) }
128) 
129) function create_domain_secret($dom) {
130)     $id = $dom->id;
131)     $secret = md5(random_string(20));
132)     db_query("UPDATE kundendaten.domains SET secret=? WHERE id=?", array($secret, $id));
133)     $dom->secret = $secret;
134)     return $secret;
135) }
136) 
Bernd Wurst Bestätige eine Domain ohne...

Bernd Wurst authored 6 years ago

137) 
138) function get_auth_dns($domainname, $tld) {
Bernd Wurst verify-Funktion um via DNS-...

Bernd Wurst authored 6 years ago

139)   $domain=idn_to_ascii($domainname.".".$tld, 0, INTL_IDNA_VARIANT_UTS46);
140) 
141)   $resp = shell_exec('dig @a.root-servers.net. +noall +authority -t ns '.$tld.'.');
142)   $line = explode("\n", $resp, 2)[0];
143)   $NS = preg_replace("/^.*\\sIN\\s+NS\\s+(\\S+)$/", '\1', $line);
144) 
145)   $resp = shell_exec('dig @'.$NS.' -t ns '.$domain.'.');
146)   $lines = explode("\n", $resp);
147)   
148)   $NS = NULL;
149)   $NS_IP = NULL;
150)   $sec = NULL;
151)   foreach ($lines as $l) {
152)       if (preg_match("/;; AUTHORITY SECTION:.*/", $l)) {
153)           $sec = 'auth';
154)       } elseif (preg_match("/;; ADDITIONAL SECTION:.*/", $l)) {
155)           $sec = 'add';
156)       }
157)       if ($sec == 'auth' && preg_match("/^.*\\sIN\\s+NS\\s+\\S+$/", $l)) {
Bernd Wurst Entferne Punkt am Ende der...

Bernd Wurst authored 6 years ago

158)           $NS = preg_replace("/^.*\\sIN\\s+NS\\s+(\\S+)\\.$/", '\1', $l);
Bernd Wurst verify-Funktion um via DNS-...

Bernd Wurst authored 6 years ago

159)       }
160)       if ($sec == 'add' && $NS && preg_match("/^.*\\sIN\\s+A\\s+\\S+$/", $l)) {
161)           $NS_IP = preg_replace("/^.*\\sIN\\s+A\\s+(\\S+)$/", '\1', $l);
162)       }
163)   }
Bernd Wurst Bestätige eine Domain ohne...

Bernd Wurst authored 6 years ago

164)   return array("$NS" => $NS_IP);
165) }
166) 
Bernd Wurst verify-Funktion um via DNS-...

Bernd Wurst authored 6 years ago

167) 
Bernd Wurst Zeige die Optionen zur Prüf...

Bernd Wurst authored 6 years ago

168) function own_ns() {
169)     $auth = dns_get_record(config('masterdomain'), DNS_NS);
170)     $own_ns = array();
171)     foreach ($auth as $ns) {
172)         $own_ns[] = $ns['target'];
173)     }
174) 
175)     return $own_ns;  
176) }
177) 
178) 
179) 
180) 
Bernd Wurst Bestätige eine Domain ohne...

Bernd Wurst authored 6 years ago

181) function has_own_ns($domainname, $tld)
182) {
183)   $nsdata = get_auth_dns($domainname, $tld);
184)   $NS = NULL;
185)   foreach ($nsdata as $host => $ip) {
186)       $NS=$host;
187)   }
Bernd Wurst Zeige die Optionen zur Prüf...

Bernd Wurst authored 6 years ago

188)   if (in_array($NS, own_ns())) {
Bernd Wurst Bestätige eine Domain ohne...

Bernd Wurst authored 6 years ago

189)       DEBUG('Domain hat unsere DNS-Server!');
190)       return true;
Bernd Wurst verify-Funktion um via DNS-...

Bernd Wurst authored 6 years ago

191)   }
Bernd Wurst Bestätige eine Domain ohne...

Bernd Wurst authored 6 years ago

192)   return false;
193) }
194) 
Bernd Wurst verify-Funktion um via DNS-...

Bernd Wurst authored 6 years ago

195) 
Bernd Wurst Bestätige eine Domain ohne...

Bernd Wurst authored 6 years ago

196) function get_txt_record($hostname, $domainname, $tld) {
197)   $domain=idn_to_ascii($domainname.".".$tld, 0, INTL_IDNA_VARIANT_UTS46);
198)   $nsdata = get_auth_dns($domainname, $tld);
199)   $NS = NULL;
200)   foreach ($nsdata as $host => $ip) {
201)       $NS = $host;
202)       if ($ip) {
203)           $NS = $ip;
204)       }
205)   }
Bernd Wurst verify-Funktion um via DNS-...

Bernd Wurst authored 6 years ago

206)   DEBUG('dig @'.$NS.' +short -t txt '.$hostname.'.'.$domain.'.');
207)   $resp = shell_exec('dig @'.$NS.' +short -t txt '.$hostname.'.'.$domain.'.');
208)   $TXT = trim($resp, "\n \"");
209)   DEBUG($TXT);
210)   return $TXT;
211) }
212) 
213) 
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

214) function list_useraccounts()
215) {
216)   $customerno = (int) $_SESSION['customerinfo']['customerno'];
217)   $result = db_query("SELECT uid,username,name FROM system.useraccounts WHERE kunde=?", array($customerno));
218)   $ret = array();
219)   while ($item = $result->fetch())
220)   {
221)     $ret[] = $item;
222)   }
223)   DEBUG($ret);
224)   return $ret;
225) }
226) 
227) 
Bernd Wurst Änderung des betreffenden U...

Bernd Wurst authored 6 years ago

228) function change_user($domain, $uid) 
229) {
230)     $domain = new Domain($domain);
231)     $domain->ensure_customerdomain();
232)     $targetuser = NULL;
233)     $useraccounts = list_useraccounts();
234)     foreach ($useraccounts as $u) {
235)         if ($u['uid'] == $uid) {
236)             $targetuser = $u['uid'];
237)             break;
238)         }
239)     }
240)     if (! $targetuser) {
241)         system_failure("Ungültiger Useraccount!");
242)     }
243)     db_query("UPDATE kundendaten.domains SET useraccount=? WHERE id=?", array($targetuser, $domain->id));
244) }
245) 
Bernd Wurst Wenn die E-Mail-Funktion ko...

Bernd Wurst authored 6 years ago

246) 
Bernd Wurst Lasse die API bestimmen was...

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

248) {
Bernd Wurst Lasse die API bestimmen was...

Bernd Wurst authored 6 years ago

249)   $tld = filter_input_hostname($tld);
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

250)   $cid = (int) $_SESSION['customerinfo']['customerno'];
251) 
Bernd Wurst Lasse die API bestimmen was...

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

253) 
Bernd Wurst hardening domain input (II)

Bernd Wurst authored 6 years ago

254)   $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));
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

255)   if ($result->rowCount() != 1) {
Bernd Wurst hardening domain input (II)

Bernd Wurst authored 6 years ago

256)     $result = db_query("SELECT tld, gebuehr, `interval`, setup FROM misc.domainpreise WHERE tld=:tld AND ruecksprache='N'", array(":tld" => $tld));
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

257)   }
258)   if ($result->rowCount() != 1) {
Bernd Wurst Fehlermeldung bei nicht aut...

Bernd Wurst authored 6 years ago

259)     return false;
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

260)   }
261)   $temp = $result->fetch();
262)   $data["gebuehr"] = $temp["gebuehr"];
Bernd Wurst hardening domain input (II)

Bernd Wurst authored 6 years ago

263)   $data["interval"] = $temp["interval"];
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

264)   $data["setup"] = ($temp["setup"] ? $temp["setup"] : 0.0);
265)   
266)   return $data;
267) }
268) 
Bernd Wurst Erste Vorbereitungen für Do...

Bernd Wurst authored 6 years ago

269) function set_domain_pretransfer($domain)
270) {
271)     $cid = (int) $_SESSION['customerinfo']['customerno'];
272)     $uid = (int) $_SESSION['userinfo']['uid'];
273)     $domain = (int) $domain;
274)     db_query("UPDATE kundendaten.domains SET status='pretransfer', dns=1 WHERE id=? AND kunde=?", 
275)             array($domain, $cid));
276) }
277) 
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

284)     $domain = (int) $domain;
285)     db_query("UPDATE kundendaten.domains SET status='prereg', dns=1 WHERE id=? AND kunde=?", 
286)             array($domain, $cid));
Bernd Wurst Wenn die E-Mail-Funktion ko...

Bernd Wurst authored 6 years ago

287) }
288) 
289) 
290) function insert_domain_external($domain, $dns = false, $mail = true)
Bernd Wurst Ermögliche das Hinzufügen e...

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

301)     logger(LOG_WARNING, 'modules/domains/include/domains', 'domains', 'Inserting external domain '.$info['domainNameUnicode']." DNS:{$dns} / Mail:{$mail}");
Bernd Wurst Lasse die API bestimmen was...

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

303)     db_query("INSERT INTO kundendaten.domains (status, kunde, useraccount, domainname, tld, billing, provider, dns, mail, mailserver_lock) VALUES 
304)         ('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

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

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

313)     return $id;
314) }
315) 
Bernd Wurst Transfer-Freigabe und Kündi...

Bernd Wurst authored 6 years ago

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

Bernd Wurst authored 6 years ago

319)     logger(LOG_WARNING, 'modules/domains/include/domains', 'domains', 'Deleting domain '.$id);
Bernd Wurst Transfer-Freigabe und Kündi...

Bernd Wurst authored 6 years ago

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