-
Notifications
You must be signed in to change notification settings - Fork 3
/
cfximport.php
executable file
·1858 lines (1704 loc) · 77.1 KB
/
cfximport.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#!/usr/bin/php
<?php
/** _ _ ___ __ _ (R)
* | | (_)_ _____ / __|___ _ _ / _(_)__ _
* | |__| \ V / -_) (__/ _ \ ' \| _| / _` |
* |____|_|\_/\___|\___\___/_||_|_| |_\__, |
* |___/
* @package cfximport
* @author Keppler IT GmbH <info@liveconfig.com>
* @copyright Copyright (c) 2009-2017 Keppler IT GmbH.
* @version 1.9
* --------------------------------------------------------------------------
* DIESE SOFTWARE WIRD "WIE SIE IST" UND AUSDRUECKLICH OHNE JEGLICHE
* EXPLIZITE ODER IMPLIZITE ZUSICHERUNGEN BEZUEGLICH IHRER FUNKTION,
* KORREKTHEIT ODER FEHLERFREIHEIT BEREITGESTELLT.
* JEGLICHE GEWAEHRLEISTUNG FUER DIREKTE ODER INDIREKTE SCHAEDEN -
* INSBESONDERE FUER SCHAEDEN AN ANDERER SOFTWARE, SCHAEDEN AN HARDWARE,
* SCHAEDEN DURCH NUTZUNGSAUSFALL ODER DURCH NOTWENDIGE
* DATENWIEDERHERSTELLUNG - WIRD AUSDRUECKLICH ABGELEHNT.
*
* Diese Software wurde mit groesster Sorgfalt erstellt, eventuelle Fehler
* koennen jedoch nie ausgeschlossen werden. Es kann kann daher keine Gewaehr
* fuer Ihre Daten uebernommen werden.
*
* Auf den Quell-Server ("Confixx") greift diese Software ausschliesslich
* LESEND zu. Auf den Ziel-Server ("LiveConfig") wird ueber dessen SOAP-API
* SCHREIBEND zugegriffen. Erzeugen Sie vorab also ein BACKUP des
* Zielsystems, oder testen Sie die Migration vorab auf einem "leeren"
* Server.
*
* Eine "in-place"-Migration wird ausdruecklich NICHT empfohlen ! ! !
*
* --------------------------------------------------------------------------
* Migrations-Tool zum Umzug der Benutzerdaten von Confixx zu LiveConfig®
* --------------------------------------------------------------------------
* Die neueste Version dieser Software sowie eine ausfuehrliche Anleitung
* finden Sie unter
*
* http://www.liveconfig.com/de/kb/5
*
* Hilfestellungen zur Verwendung erhalten Sie im LiveConfig-Forum unter
* http://www.liveconfig.com/de/forum
*
*
* Aufruf: php cfximport.php -c | -h | --check
* php cfximport.php <kunde> [ <kunde> ... | --all ]
* [ --webserver <server> ]
* [ --mailserver <server> ]
* [ --dbserver <server> ]
*
* <kunde> [ <kunde> ...] [ -a, --all ]
* Angabe der Reseller bzw. Kunden, die importiert werden
* sollen (Beispiele: siehe unten)
* Mit "-a" (oder "--all") werden alle Kunden eines
* Resellers mit importiert.
*
* Optionen:
* -h, --help Hilfe ausgeben
* -c, --config Confixx-Konfiguration wird ausgelesen (aus
* /root/confixx/confixx_main.conf, falls nicht vorhanden
* werden die entsprechenden Daten abgefragt).
* Anschliessend werden die Daten fuer den LiveConfig-Server
* abgefragt, und in der Datei "cfximport.conf" gespeichert
* --check Konfiguration pruefen (Verbindungsaufbau zur Confixx-
* Datenbank und zur LiveConfig-SOAP-API testen)
* -i Interaktiv: beim Anlegen eines neuen Kunden/Vertrags
* nach der neuen Kunden-/Vertragsnummer fragen
* --webserver <server>
* --mailserver <server>
* --dbserver <server>
* Mit diesen Optionen kann ein alternativer Zielserver
* fuer Webspace, E-Mails oder Datenbanken angegeben
* werden. Der Zielserver muss bereits in LiveConfig
* eingerichtet und zur Verwaltung aktiviert sein
* (benoetigt Business-Lizenz).
*
* --importlocked Angabe, ob auch gesperrte Kunden importiert werden sollen
* --newreseller=<R> Importierte Kunden werden in LiveConfig dem angegebenen
* Wiederverkäufer zugeordnet
* --importplans Nur relevant wenn --newreseller verwendet wird:
* Importiere auch die Hosting-Angebote des "Quell-Resellers"
* in den Account des LiveConfig-Ziel-Resellers
* --htdocs=<PFAD> setze <PFAD> als 'htdocs'-Verzeichnis (z.B. 'html')
* --kdnr auch die Kundennummer aus Confixx importieren
* --fixmailquota ueberbuchte Mailbox-Quota beruecksichtigen (die neue Mail-
* Quota wird so angepasst, dass alle Postfaecher importiert
* werden koennen)
* --mergemailaddr Wenn ein Confixx-Postfach mit genau *einer* darauf
* konfigurierten E-Mail-Adresse importiert wird, dann soll
* LiveConfig keine separate E-Mail-Weiterleitung anlegen,
* sondern die E-Mail-Adresse als "Alias" zum Postfach
* hinzufügen
* --php=<modus> Benutze <modus> als Standard-Einstellung für den PHP Modus.
* Entweder suphp, fcgi oder modphp, default: suphp
* --verbose Ausfuehrlichere Informationen waehrend des Imports ausgeben
* --ignore=<Liste> ignoriere die angegebenen Vertragsnamen (Komma-getrennt)
* --permissive beim Import von Kontaktdaten nicht auf Duplikate prüfen
* und Eingabefehler (z.B. Ort/PLZ vertauscht) ignorieren
*
* DEBUG=1 schaltet zusaetzliche Debugausgaben an
*
* Beim Import von E-Mail-Postfächern aus Confixx wird automatisch eine Datei
* namens "cfx-mail.log" angelegt, in der Einträge in folgendem Format
* erzeugt werden:
* <Confixx_Postfachname><TAB><LiveConfig-Postfach-Verzeichnis>
* Beispiel:
* web9p3 /var/mail/web9/3
* Somit können nach dem Import der Postfächer z.B. mittels 'rsync' auch die
* Inhalte kopiert werden.
*
* --------------------------------------------------------------------------
* BEISPIELE:
*
* Import des Resellers "res1" (ohne dessen Kunden):
* php cfximport.php res1
*
* Import der Kunden web1 und web23 (deren zugehoeriger Reseller wird
* automatisch herausgesucht, und diesen dann auch jeweils auf dem
* LiveConfig-Server zugeordnet; falls diese dort noch nicht existieren, wird
* eine Fehlermeldung ausgegeben):
* php cfximport.php web1 web23
*
* Import des Resellers "res1" und all dessen Endkunden:
* php cfximport.php res1 --all
*
* --------------------------------------------------------------------------
* "LiveConfig" ist eine eingetragene Marke der Keppler IT GmbH, Erlangen, DE
* --------------------------------------------------------------------------
*/
# OPTIONAL: WSDL-Caching deaktivieren (nur wenn sich im WSDL während des Imports
# etwas geändert hat, z.B. nach einem LiveConfig-Update)
# ini_set("soap.wsdl_cache_enabled", "0");
$CONFIG = array();
$CFX_CONFIG = array();
$CONFIG_FILE = "cfximport.conf";
$CFX_CONFIG_FILE = "/root/confixx/confixx_main.conf";
$OPTS = array(); # Array mit Kommandozeilen-Optionen
$LOGGING = getenv('DEBUG');
# kein Parameter angegeben, dann Hilfe ausgeben
if ($argc == 1) {
help_message();
exit(1);
}
# Parsen der angegebenen Optionen und Parameter
$OPTS = parseParameters(array('h', 'help', 'check', 'c', 'config', 'a', 'all', 'i', 'importlocked', 'importplans', 'kdnr', 'fixmailquota', 'mergemailaddr', 'php', 'verbose', 'ignore', 'permissive'));
$action = 'import';
foreach ($OPTS as $key => $value) {
switch ("$key") {
# Hilfe ausgeben
case 'h':
case "help":
help_message();
exit(0);
# Serververbindung testen:
case 'check':
if ($action != 'import') {
die("Ungueltige Verwendung von --check!\n");
}
$action = "check";
break;
# Konfiguration einlesen
case 'c':
case 'config':
# Falls schon check aufgerufen wurde, abbrechen
if ($action != 'import') {
die("Ungueltige Verwendung von --check!\n");
}
$action="config";
break;
case 'a':
$OPTS['all'] = $value;
break;
}
if (is_int($key)) {
$OPTS['customers'][] = $value;
unset($OPTS[$key]);
}
}
if (!isset($OPTS['webserver'])) $OPTS['webserver'] = 'localhost';
if (!isset($OPTS['mailserver'])) $OPTS['mailserver'] = 'localhost';
if (!isset($OPTS['dbserver'])) $OPTS['dbserver'] = 'localhost';
if (!isset($OPTS['all'])) $OPTS['all'] = false;
if (!isset($OPTS['i'])) $OPTS['i'] = false;
if (!isset($OPTS['importlocked'])) $OPTS['importlocked'] = false;
if (!isset($OPTS['importplans'])) $OPTS['importplans'] = false;
if (!isset($OPTS['customers'])) $OPTS['customers'] = array();
if (!isset($OPTS['htdocs'])) $OPTS['htdocs'] = 'htdocs';
if (!isset($OPTS['kdnr'])) $OPTS['kdnr'] = false;
if (!isset($OPTS['fixmailquota'])) $OPTS['fixmailquota'] = false;
if (!isset($OPTS['mergemailaddr'])) $OPTS['mergemailaddr'] = false;
if (!isset($OPTS['verbose'])) $OPTS['verbose'] = false;
if (!isset($OPTS['dnstemplate'])) $OPTS['dnstemplate'] = 'Standard';
$OPTS['defaultmailquota'] = -1; # falls kein Mailquota beim Anbieter gesetzt ist
if (!isset($OPTS['php'])) {
$OPTS['php'] = 1; # 1 == suphp, current default
}
else {
switch ($OPTS['php']) {
default:
case 'suphp':
$OPTS['php'] = 1;
break;
case 'fcgi':
$OPTS['php'] = 2;
break;
case 'modphp':
$OPTS['php'] = 3;
break;
}
}
# Ab hier erfolgt die Unterscheidung, welche Aktion durchgefuehrt werden soll
# --------------------------------------------------------------------------
# Konfiguration der Zugangsdaten zu den Servern (Confixx und Liveconfig)
# Option: -c oder --config
#
# Zuerst wird geschaut, ob es eine Configurationsdatei von confixx gibt.
# Falls ja, werden Daten daraus geleseen
# Falls nein, alle Daten werden abgefragt
# --------------------------------------------------------------------------
if ($action == "config") {
if (file_exists($CFX_CONFIG_FILE)) {
# Confixx-Konfiguration aus confixx.conf laden
$CONFIG = _read_config($CFX_CONFIG_FILE);
} else {
# Confixx-Konfiguration manuell abfragen
$CONFIG = _get_config($CONFIG_FILE);
}
# LiveConfig-Konfiguration abfragen
_get_LC_config();
# Daten pruefen und ggf. in Konfigurationsdatei schreiben
_check_config($CONFIG, $CONFIG_FILE);
exit(0);
}
# --------------------------------------------------------------------------
# Verbindungsaufbau mit den Servern
# LiveConfig: SOAP-Funktion "TestSayHello()" aufrufen
# Confixx: Verbindung mit der Datenbank und Lesen der Anzahl der Kunden
# Option: --check
# --------------------------------------------------------------------------
if ($action == "check") {
# Zuerst alle Konfigurationsdaten aus $CONFIG_FILE lesen
if (file_exists($CONFIG_FILE)) {
# Verbindungsdaten aus der Datei lesen
$CONFIG = _read_config($CONFIG_FILE);
} else {
print "Fehler: Configfile <" . $CONFIG_FILE . "> existiert nicht! Bitte rufen sie $argv[0] --config auf!\n";
exit (1);
}
# Verbindung zum LiveConfig-Server
$client = _connectLC();
# Testen der Erreichbarkeit von LiveConfig
$status = _checkLCServer();
if ($status) {
print "Verbindung zum LiveConfig-Server erfolgreich getestet.\n";
} else {
print "Der LiveConfig-Server ist fehlerhaft angegeben oder nicht erreichbar!\n";
exit(1);
}
# Testen der Erreichbarkeit von Confixx
$status = _checkCFXServer($CONFIG);
if ($status) {
print "Verbindung zur Confixx-Datenbank erfolgreich getestet.\n";
} else {
print "Der Confixx-Server ist fehlerhaft angegeben, bitte rufen Sie --config erneut auf!\n";
exit(1);
}
exit(0);
}
# --------------------------------------------------------------------------
# Importieren von Kunden und Resellern
# Option: --all bedeutet, dass alle Kunden dieses Resellers importiert werden sollen
# keine Option: Auflistung aller einzelnen Kunden,Reseller zum importieren
# Vorgehen:
# 1. ist ein Reseller mit dem Namen vorhanden?
# - ja: Falls --all, dann Reseller importieren und anschliessend Schleife ueber alle Kunden
# - nein: ist ein Kunde mit dem Namen vorhanden?
# 2. Reseller des Kunden heraussuchen und importieren
# 3. Fehlermeldung wenn weder Kunde noch Reseller vorhanden
# --------------------------------------------------------------------------
if ($action == "import") {
echo '# cfximport.php - $Revision: 128 $', "\n";
# Verbindungsdaten aus der Datei lesen
$CONFIG = _read_config($CONFIG_FILE);
# Verbindung zum LiveConfig-Server (SOAP-Client)
$client = _connectLC();
# Verbindung zur Confixx-Datenbank
$connection = mysql_connect($CONFIG['dbServer'], $CONFIG['dbUser'], $CONFIG['dbPw']) or die ("Verbindung zur MySQL-Datenbank fehlgeschlagen");
mysql_select_db($CONFIG['dbDB'], $connection) or die("Konnte die Datenbank nicht waehlen.");
mysql_set_charset('utf8');
$anbieter = '';
$result = array ();
$kunde = array();
$maillog = NULL;
# Standard-Werte für Postfach-Quota auslesen:
$sql = "SELECT popmaxkb FROM admin";
$res = mysql_query($sql) or die("Anfrage 'admin' nicht erfolgreich");
if ($row = mysql_fetch_assoc($res)) {
if (isset($row['popmaxkb'])) {
$OPTS['defaultmailquota'] = $row['popmaxkb'];
print "# admin.popmaxkb=${row['popmaxkb']}\n";
} else {
print "# admin.popmaxkb=UNKNOWN\n";
}
}
mysql_free_result($res);
# Falls Option --all gesetzt ist und keine Reseller angegeben wurden
# Liste der Reseller auslesen und an foreach übergeben
if ($OPTS['all'] && count($OPTS['customers']) == 0) {
print "Alle Reseller sollen importiert werden\n";
$sql = "SELECT anbieter FROM anbieter";
$cust_query = mysql_query($sql) or die("Anfrage 'Anbieter' nicht erfolgreich");
while($row = mysql_fetch_assoc($cust_query)) {
$OPTS['customers'][] = $row['anbieter'];
}
mysql_free_result($cust_query);
}
# Importieren des/der Kunden/Reseller
# Im $OPTS['customers'] sind alle angegebenen zu importierenden Kunden gespeichert,
# deshalbe eine Schleife ueber das Array
foreach ($OPTS['customers'] as $cust){
# Zuerst schauen, ob ein Reseller vorhanden ist
logprint ("Reseller $cust suchen");
$sql = "SELECT * FROM anbieter WHERE anbieter='" . mysql_real_escape_string($cust) ."'";
$result_query = mysql_query($sql) or die("Anfrage 'Anbieter' nicht erfolgreich");
$rows = mysql_num_rows($result_query);
# Falls ein Reseller vorhanden ist wird der gesamte Datensatz gespeichert
if ($rows > 0) {
$result = mysql_fetch_assoc($result_query);
# Da hier schon eine Datenbankabfrage erfolgte, koennen wir auch gleich den
# Datensatz fuer den Reseller speichern
$anbieter = $result;
} else {
# Es ist kein Reseller vorhanden, also schauen, ob ein Kunde vorhanden ist
logprint("Kunden $cust suchen");
$sql = "select * from kunden where kunde='" . mysql_real_escape_string($cust) ."'";
$result_query = mysql_query($sql) or die("Anfrage 'kunde' nicht erfolgreich");
$rows = mysql_num_rows($result_query);
# Falls ein Kunde vorhanden ist, dann kann man den Anbieter auslesen
if ($rows == 1) {
# Kunde vorhanden
logprint("Reseller fuer Kunden $cust suchen");
$kunde = mysql_fetch_assoc($result_query);
# Daten fuer den Reseller des Kunden heraussuchen aus der Datenbank
$sql = "select * from anbieter where anbieter='" . $kunde['anbieter'] ."';";
$result_query = mysql_query($sql) or die("Anfrage 'Reseller des Kunden' war nicht erfolgreich");
# Speichern des Datensatzes in $anbieter
$anbieter = mysql_fetch_assoc($result_query);
# Datensatz Reseller/Kunde ist ermittelt
print "Kunde: " . $kunde['kunde'] . " Reseller: " . $anbieter['anbieter'] ."\n";
} else {
# Wenn man hier ankommmt, gibt es weder Kunde noch Anbieter - ueberspringen
print "Fehler: Es gibt weder Kunde noch Reseller: $cust\n";
continue;
}
}
################################################
# Ab hier erfolgt der Import nach Liveconfig
################################################
if (isset($OPTS['newreseller'])) {
# einem anderen Reseller (oder dem Admin) in LiveConfig zuordnen
$newreseller = $OPTS['newreseller'];
} else {
# 1:1 dem entsprechenden Reseller in LiveConfig zuordnen:
$newreseller = $anbieter['anbieter'];
}
if ($newreseller == 'admin') {
$rcustomer_id = NULL;
} else {
# Zunaechst schauen, ob es den Reseller schon in LiveConfig gibt
$response = _getHostingSubscriptionGet($newreseller);
if ($response == null) {
# nein, Resellervertrag existiert noch nicht, also anlegen.
print "Importiere Reseller: ". $anbieter['anbieter'] . " ... ";
list($rcustomer_id, $rcontact_id) = _importCustomer($anbieter);
print "ok.\n";
# nun einen ersten Benutzer für den Reseller anlegen (res#)
try {
$params = array('auth' => createToken('UserAdd', NULL),
'customer' => $rcustomer_id,
'contact' => $rcontact_id,
'login' => $anbieter['anbieter'],
'password' => $anbieter['longpw']
);
$response = $client->UserAdd($params);
$user_id = $response->id;
} catch (SoapFault $soapFault) {
_traceSoapException();
die("Fehler beim Aufruf von UserAdd(): " . $soapFault->faultstring . "\n");
}
print "\tUser erfolgreich angelegt\n";
logprint("User-ID: $user_id\n");
# Hostingvertrag mit in Confixx gespeicherten Daten anlegen
$hostingpaket = _setHostingPlanAddData($anbieter);
# weitere Daten fuer Soapaufruf fuellen
$hostingpaket['customerid'] = $rcustomer_id;
# im Falle eines Resellers muss dieser Wert ungleich NULL sein
$hostingpaket['maxcustomers'] = $anbieter['maxkunden'];
$hostingpaket['subscriptionname'] = $anbieter['anbieter'];
$hostingpaket['password'] = $anbieter['longpw'];
# if (isset($anbieter['maxwebapp'])) {
# $hostingpaket['apps'] = $anbieter['maxwebapp'];
# }
# Angaben zu den Servern (Mail, Web, Datenbank-Server)
$hostingpaket['webserver'] = $OPTS['webserver'];
$hostingpaket['mailserver'] = $OPTS['mailserver'];
$hostingpaket['dbserver'] = $OPTS['dbserver'];
# wenn interaktiver Modus, dann nach (neuer) Vertragsnummer fragen:
if ($OPTS['i']) {
print "Vertragsnummer [" . $hostingpaket['subscriptionname'] . "]: ";
$tmp = trim(fgets(STDIN));
if ($tmp != "") {
$hostingpaket['subscriptionname'] = $tmp;
}
}
if( $hostingpaket['php'] > 0 ){
$hostingpaket['php'] = $OPTS['php'];
}
# Reseller-Vertrag anlegen:
$hostingpaket['auth'] = createToken('HostingSubscriptionAdd');
try {
$response = $client->HostingSubscriptionAdd($hostingpaket);
} catch (SoapFault $soapFault) {
_traceSoapException();
die("Fehler beim Aufruf von HostingSubscriptionAdd(): " . $soapFault->faultstring . "\n");
}
# Diese ID wird fuer das spaetere Anlegen des Kunden benoetigt
$contract_id = $response->id;
} else {
# Reseller ist schon importiert
logprint("Es gibt den Reseller schon!");
$rcustomer_id = $response->customerid;
}
logprint ("Contract-ID Reseller $newreseller: $rcustomer_id");
}
if (!isset($OPTS['newreseller']) || $OPTS['importplans']) {
# wenn der Vertrag *keinem* anderen Reseller zugewiesen wird, *oder* wenn die
# Angebote ausdrücklich importiert werden sollen (--importplans), dann tu' das:
$sql = "SELECT * FROM angebote where anbieter='" . $anbieter['anbieter'] . "';";
$angebote_query = mysql_query($sql) or die("Anfrage 'Angebote' nicht erfolgreich");
while ($angebot = mysql_fetch_array($angebote_query)){
# Angebot anlegen
# Nachsehen, ob es das Angebot $angebot['name'] schon in Liveconfig gibt
$params = array('auth' => createToken('HostingPlanGet', $rcustomer_id),
'name' => $angebot['name']
);
$response = $client->HostingPlanGet($params);
$count = count((array)$response->plans);
if ($count == 1) {
# Angebot existiert schon
logprint("Angebot '" . $response->plans->HostingPlanDetails->name . "' existiert schon!");
continue;
} else {
$data = _setHostingPlanAddData($angebot);
if( $data['php'] > 0 ) {
$data['php'] = $OPTS['php'];
}
$data['auth']=createToken('HostingPlanAdd',$rcustomer_id);
$response = $client->HostingPlanAdd($data);
$hosting_id = $response->id;
logprint("Hostingplan-ID: $hosting_id");
print "Angebot: ". $angebot['name'] . " erfolgreich importiert\n";
}
}
mysql_free_result($angebote_query);
}
# Auslesen aller Hostingpakete des Resellers (eigene und die von Confixx)
# fuer die Ermittlung des am besten passenden Hostingpaketes
$params = array('auth' => createToken('HostingPlanGet', $rcustomer_id),
'name' => NULL
);
$response = $client->HostingPlanGet($params);
$plans = $response->plans;
if ((count((array)$plans)) == 0) {
print "Reseller hat kein Angebot\n";
$plans = NULL;
} else {
if (is_array($response->plans->HostingPlanDetails)) {
$plans = $response->plans->HostingPlanDetails;
}
logprint("Anzahl der Gesamt-Hostingangebote: " . count((array)$plans));
foreach ($plans as $plan) {
print "- Name: " . $plan->name . "\n";
}
}
######################################################
# Kunde(n) importieren nach LiveConfig
######################################################
# Daten fuer den Kunden aus Confixx lesen (Tabelle kunden)
# Falls --all gesetzt ist dann alle Kunden des Anbieters auslesen, sonst nur den einen
# Falls --importlocked gesetzt ist dann auch "gesperrte" Kunden importieren
$sql = "SELECT * FROM kunden WHERE anbieter='" . mysql_real_escape_string($anbieter['anbieter']) . "'";
if (isset($kunde['kunde'])) {
$sql .= " AND kunde='" . mysql_real_escape_string($kunde['kunde']) . "'";
} elseif (!$OPTS['all']) {
# kein Kunde gewählt und Option "--all" nicht gesetzt: abbrechen (in diesem Fall sollte
# wohl nur der Reseller importiert werden)
break;
}
if (!$OPTS['importlocked']) {
$sql .= " AND gesperrt=0";
}
$sql .= " ORDER BY anbieter, kunde";
$result_query = mysql_query($sql) or die("Anfrage 'Kunden des Resellers' nicht erfolgreich");
while ($result = mysql_fetch_assoc($result_query)) {
# Testen, ob es schon einen Vertrag fuer den $result['kunden'] gibt
$subscriptionname = $result['kunde'];
if (isset($OPTS['ignore']) && in_array($subscriptionname, split(',', $OPTS['ignore']))) continue;
# BEISPIEL: basieren auf Kundennummer automatisch setzen:
# $subscriptionname = 'k' . $result['kundennummer'];
# wenn interaktiver Modus, dann nach (neuer) Vertragsnummer fragen:
if ($OPTS['i']) {
print "Neue Vertragsnummer [" . $subscriptionname . "]: ";
$tmp = trim(fgets(STDIN));
if ($tmp != "") {
$subscriptionname = $tmp;
}
}
$response = _getHostingSubscriptionGet($subscriptionname, $rcustomer_id);
if ($response == null) {
print "Importe Kunde: " . $result['kunde'] . " ... ";
list($customer_id, $contact_id) =_importCustomer($result, $rcustomer_id);
print "ok\n";
###############################
# User anlegen
###############################
try {
$params = array('auth' => createToken('UserAdd', $rcustomer_id),
'customer' => $customer_id,
'contact' => $contact_id,
'login' => $subscriptionname,
'password' => $result['longpw']
);
$response = $client->UserAdd($params);
$user_id = $response->id;
} catch (SoapFault $soapFault) {
_traceSoapException();
die("Fehler beim Soapaufruf UserAdd: " . $soapFault->faultstring . "\n");
}
logprint("User-ID: $user_id\n");
print "\tUser angelegt\n";
###############################
# Hosting Vertrag anlegen
###############################
# Falls kein oder ein ungueltiges Quota angelegt ist, dann auf "unbegrenzt" setzen
if (isset($result['popmaxkb']) && $result['popmaxkb'] == 0) {
$result['popmaxkb'] = -1;
}
# Postfach-Quota ggf. anpassen:
if ($OPTS['fixmailquota'] && $result['popmaxkb'] > -1) {
$sql = "SELECT SUM(maxkb) AS MBQUOTA FROM pop3 WHERE kunde='" . $result['kunde'] . "'";
$res = mysql_query($sql);
if ($row = mysql_fetch_assoc($res)) {
if ($row['MBQUOTA'] > $result['popmaxkb']) {
$result['popmaxkb'] = $row['MBQUOTA'];
}
}
mysql_free_result($res);
}
# Hostingangebot finden
$hostingpaket = _findBestHostingPlan($plans, $result);
# Vertrag anlegen
$hostingpaket['subscriptionname'] = $subscriptionname;
$hostingpaket['password'] = $result['longpw'];
if ($newreseller == 'admin') {
# Server explizit wählen:
$hostingpaket['webserver'] = $OPTS['webserver'];
$hostingpaket['mailserver'] = $OPTS['mailserver'];
$hostingpaket['dbserver'] = $OPTS['dbserver'];
} else {
# Resellervertrag angeben
$hostingpaket['resalecontract'] = $newreseller;
}
$hostingpaket['customerid'] = $customer_id;
if (isset($result['awstats']) && $result['awstats'] == 1) {
$hostingpaket['webstats'] = 2; # AWStats einrichten
}
if( isset($hostingpaket['php']) AND $hostingpaket['php'] > 0 ) {
$hostingpaket['php'] = $OPTS['php'];
}
$hostingpaket['auth'] = createToken('HostingSubscriptionAdd', $rcustomer_id);
try {
$response = $client->HostingSubscriptionAdd($hostingpaket);
} catch (SoapFault $soapFault) {
_traceSoapException();
die("Fehler beim Aufruf von HostingSubscriptionAdd(): " . $soapFault->faultstring . "\n");
}
$subscriptionid = $response->id;
logprint("Subscription-ID: $subscriptionid");
print "\tVertrag angelegt (Owner: $newreseller, Angebot: " . (isset($hostingpaket['plan']) ? $hostingpaket['plan'] : '-individuell-') . ")\n";
###########################
# Domains einrichten
###########################
# Alle Domains auslesen fuer diesen Kunden
$sql = "SELECT domains.domain, pfad, richtigedomain, domains.kunde, domains.dns, dns.lastchange "
."FROM domains LEFT JOIN dns ON (domains.domain=dns.domain AND domains.kunde=dns.kunde) "
."WHERE domains.kunde='".$result['kunde']."' AND richtigedomain = 1";
$res = mysql_query($sql) or die("Anfrage 'Domains des Kunden' nicht erfolgreich");
$stddomain = NULL;
while ($row = mysql_fetch_array($res)){
if ($stddomain == NULL) $stddomain = $row['domain'];
$d_data['subscription']=$subscriptionname;
$d_data['domain']=$row['domain'];
$d_data['mail']=1;
$d_data['web']=$row['pfad'];
$d_data['auth']=createToken('HostingDomainAdd',$rcustomer_id);
if ($row['dns'] == 1) {
# auf eigenem DNS anlegen
$d_data['dnstemplate'] = $OPTS['dnstemplate'];
if (isset($row['lastchange'])) {
$d_data['serial'] = date('Ymd') . '01';
if ($d_data['serial'] <= $row['lastchange']) $d_data['serial'] = $row['lastchange'] + 1;
}
}
# -----------------------------
# Soapaufruf HostingDomainAdd
# -----------------------------
try {
$response = $client->HostingDomainAdd($d_data);
$domain_id = $response->id;
} catch (SoapFault $soapFault) {
_traceSoapException();
die("Error while calling Web Service HostingDomainAdd: " . $soapFault->faultstring . "\n");
}
print "\tDomain: " . $row['domain'] . " angelegt.\n";
}
mysql_free_result($res);
#################################
# Subomains einrichten
#################################
# Alle Subomains auslesen fuer diesen Kunden
$sql = "SELECT domain, pfad, richtigedomain, kunde FROM domains WHERE kunde='". $result['kunde'] ."' AND (richtigedomain = 0 OR richtigedomain = 2)";
$res = mysql_query($sql) or die("Anfrage 'Subdomains des Kunden' nicht erfolgreich");
while ($row = mysql_fetch_array($res)){
$d_data['subscription']=$subscriptionname;
$d_data['subdomain']=$row['domain'];
# pruefen, ob diese Subdomain in irgendeiner Mailadresse genutzt wird; falls ja, dann auch
# für E-Mails aktivieren:
$sql = "SELECT domain FROM email WHERE kunde='". $result['kunde'] ."' AND domain='" . mysql_real_escape_string($row['domain']) . "' LIMIT 1";
$res2 = mysql_query($sql) or die("Anfrage fehlgeschlagen: $sql");
if ($row2 = mysql_fetch_array($res2)) {
# ja, mindestens eine Adresse gefunden...
$d_data['mail']=1;
} else {
$d_data['mail']=0;
}
mysql_free_result($res2);
$d_data['web']=$row['pfad'];
$d_data['auth']=createToken('HostingSubdomainAdd',$rcustomer_id);
# ---------------------------------
# SOAP-Aufruf HostingSubdomainAdd()
# ---------------------------------
try {
$response = $client->HostingSubdomainAdd($d_data);
$subdomain_id = $response->id;
} catch (SoapFault $soapFault) {
_traceSoapException();
die("Error while calling Web Service HostingSubdomainAdd: " . $soapFault->faultstring . "\n");
}
print "\tSubDomain: " . $row['domain'] . " angelegt.\n";
}
mysql_free_result($res);
###################################
# Cronjobs einrichten
###################################
# Cronjobfile auslesen fuer diesen Kunden
$sql = "SELECT cronfile FROM cronjobs WHERE kunde='" . $result['kunde'] ."'";
$res = mysql_query($sql) or die("Anfrage 'Cronjobs des Kunden' nicht erfolgreich");
if ($row = mysql_fetch_assoc($res)) {
$data = preg_split("/\r?\n/", $row['cronfile'], NULL, PREG_SPLIT_NO_EMPTY);
foreach ($data as $line) {
# Kommentare und leere Zeilen weglassen
if (preg_match('/^\s*(#|$)/', $line)) continue;
list($min, $hour, $dom, $month, $dow, $command) = preg_split("/\s+/", trim($line), 6);
# Verzeichnisnamen von $command anpassen: /var/www/web#/html/ -> /var/www/web#/htdocs/
while (preg_match('/\/var\/www\/([^\/]+)\/html(\/.*)?$/', $command)) {
$command = preg_replace('/\/var\/www\/([^\/]+)\/html(\/.*)?$/', '/var/www/$1/' . $OPTS['htdocs'] . '$2', $command);
}
$cron['minute'] = trim($min);
$cron['hour'] = trim($hour);
$cron['day'] = trim($dom);
$cron['month'] = trim($month);
$cron['weekday'] = trim($dow);
$cron['command'] = trim($command);
$cron['active'] = 1;
$cron['subscription'] = $subscriptionname;
$cron['auth'] = createToken('HostingCronAdd', $rcustomer_id);
# -----------------------------
# SOAP-Aufruf HostingCronAdd()
# -----------------------------
try {
$response = $client->HostingCronAdd($cron);
$cronjob_status = $response->status;
} catch (SoapFault $soapFault) {
_traceSoapException();
die("Error while calling Web Service HostingCronAdd: " . $soapFault->faultstring . "\n");
}
print "\tCronjob eingerichtet\n";
}
}
mysql_free_result($res);
#############################
# Datenbanken einrichten
#############################
# Einrichten der Datenbank zum Vertrag
# erst MySQL-Passwort auslesen:
$pwd = NULL;
$sql = "SELECT Password from mysql.user where User='" . $result['kunde'] . "' LIMIT 1";
$res = mysql_query($sql) or die ("Fehler beim Auslesen des Datenbankpassworts: " . mysql_error());
if ($row = mysql_fetch_assoc($res)) {
$pwd = $row['Password'];
if (strlen($pwd) == 16) {
# vor-gehashtes MySQL 4.x-Passwort
$pwd = "MYSQL:" . $pwd;
}
}
mysql_free_result($res);
# dann Liste aller MySQL-Datenbanken dieses Kunden auslesen:
$sql = "select dbname, dbext, kommentar from mysql_datenbanken where kunde ='". $result['kunde'] ."'";
$res = mysql_query($sql) or die("Anfrage 'Datenbanken des Kunden' nicht erfolgreich");
while ($row = mysql_fetch_assoc($res)){
if ($pwd == NULL) {
print "\tFEHLER: kann MySQL-Datenbank '${row['dbname']}' nicht importieren: MySQL-Benutzer ${result['kunde']} nicht gefunden!\n";
continue;
}
$dbase['subscription']=$subscriptionname;
$dbase['name']=$row['dbname'];
# OPTIONAL: Datenbank beim Import umbenennen:
# $dbase['name']=preg_replace('/^usr_web\d+_(.*)$/', "${subscriptionname}db$1", $dbase['name']);
$dbase['login']=$subscriptionname;
$dbase['create']=1;
$dbase['extern']=$row['dbext'];
$dbase['comment']=$row['kommentar'];
$dbase['password']=$pwd;
$dbase['auth']=createToken('HostingDatabaseAdd',$rcustomer_id);
# ---------------------------------
# SOAP-Aufruf HostingDatabaseAdd()
# ---------------------------------
try {
$response = $client->HostingDatabaseAdd($dbase);
$db_id = $response->id;
} catch (SoapFault $soapFault) {
_traceSoapException();
die("Error while calling Web Service HostingDatabaseAdd: " . $soapFault->faultstring . "\n");
}
print "\tDatenbank: ". $dbase['name']." angelegt\n";
}
mysql_free_result($res);
#############################
# Postfaecher einrichten
#############################
if ($stddomain != NULL) {
$MERGED = array();
# alle POP3-Postfächer auslesen und anlegen:
# $sql = "SELECT account, longpw, maxkb, spamfilter FROM pop3 WHERE kunde='" . $result['kunde'] . "'";
$sql = "SELECT account, longpw, maxkb, spamfilter, sp1.value AS spam_level, sp2.value AS spam_prefix "
."FROM pop3 "
."LEFT JOIN spampref sp1 on (pop3.account=sp1.username AND sp1.preference='required_score') "
."LEFT JOIN spampref sp2 on (pop3.account=sp2.username AND sp2.preference='rewrite_header') "
."WHERE kunde='" . $result['kunde'] . "'";
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)) {
$mbox = array();
$mbox['subscription'] = $subscriptionname;
$mbox['name'] = $row['account'];
$mbox['domain'] = $stddomain;
$mbox['mailbox'] = 1;
$mbox['password'] = $row['longpw'];
$mbox['quota'] = $row['maxkb'] / 1024;
if ($mbox['quota'] == 0) $mbox['quota'] = $OPTS['defaultmailquota'] / 1024;
$mbox['autoresponder'] = 0;
if (isset($row['spam_level']) && $row['spam_level'] > 0) {
# Spam-Filter aktivieren
$mbox['spamfilter'] = 1;
$mbox['spamwarn'] = $row['spam_level'];
$mbox['spamreject'] = 999;
if (isset($row['spam_prefix'])) {
if (preg_match('/^subject (.*)/', $row['spam_prefix'], $matches) > 0) {
if (isset($matches[1]) && $matches[1] != '') $mbox['spamprefix'] = $matches[1];
}
}
}
if ($OPTS['mergemailaddr']) {
# prüfen, ob es nur genau eine E-Mail-Adresse gibt, welche auf dieses
# Postfach verweist. Wenn ja, dann dessen Domain verwenden, und den "localpart"
# der E-Mail-Adresse als Alias ins Postfach aufnehmen:
$sql = "SELECT email.ident, email.prefix, email.domain, autoresponder.emailbetreff, autoresponder.emailtext, "
." (SELECT COUNT(*) FROM email_forward WHERE email_forward.pop3='" . $row['account'] . "' and email_forward.kunde='" . $result['kunde'] . "') AS addrcount "
."FROM email_forward, email LEFT JOIN autoresponder on (email.ident=autoresponder.ident) "
."WHERE email_forward.pop3='" . $row['account'] . "' and email_forward.kunde='" . $result['kunde'] . "' "
."AND email_forward.email_ident = email.ident";
$res2 = mysql_query($sql);
while ($row2 = mysql_fetch_assoc($res2)) {
if ($row2['addrcount'] <> 1) break; # mehr oder weniger als 1 Adresse konfiguriert
# genau eine E-Mail-Adresse definiert -> zusammenfassen:
$mbox['domain'] = $row2['domain'];
$mbox['alias'] = array($row2['prefix']);
if (isset($row2['emailbetreff'])) {
$mbox['autoresponder'] = 1;
$mbox['autosubject'] = $row2['emailbetreff'];
if ($mbox['autosubject'] == '') {
# ab LiveConfig 2.2.0: leeren Betreff durch "Re: ${subject}" ersetzen
$mbox['autosubject'] = 'Re: ${subject}';
}
# "emailtext" ist eine BLOB-Spalte -> daher manuell in UTF8 konvertieren!
$mbox['automessage'] = utf8_encode($row2['emailtext']);
}
array_push($MERGED, $row2['ident']);
break;
}
mysql_free_result($res2);
}
$mbox['auth'] = createToken('HostingMailboxAdd', $rcustomer_id);
# ---------------------------------
# SOAP-Aufruf HostingMailboxAdd()
# ---------------------------------
try {
$response = $client->HostingMailboxAdd($mbox);
$mbox_id = $response->id;
$mbox_folder = $response->folder;
} catch (SoapFault $soapFault) {
_traceSoapException();
die("Error while calling Web Service HostingMailboxAdd: " . $soapFault->faultstring . "\n");
}
print "\tPostfach: ". $row['account'] . "@$stddomain angelegt (/var/mail/" . $subscriptionname . "/$mbox_folder/)\n";
if ($maillog === NULL) {
$maillog = fopen("cfx-mail.log", "a");
}
fwrite($maillog, $row['account'] . "\t/var/mail/$subscriptionname/$mbox_folder\n");
}
mysql_free_result($res);
# E-Mail-Adressen (Weiterleitungen) anlegen:
$sql = "SELECT email.ident, email.prefix, email.domain, emailbetreff, emailtext "
."FROM email LEFT JOIN autoresponder ON (email.ident=autoresponder.ident) "
."WHERE email.kunde='" . $result['kunde'] . "'";
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)) {
if ($OPTS['mergemailaddr'] && in_array($row['ident'], $MERGED)) continue;
$fwd = array();
$fwd['subscription'] = $subscriptionname;
$fwd['name'] = $row['prefix'];
$fwd['domain'] = $row['domain'];
$fwd['mailbox'] = 0;
if (isset($row['emailbetreff'])) {
$fwd['autoresponder'] = 1;
$fwd['autosubject'] = $row['emailbetreff'];
if ($fwd['autosubject'] == '') {
# ab LiveConfig 2.2.0: leeren Betreff durch "Re: ${subject}" ersetzen
$fwd['autosubject'] = 'Re: ${subject}';
}
# "emailtext" ist eine BLOB-Spalte -> daher manuell in UTF8 konvertieren!
$fwd['automessage'] = utf8_encode($row['emailtext']);
} else {
$fwd['autoresponder'] = 0;
}
$fwd['auth'] = createToken('HostingMailboxAdd', $rcustomer_id);
$dest = array();
# für jede E-Mail-Adresse die Liste der Ziele auslesen:
$sql = "SELECT pop3 FROM email_forward WHERE email_ident=" . $row['ident'];
$res2 = mysql_query($sql);
while ($row2 = mysql_fetch_assoc($res2)) {
# Confixx erlaubt mehrere Empfängeradressen durch Semikolon getrennt - also mit explode() aufteilen:
foreach (explode(';', $row2['pop3']) as $addr) {
$addr = trim($addr); # Confixx erlaubt führende Leerzeichen bei Weiterleitungs-Zielen %-|
if (!strstr($addr, '@')) {
# lokales Postfach: Standard-Domain anfügen
$addr .= '@' . $stddomain;
}
# Confixx erlaubt Weiterleitungsziele im Format "Name <name@example.com>", LC nicht
elseif( preg_match('/.*<(.+)>$/', $addr, $addr_matches) === 1 ){
$addr = $addr_matches[1];
}
# Confixx erlaubt nicht standard-konforme Zeichen wie z.B. Leerzeichen und Tabulatoren, filtere diese
$addr = filter_var($addr, FILTER_SANITIZE_EMAIL);
# Confixx erlaubt scheinbar doppelte Ziele. LC nicht. Also entferne Duplikate:
if( ! in_array($addr, $dest) ){
array_push($dest, $addr);
}
}
}
mysql_free_result($res2);
if (count($dest) == 0) continue;
$fwd['forward'] = $dest;
# ---------------------------------
# SOAP-Aufruf HostingMailboxAdd()
# ---------------------------------
try {
$response = $client->HostingMailboxAdd($fwd);
$mbox_id = $response->id;
} catch (SoapFault $soapFault) {
_traceSoapException();
die("Error while calling Web Service HostingMailboxAdd: " . $soapFault->faultstring . "\n");
}
print "\tAdresse: ". $fwd['name'] . "@" . $fwd['domain'] . " (Ziele: " . implode('/', $dest) . ") angelegt\n";
}
mysql_free_result($res);
} # if ($stddomain != NULL) ...
#############################
# Verzeichnis-Passwortschutz
#############################
# alle geschützten Verzeichnisse durchgehen:
$sql = "SELECT pfad, bereich, login, longpw FROM pwschutz, users WHERE pwschutz.kunde='". $result['kunde'] ."' AND pwschutz.ident=users.parent";
$res = mysql_query($sql) or die("Fehler bei Datenbankabfrage");
while ($row = mysql_fetch_assoc($res)){
# .htpasswd-Benutzer anlegen:
$dbase['subscription']=$subscriptionname;
$dbase['login']=$row['login'];
$dbase['password']=$row['longpw'];
$dbase['auth']=createToken('HostingPasswordUserAdd',$rcustomer_id);
# ---------------------------------
# SOAP-Aufruf HostingPasswordUserAdd()
# ---------------------------------
try {
$response = $client->HostingPasswordUserAdd($dbase);
} catch (SoapFault $soapFault) {
_traceSoapException();
die("Error while calling Web Service HostingPasswordUserAdd: " . $soapFault->faultstring . "\n");
}
print "\t.htpasswd-Benutzer: ". $row['login']." angelegt\n";
# und Verzeichnisschutz einrichten:
$dbase['subscription']=$subscriptionname;
$dbase['path']='/' . $OPTS['htdocs'] . $row['pfad'];
$dbase['title']=$row['bereich'];
$dbase['login']=$row['login'];
$dbase['auth']=createToken('HostingPasswordPathAdd',$rcustomer_id);
# ---------------------------------
# SOAP-Aufruf HostingPasswordPathAdd()
# ---------------------------------
try {
$response = $client->HostingPasswordPathAdd($dbase);
} catch (SoapFault $soapFault) {
_traceSoapException();
die("Error while calling Web Service HostingPasswordPathAdd: " . $soapFault->faultstring . "\n");
}
print "\t -> Verzeichnis: ". $row['pfad']." hinzugefuegt\n";
}
mysql_free_result($res);
###################################
# FTP-Accounts
###################################
$sql = "SELECT account, longpw, pfad FROM ftp WHERE kunde='" . $result['kunde'] ."' AND gesperrt=0";
$res = mysql_query($sql) or die("Fehler bei Datenbankabfrage");
while ($row = mysql_fetch_assoc($res)) {
$dbase['subscription']=$subscriptionname;