forked from dtouzeau/artica-1.5
/
exec.zarafa-migrate.php
executable file
·141 lines (104 loc) · 4.36 KB
/
exec.zarafa-migrate.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
<?php
if(posix_getuid()<>0){die("Cannot be used in web server mode\n\n");}
include_once(dirname(__FILE__).'/ressources/class.templates.inc');
include_once(dirname(__FILE__).'/ressources/class.ldap.inc');
include_once(dirname(__FILE__).'/ressources/class.user.inc');
include_once(dirname(__FILE__).'/ressources/class.ini.inc');
include_once(dirname(__FILE__).'/ressources/class.mysql.inc');
include_once(dirname(__FILE__).'/framework/class.unix.inc');
include_once(dirname(__FILE__).'/framework/frame.class.inc');
if(preg_match("#--verbose#",implode(" ",$argv))){$GLOBALS["VERBOSE"]=true;}
if($argv[1]=="--upgrade-7"){upgradeTo7();exit;}
sync($argv[1]);
die();
function sync($ou){
if(!Build_pid_func(__FILE__,__FUNCTION__)){
writelogs(basename(__FILE__).":Already executed.. aborting the process",basename(__FILE__),__FILE__,__LINE__);
return;
}
$unix=new unix();
$imapsync=$unix->find_program("imapsync");
if(!is_file($unix->find_program("imapsync"))){
writelogs("Unable to stat imapsync",__FUNCTION__,__FILE__,__LINE__);
send_email_events("Could not migrate from cyrus to zarafa","Unable to stat imapsync tool,aborting","mailbox");
return;
}
$ou=base64_decode($ou);
$ldap=new clladp();
$members=$ldap->hash_users_ou($ou);
writelogs("Loading $ou organization ".count($members)." members imapsync=$imapsync",__FUNCTION__,__FILE__,__LINE__);
send_email_events("migration from cyrus to zarafa starting","Cyrus to zarafa starting (". count($members)." members)","mailbox");
while (list ($uid, $name) = each ($members) ){
if($uid==null){continue;}
$user=new user($uid);
send_email_events("migration from cyrus to zarafa starting","Cyrus to zarafa starting (". count($members)." members)","mailbox");
$cmdline="$imapsync --noauthmd5 --subscribe --host1 127.0.0.1 --port1 1143";
$cmdline=$cmdline." --user1 $uid --password1 $user->password --delete --expunge1";
$cmdline=$cmdline." --sep2 / --prefix2 \"\" --host2 127.0.0.1 --user2 $uid --password2 $user->password >/root/imapsync.$uid 2>&1";
writelogs("$cmdline",__FUNCTION__,__FILE__,__LINE__);
shell_exec($cmdline);
$datas=@file_get_contents("/root/imapsync.$uid");
if($GLOBALS["VERBOSE"]){
echo "$datas";
}
if(strlen($datas)>0){
send_email_events("$uid migration status",@file_get_contents("/root/imapsync.$uid"),"mailbox");
}
@unlink("/root/imapsync.$uid");
}
}
function update_pid($pid){
$q=new mysql();
$date=date('Y-m-d H:i:s');
$sql="UPDATE imapsync SET pid='$pid',zDate='$date' WHERE ID={$GLOBALS["unique_id"]}";
$q->QUERY_SQL($sql,"artica_backup");
}
function update_status($int,$text){
$q=new mysql();
$date=date('Y-m-d H:i:s');
$sql="UPDATE imapsync SET state='$int',state_event='$text',zDate='$date' WHERE ID={$GLOBALS["unique_id"]}";
$q->QUERY_SQL($sql,"artica_backup");
}
function cron(){
$unix=new unix();
$files=$unix->DirFiles("/etc/cron.d");
$php5=$unix->LOCATE_PHP5_BIN();
$sql="SELECT CronSchedule,ID FROM imapsync";
$q=new mysql();
$results=$q->QUERY_SQL($sql,"artica_backup");
if(!$q->ok){return null;}
while (list ($index, $line) = each ($files) ){
if($index==null){continue;}
if(preg_match("#^imapsync-#",$index)){
@unlink("/etc/cron.d/$index");
}
}
$sql="SELECT CronSchedule,ID FROM imapsync";
$q=new mysql();
$results=$q->QUERY_SQL($sql,"artica_backup");
while($ligne=@mysql_fetch_array($results,MYSQL_ASSOC)){
if(trim($ligne["CronSchedule"]==null)){continue;}
$f[]="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin:/usr/share/artica-postfix/bin";
$f[]="MAILTO=\"\"";
$f[]="{$ligne["CronSchedule"]} root $php5 ".__FILE__." --sync {$ligne["ID"]}";
$f[]="";
@file_put_contents("/etc/cron.d/imapsync-{$ligne["ID"]}",implode("\n",$f));
@chmod("/etc/cron.d/imapsync-{$ligne["ID"]}",600);
unset($f);
}
}
function upgradeTo7(){
$pidfile="/etc/artica-postfix/pids/".basename(__FILE__).".".__FUNCTION__.".pid";
$unix=new unix();
$pid=@file_get_contents($pidfile);
if($unix->process_exists($pid)){echo "Already running pid $pid\n";return;}
@file_put_contents($pidfile, getmypid());
$python=$unix->find_program("python");
$cmd="$python /usr/share/artica-postfix/bin/zarafa7-upgrade 2>&1";
exec($cmd,$results);
writelogs("$cmd -> " . count($results)."rows",__FUNCTION__,__FILE__,__LINE__);
while (list ($index, $line) = each ($results) ){
writelogs("$line",__FUNCTION__,__FILE__,__LINE__);
}
}
?>