1 <?php
3 require_once("class_goService.inc");
5 class govirusserver extends goService{
7 /* This plugin only writes its objectClass */
8 var $objectclasses = array("goVirusServer");
9 var $attributes = array("avMaxThreads","avMaxDirectoryRecursions","avUser","avFlags","avArchiveMaxFileSize","avArchiveMaxRecursion",
10 "avArchiveMaxCompressionRatio","avDatabaseMirror","avChecksPerDay","avHttpProxyURL");
11 var $StatusFlag = "avStatus";
13 /* This class can't be assigned twice so it conflicts with itsself */
14 var $conflicts = array("goVirusServer");
16 var $DisplayName = "";
17 var $dn = NULL;
18 var $cn = "";
19 var $avStatus = "";
21 var $dialog = NULL;
22 var $ui = NULL;
24 var $Flags = array("D","S","A","E");
26 var $avFlags = "DS";
27 var $avFlagsD = TRUE;
28 var $avFlagsS = TRUE;
29 var $avFlagsA = FALSE;
30 var $avFlagsE = FALSE;
32 var $avMaxThreads = 5;
33 var $avMaxDirectoryRecursions = 4;
34 var $avArchiveMaxFileSize = 4000;
35 var $avArchiveMaxRecursion = 5;
36 var $avArchiveMaxCompressionRatio = 95;
37 var $avChecksPerDay = 12;
39 var $avUser = "";
40 var $avHttpProxyURL = "";
41 var $avDatabaseMirror = "";
43 function govirusserver($config,$dn, $parent= NULL)
44 {
45 /* Init class */
46 plugin::plugin($config,$dn, $parent);
47 $this->DisplayName = _("Anti virus");
49 /* Get userinfo & acls */
50 $this->ui = get_userinfo();
52 /* Get Flags */
53 foreach($this->Flags as $flag){
54 $var = "avFlags".$flag;
55 if(preg_match("/".$flag."/",$this->avFlags)){
56 $this->$var = TRUE;
57 }
58 }
59 }
62 function execute()
63 {
64 $smarty = get_smarty();
66 /* Set acls */
67 $tmp = $this->plInfo();
68 foreach($tmp['plProvidedAcls'] as $name => $translation) {
69 $smarty->assign($name."ACL",$this->getacl($name));
70 }
72 $display = "";
73 $smarty->assign("servtabs",FALSE);
74 $this->is_account = true;
76 /* Assign smarty vars */
77 foreach($this->attributes as $attr){
78 $smarty->assign($attr,$this->$attr);
79 }
81 /* Assign checkbox states */
82 foreach($this->Flags as $Flag){
83 $var = "avFlags".$Flag;
84 if($this->$var){
85 $smarty->assign("avFlags".$Flag."CHK"," checked " );
86 }else{
87 $smarty->assign("avFlags".$Flag."CHK","");
88 }
89 }
91 /* Assign value for max thread select box */
92 $tmp = array();
93 for($i = 1 ; $i <= 20 ; $i ++){
94 $tmp[$i] = $i;
95 }
96 $smarty->assign("ThreadValues",$tmp);
98 if($this->avFlagsA){
99 $smarty->assign("avFlagsAState" , "" );
100 }else{
101 $smarty->assign("avFlagsAState" , " disabled " );
102 }
104 return($display.$smarty->fetch(get_template_path("goVirusServer.tpl",TRUE,dirname(__FILE__))));
105 }
108 function save()
109 {
110 if(!$this->is_account) return;
112 /* Create Flags */
113 $this->avFlags = "";
114 foreach($this->Flags as $flag){
115 $var = "avFlags".$flag;
116 if($this->$var){
117 $this->avFlags .=$flag;
118 }
119 }
121 plugin::save();
123 if(!$this->avFlagsA){
124 $arr = array("avArchiveMaxFileSize","avArchiveMaxRecursion","avArchiveMaxCompressionRatio");
125 foreach($arr as $attr){
126 $this->attrs[$attr] = array();
127 }
128 $this->attrs['avFlags'] = preg_replace("/E/","",$this->attrs['avFlags']);
129 }
131 /* Check if this is a new entry ... add/modify */
132 $ldap = $this->config->get_ldap_link();
133 $ldap->cat($this->dn,array("objectClass"));
134 if($ldap->count()){
135 $ldap->cd($this->dn);
136 $ldap->modify($this->attrs);
137 }else{
138 $ldap->cd($this->dn);
139 $ldap->add($this->attrs);
140 }
141 if($this->initially_was_account){
142 $this->handle_post_events("modify");
143 }else{
144 $this->handle_post_events("add");
145 }
147 show_ldap_error($ldap->get_error(), sprintf(_("Saving of server services/anti virus with dn '%s' failed."),$this->dn));
148 }
150 function check()
151 {
152 $message = plugin::check();
154 $mustBeNumeric = array(
155 "avMaxDirectoryRecursions" =>_("Maximum directory recursions"),
156 "avMaxThreads" =>_("Maximum threads"),
157 "avArchiveMaxFileSize" =>_("Maximum file size"),
158 "avArchiveMaxRecursion" =>_("Maximum recursions"),
159 "avArchiveMaxCompressionRatio" =>_("Maximum compression ratio"),
160 "avChecksPerDay" =>_("Checks per day"));
162 foreach($mustBeNumeric as $key => $trans){
163 if(!is_numeric($this->$key)){
164 $message[] = sprintf(_("The specified value for '%s' must be a numeric value."),$trans);
165 }
166 }
168 foreach(array("avUser"=>_("Database user"),"avHttpProxyURL"=>_("Http proxy URL"),"avDatabaseMirror"=>_("Database mirror")) as $attr => $name){
169 if(!preg_match("/^[a-z0-9:_\-\.\/]*$/",$this->$attr)){
170 $message[] = sprintf(_("Please specify a valid value for '%s'."),$name);
171 }
172 }
174 return($message);
175 }
178 function save_object()
179 {
180 if(isset($_POST['goVirusServer'])){
181 plugin::save_object();
182 foreach($this->Flags as $flag){
184 $var = "avFlags".$flag;
185 if($this->acl_is_writeable($var)){
186 if(isset($_POST[$var])){
187 $this->$var = TRUE;
188 }else{
189 $this->$var = FALSE;
190 }
191 }
192 }
193 }
194 }
197 /* For newer service management dialogs */
198 function getListEntry()
199 {
200 $fields = goService::getListEntry();
201 $fields['AllowEdit'] = true;
202 $fields['Message'] = _("Anti virus");
203 return($fields);
204 }
207 /* Return plugin informations for acl handling */
208 function plInfo()
209 {
210 return (array(
211 "plShortName" => _("Anti virus"),
212 "plDescription" => _("Anti virus")." ("._("Services").")",
213 "plSelfModify" => FALSE,
214 "plDepends" => array(),
215 "plPriority" => 96,
216 "plSection" => array("administration"),
217 "plCategory" => array("server"),
218 "plProvidedAcls"=> array(
220 "start" => _("Start"),
221 "stop" => _("Stop"),
222 "restart" => _("Restart"),
224 "avFlagsD" =>_("Enable debugging"),
225 "avFlagsS" =>_("Enable mail scanning"),
226 "avFlagsA" =>_("Enable scanning of archives"),
227 "avFlagsE" =>_("Block encrypted archives"),
229 "avMaxThreads" =>_("Maximum threads"),
230 "avMaxDirectoryRecursions" =>_("Maximum directory recursions"),
231 "avUser" =>_("Anti virus user"),
232 "avArchiveMaxFileSize" =>_("Maximum file size"),
233 "avArchiveMaxRecursion" =>_("Maximum recursions"),
234 "avArchiveMaxCompressionRatio" =>_("Maximum compression ratio"),
235 "avDatabaseMirror" =>_("Database mirror"),
236 "avChecksPerDay" =>_("Checks per day"),
237 "avHttpProxyURL" =>_("Http proxy URL"))
238 ));
239 }
240 }
241 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
242 ?>