Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Guilherme Filippo
ISPConfig 3
Commits
fb33392c
Commit
fb33392c
authored
Sep 27, 2010
by
jwarnier
Browse files
use single-quotes instead of double-quotes whenever appropriate
parent
b2cdd5f1
Changes
1
Hide whitespace changes
Inline
Side-by-side
server/plugins-available/apache2_plugin.inc.php
View file @
fb33392c
...
...
@@ -81,17 +81,17 @@ class apache2_plugin {
function
ssl
(
$event_name
,
$data
)
{
global
$app
,
$conf
;
if
(
!
is_dir
(
$data
[
"
new
"
][
"
document_root
"
]
.
"
/ssl
"
))
exec
(
"
mkdir -p
"
.
$data
[
"
new
"
][
"
document_root
"
]
.
"
/ssl
"
);
$ssl_dir
=
$data
[
"
new
"
][
"
document_root
"
]
.
"
/ssl
"
;
$domain
=
$data
[
"
new
"
][
"
ssl_domain
"
];
$key_file
=
$ssl_dir
.
'/'
.
$domain
.
"
.key.org
"
;
$key_file2
=
$ssl_dir
.
'/'
.
$domain
.
"
.key
"
;
$csr_file
=
$ssl_dir
.
'/'
.
$domain
.
"
.csr
"
;
$crt_file
=
$ssl_dir
.
'/'
.
$domain
.
"
.crt
"
;
if
(
!
is_dir
(
$data
[
'
new
'
][
'
document_root
'
]
.
'
/ssl
'
))
exec
(
'
mkdir -p
'
.
$data
[
'
new
'
][
'
document_root
'
]
.
'
/ssl
'
);
$ssl_dir
=
$data
[
'
new
'
][
'
document_root
'
]
.
'
/ssl
'
;
$domain
=
$data
[
'
new
'
][
'
ssl_domain
'
];
$key_file
=
$ssl_dir
.
'/'
.
$domain
.
'
.key.org
'
;
$key_file2
=
$ssl_dir
.
'/'
.
$domain
.
'
.key
'
;
$csr_file
=
$ssl_dir
.
'/'
.
$domain
.
'
.csr
'
;
$crt_file
=
$ssl_dir
.
'/'
.
$domain
.
'
.crt
'
;
//* Create a SSL Certificate
if
(
$data
[
"
new
"
][
"
ssl_action
"
]
==
'create'
)
{
$rand_file
=
$ssl_dir
.
"
/random_file
"
;
if
(
$data
[
'
new
'
][
'
ssl_action
'
]
==
'create'
)
{
$rand_file
=
$ssl_dir
.
'
/random_file
'
;
$rand_data
=
md5
(
uniqid
(
microtime
(),
1
));
for
(
$i
=
0
;
$i
<
1000
;
$i
++
)
{
$rand_data
.
=
md5
(
uniqid
(
microtime
(),
1
));
...
...
@@ -125,7 +125,7 @@ class apache2_plugin {
[ req_attributes ]
challengePassword = A challenge password"
;
$ssl_cnf_file
=
$ssl_dir
.
"
/openssl.conf
"
;
$ssl_cnf_file
=
$ssl_dir
.
'
/openssl.conf
'
;
file_put_contents
(
$ssl_cnf_file
,
$ssl_cnf
);
$rand_file
=
escapeshellcmd
(
$rand_file
);
...
...
@@ -138,56 +138,56 @@ class apache2_plugin {
if
(
is_file
(
$ssl_cnf_file
))
{
exec
(
"openssl genrsa -des3 -rand
$rand_file
-passout pass:
$ssl_password
-out
$key_file
2048 && openssl req -new -passin pass:
$ssl_password
-passout pass:
$ssl_password
-key
$key_file
-out
$csr_file
-days
$ssl_days
-config
$config_file
&& openssl req -x509 -passin pass:
$ssl_password
-passout pass:
$ssl_password
-key
$key_file
-in
$csr_file
-out
$crt_file
-days
$ssl_days
-config
$config_file
&& openssl rsa -passin pass:
$ssl_password
-in
$key_file
-out
$key_file2
"
);
$app
->
log
(
"
Creating SSL Cert for:
$domain
"
,
LOGLEVEL_DEBUG
);
$app
->
log
(
'
Creating SSL Cert for:
'
.
$domain
,
LOGLEVEL_DEBUG
);
}
exec
(
"
chmod 400
$key_file2
"
);
exec
(
'
chmod 400
'
.
$key_file2
);
@
unlink
(
$config_file
);
@
unlink
(
$rand_file
);
$ssl_request
=
$app
->
db
->
quote
(
file_get_contents
(
$csr_file
));
$ssl_cert
=
$app
->
db
->
quote
(
file_get_contents
(
$crt_file
));
/* Update the DB of the (local) Server */
$app
->
db
->
query
(
"UPDATE web_domain SET ssl_request = '
$ssl_request
', ssl_cert = '
$ssl_cert
' WHERE domain = '"
.
$data
[
"
new
"
][
"
domain
"
]
.
"'"
);
$app
->
db
->
query
(
"UPDATE web_domain SET ssl_action = '' WHERE domain = '"
.
$data
[
"
new
"
][
"
domain
"
]
.
"'"
);
$app
->
db
->
query
(
"UPDATE web_domain SET ssl_request = '
$ssl_request
', ssl_cert = '
$ssl_cert
' WHERE domain = '"
.
$data
[
'
new
'
][
'
domain
'
]
.
"'"
);
$app
->
db
->
query
(
"UPDATE web_domain SET ssl_action = '' WHERE domain = '"
.
$data
[
'
new
'
][
'
domain
'
]
.
"'"
);
/* Update also the master-DB of the Server-Farm */
$app
->
dbmaster
->
query
(
"UPDATE web_domain SET ssl_request = '
$ssl_request
', ssl_cert = '
$ssl_cert
' WHERE domain = '"
.
$data
[
"
new
"
][
"
domain
"
]
.
"'"
);
$app
->
dbmaster
->
query
(
"UPDATE web_domain SET ssl_action = '' WHERE domain = '"
.
$data
[
"
new
"
][
"
domain
"
]
.
"'"
);
$app
->
dbmaster
->
query
(
"UPDATE web_domain SET ssl_request = '
$ssl_request
', ssl_cert = '
$ssl_cert
' WHERE domain = '"
.
$data
[
'
new
'
][
'
domain
'
]
.
"'"
);
$app
->
dbmaster
->
query
(
"UPDATE web_domain SET ssl_action = '' WHERE domain = '"
.
$data
[
'
new
'
][
'
domain
'
]
.
"'"
);
}
//* Save a SSL certificate to disk
if
(
$data
[
"
new
"
][
"
ssl_action
"
]
==
'save'
)
{
$ssl_dir
=
$data
[
"
new
"
][
"
document_root
"
]
.
"
/ssl
"
;
$domain
=
$data
[
"
new
"
][
"
ssl_domain
"
];
$csr_file
=
$ssl_dir
.
'/'
.
$domain
.
"
.csr
"
;
$crt_file
=
$ssl_dir
.
'/'
.
$domain
.
"
.crt
"
;
$bundle_file
=
$ssl_dir
.
'/'
.
$domain
.
"
.bundle
"
;
file_put_contents
(
$csr_file
,
$data
[
"
new
"
][
"
ssl_request
"
]);
file_put_contents
(
$crt_file
,
$data
[
"
new
"
][
"
ssl_cert
"
]);
if
(
trim
(
$data
[
"
new
"
][
"
ssl_bundle
"
])
!=
''
)
file_put_contents
(
$bundle_file
,
$data
[
"
new
"
][
"
ssl_bundle
"
]);
if
(
$data
[
'
new
'
][
'
ssl_action
'
]
==
'save'
)
{
$ssl_dir
=
$data
[
'
new
'
][
'
document_root
'
]
.
'
/ssl
'
;
$domain
=
$data
[
'
new
'
][
'
ssl_domain
'
];
$csr_file
=
$ssl_dir
.
'/'
.
$domain
.
'
.csr
'
;
$crt_file
=
$ssl_dir
.
'/'
.
$domain
.
'
.crt
'
;
$bundle_file
=
$ssl_dir
.
'/'
.
$domain
.
'
.bundle
'
;
file_put_contents
(
$csr_file
,
$data
[
'
new
'
][
'
ssl_request
'
]);
file_put_contents
(
$crt_file
,
$data
[
'
new
'
][
'
ssl_cert
'
]);
if
(
trim
(
$data
[
'
new
'
][
'
ssl_bundle
'
])
!=
''
)
file_put_contents
(
$bundle_file
,
$data
[
'
new
'
][
'
ssl_bundle
'
]);
/* Update the DB of the (local) Server */
$app
->
db
->
query
(
"UPDATE web_domain SET ssl_action = '' WHERE domain = '"
.
$data
[
"
new
"
][
"
domain
"
]
.
"'"
);
$app
->
db
->
query
(
"UPDATE web_domain SET ssl_action = '' WHERE domain = '"
.
$data
[
'
new
'
][
'
domain
'
]
.
"'"
);
/* Update also the master-DB of the Server-Farm */
$app
->
dbmaster
->
query
(
"UPDATE web_domain SET ssl_action = '' WHERE domain = '"
.
$data
[
"
new
"
][
"
domain
"
]
.
"'"
);
$app
->
log
(
"
Saving SSL Cert for:
$domain
"
,
LOGLEVEL_DEBUG
);
$app
->
dbmaster
->
query
(
"UPDATE web_domain SET ssl_action = '' WHERE domain = '"
.
$data
[
'
new
'
][
'
domain
'
]
.
"'"
);
$app
->
log
(
'
Saving SSL Cert for:
'
.
$domain
,
LOGLEVEL_DEBUG
);
}
//* Delete a SSL certificate
if
(
$data
[
"
new
"
][
"
ssl_action
"
]
==
'del'
)
{
$ssl_dir
=
$data
[
"
new
"
][
"
document_root
"
]
.
"
/ssl
"
;
$domain
=
$data
[
"
new
"
][
"
ssl_domain
"
];
$csr_file
=
$ssl_dir
.
'/'
.
$domain
.
"
.csr
"
;
$crt_file
=
$ssl_dir
.
'/'
.
$domain
.
"
.crt
"
;
$bundle_file
=
$ssl_dir
.
'/'
.
$domain
.
"
.bundle
"
;
if
(
$data
[
'
new
'
][
'
ssl_action
'
]
==
'del'
)
{
$ssl_dir
=
$data
[
'
new
'
][
'
document_root
'
]
.
'
/ssl
'
;
$domain
=
$data
[
'
new
'
][
'
ssl_domain
'
];
$csr_file
=
$ssl_dir
.
'/'
.
$domain
.
'
.csr
'
;
$crt_file
=
$ssl_dir
.
'/'
.
$domain
.
'
.crt
'
;
$bundle_file
=
$ssl_dir
.
'/'
.
$domain
.
'
.bundle
'
;
unlink
(
$csr_file
);
unlink
(
$crt_file
);
unlink
(
$bundle_file
);
/* Update the DB of the (local) Server */
$app
->
db
->
query
(
"UPDATE web_domain SET ssl_request = '', ssl_cert = '' WHERE domain = '"
.
$data
[
"
new
"
][
"
domain
"
]
.
"'"
);
$app
->
db
->
query
(
"UPDATE web_domain SET ssl_action = '' WHERE domain = '"
.
$data
[
"
new
"
][
"
domain
"
]
.
"'"
);
$app
->
db
->
query
(
"UPDATE web_domain SET ssl_request = '', ssl_cert = '' WHERE domain = '"
.
$data
[
'
new
'
][
'
domain
'
]
.
"'"
);
$app
->
db
->
query
(
"UPDATE web_domain SET ssl_action = '' WHERE domain = '"
.
$data
[
'
new
'
][
'
domain
'
]
.
"'"
);
/* Update also the master-DB of the Server-Farm */
$app
->
dbmaster
->
query
(
"UPDATE web_domain SET ssl_request = '', ssl_cert = '' WHERE domain = '"
.
$data
[
"
new
"
][
"
domain
"
]
.
"'"
);
$app
->
dbmaster
->
query
(
"UPDATE web_domain SET ssl_action = '' WHERE domain = '"
.
$data
[
"
new
"
][
"
domain
"
]
.
"'"
);
$app
->
log
(
"
Deleting SSL Cert for:
$domain
"
,
LOGLEVEL_DEBUG
);
$app
->
dbmaster
->
query
(
"UPDATE web_domain SET ssl_request = '', ssl_cert = '' WHERE domain = '"
.
$data
[
'
new
'
][
'
domain
'
]
.
"'"
);
$app
->
dbmaster
->
query
(
"UPDATE web_domain SET ssl_action = '' WHERE domain = '"
.
$data
[
'
new
'
][
'
domain
'
]
.
"'"
);
$app
->
log
(
'
Deleting SSL Cert for:
'
.
$domain
,
LOGLEVEL_DEBUG
);
}
...
...
@@ -210,273 +210,273 @@ class apache2_plugin {
if
(
$this
->
action
!=
'insert'
)
$this
->
action
=
'update'
;
if
(
$data
[
"
new
"
][
"
type
"
]
!=
"
vhost
"
&&
$data
[
"
new
"
][
"
parent_domain_id
"
]
>
0
)
{
if
(
$data
[
'
new
'
][
'
type
'
]
!=
'
vhost
'
&&
$data
[
'
new
'
][
'
parent_domain_id
'
]
>
0
)
{
$old_parent_domain_id
=
intval
(
$data
[
"
old
"
][
"
parent_domain_id
"
]);
$new_parent_domain_id
=
intval
(
$data
[
"
new
"
][
"
parent_domain_id
"
]);
$old_parent_domain_id
=
intval
(
$data
[
'
old
'
][
'
parent_domain_id
'
]);
$new_parent_domain_id
=
intval
(
$data
[
'
new
'
][
'
parent_domain_id
'
]);
// If the parent_domain_id has been chenged, we will have to update the old site as well.
if
(
$this
->
action
==
'update'
&&
$data
[
"
new
"
][
"
parent_domain_id
"
]
!=
$data
[
"
old
"
][
"
parent_domain_id
"
])
{
$tmp
=
$app
->
db
->
queryOneRecord
(
"
SELECT * FROM web_domain WHERE domain_id =
"
.
$old_parent_domain_id
.
" AND active = 'y'"
);
$data
[
"
new
"
]
=
$tmp
;
$data
[
"
old
"
]
=
$tmp
;
if
(
$this
->
action
==
'update'
&&
$data
[
'
new
'
][
'
parent_domain_id
'
]
!=
$data
[
'
old
'
][
'
parent_domain_id
'
])
{
$tmp
=
$app
->
db
->
queryOneRecord
(
'
SELECT * FROM web_domain WHERE domain_id =
'
.
$old_parent_domain_id
.
" AND active = 'y'"
);
$data
[
'
new
'
]
=
$tmp
;
$data
[
'
old
'
]
=
$tmp
;
$this
->
action
=
'update'
;
$this
->
update
(
$event_name
,
$data
);
}
// This is not a vhost, so we need to update the parent record instead.
$tmp
=
$app
->
db
->
queryOneRecord
(
"
SELECT * FROM web_domain WHERE domain_id =
"
.
$new_parent_domain_id
.
" AND active = 'y'"
);
$data
[
"
new
"
]
=
$tmp
;
$data
[
"
old
"
]
=
$tmp
;
$tmp
=
$app
->
db
->
queryOneRecord
(
'
SELECT * FROM web_domain WHERE domain_id =
'
.
$new_parent_domain_id
.
" AND active = 'y'"
);
$data
[
'
new
'
]
=
$tmp
;
$data
[
'
old
'
]
=
$tmp
;
$this
->
action
=
'update'
;
}
// load the server configuration options
$app
->
uses
(
"
getconf
"
);
$web_config
=
$app
->
getconf
->
get_server_config
(
$conf
[
"
server_id
"
],
'web'
);
$app
->
uses
(
'
getconf
'
);
$web_config
=
$app
->
getconf
->
get_server_config
(
$conf
[
'
server_id
'
],
'web'
);
//* Check if this is a chrooted setup
if
(
$web_config
[
'website_basedir'
]
!=
''
&&
@
is_file
(
$web_config
[
'website_basedir'
]
.
'/etc/passwd'
))
{
$apache_chrooted
=
true
;
$app
->
log
(
"
Info: Apache is chrooted.
"
,
LOGLEVEL_DEBUG
);
$app
->
log
(
'
Info: Apache is chrooted.
'
,
LOGLEVEL_DEBUG
);
}
else
{
$apache_chrooted
=
false
;
}
if
(
$data
[
"
new
"
][
"
document_root
"
]
==
''
)
{
$app
->
log
(
"
document_root not set
"
,
LOGLEVEL_WARN
);
if
(
$data
[
'
new
'
][
'
document_root
'
]
==
''
)
{
$app
->
log
(
'
document_root not set
'
,
LOGLEVEL_WARN
);
return
0
;
}
if
(
$data
[
"
new
"
][
"
system_user
"
]
==
'root'
or
$data
[
"
new
"
][
"
system_group
"
]
==
'root'
)
{
$app
->
log
(
"
Websites can
not be owned by the root user or group.
"
,
LOGLEVEL_WARN
);
if
(
$data
[
'
new
'
][
'
system_user
'
]
==
'root'
or
$data
[
'
new
'
][
'
system_group
'
]
==
'root'
)
{
$app
->
log
(
'
Websites cannot be owned by the root user or group.
'
,
LOGLEVEL_WARN
);
return
0
;
}
//* If the client of the site has been changed, we have a change of the document root
if
(
$this
->
action
==
'update'
&&
$data
[
"
new
"
][
"
document_root
"
]
!=
$data
[
"
old
"
][
"
document_root
"
])
{
if
(
$this
->
action
==
'update'
&&
$data
[
'
new
'
][
'
document_root
'
]
!=
$data
[
'
old
'
][
'
document_root
'
])
{
//* Get the old client ID
$old_client
=
$app
->
dbmaster
->
queryOneRecord
(
"
SELECT client_id FROM sys_group WHERE sys_group.groupid =
"
.
intval
(
$data
[
"
old
"
][
"
sys_groupid
"
]));
$old_client_id
=
intval
(
$old_client
[
"
client_id
"
]);
$old_client
=
$app
->
dbmaster
->
queryOneRecord
(
'
SELECT client_id FROM sys_group WHERE sys_group.groupid =
'
.
intval
(
$data
[
'
old
'
][
'
sys_groupid
'
]));
$old_client_id
=
intval
(
$old_client
[
'
client_id
'
]);
unset
(
$old_client
);
//* Remove the old symlinks
$tmp_symlinks_array
=
explode
(
':'
,
$web_config
[
"
website_symlinks
"
]);
$tmp_symlinks_array
=
explode
(
':'
,
$web_config
[
'
website_symlinks
'
]);
if
(
is_array
(
$tmp_symlinks_array
))
{
foreach
(
$tmp_symlinks_array
as
$tmp_symlink
)
{
$tmp_symlink
=
str_replace
(
"
[client_id]
"
,
$old_client_id
,
$tmp_symlink
);
$tmp_symlink
=
str_replace
(
"
[website_domain]
"
,
$data
[
"
old
"
][
"
domain
"
],
$tmp_symlink
);
$tmp_symlink
=
str_replace
(
'
[client_id]
'
,
$old_client_id
,
$tmp_symlink
);
$tmp_symlink
=
str_replace
(
'
[website_domain]
'
,
$data
[
'
old
'
][
'
domain
'
],
$tmp_symlink
);
// Remove trailing slash
if
(
substr
(
$tmp_symlink
,
-
1
,
1
)
==
'/'
)
$tmp_symlink
=
substr
(
$tmp_symlink
,
0
,
-
1
);
// create the symlinks, if not exist
if
(
is_link
(
$tmp_symlink
))
{
exec
(
"
rm -f
"
.
escapeshellcmd
(
$tmp_symlink
));
$app
->
log
(
"
Removed
S
ymlink: rm -f
"
.
$tmp_symlink
,
LOGLEVEL_DEBUG
);
exec
(
'
rm -f
'
.
escapeshellcmd
(
$tmp_symlink
));
$app
->
log
(
'
Removed
s
ymlink: rm -f
'
.
$tmp_symlink
,
LOGLEVEL_DEBUG
);
}
}
}
//* Move the site data
$tmp_docroot
=
explode
(
'/'
,
$data
[
"
new
"
][
"
document_root
"
]);
$tmp_docroot
=
explode
(
'/'
,
$data
[
'
new
'
][
'
document_root
'
]);
unset
(
$tmp_docroot
[
count
(
$tmp_docroot
)
-
1
]);
$new_dir
=
implode
(
'/'
,
$tmp_docroot
);
$tmp_docroot
=
explode
(
'/'
,
$data
[
"
old
"
][
"
document_root
"
]);
$tmp_docroot
=
explode
(
'/'
,
$data
[
'
old
'
][
'
document_root
'
]);
unset
(
$tmp_docroot
[
count
(
$tmp_docroot
)
-
1
]);
$old_dir
=
implode
(
'/'
,
$tmp_docroot
);
exec
(
'rm -rf '
.
$data
[
"
new
"
][
"
document_root
"
]);
exec
(
'rm -rf '
.
$data
[
'
new
'
][
'
document_root
'
]);
if
(
!
is_dir
(
$new_dir
))
exec
(
'mkdir -p '
.
$new_dir
);
exec
(
'mv '
.
$data
[
"
old
"
][
"
document_root
"
]
.
' '
.
$new_dir
);
$app
->
log
(
"
Moving site to new document root:
"
.
'
mv '
.
$data
[
"
old
"
][
"
document_root
"
]
.
' '
.
$new_dir
,
LOGLEVEL_DEBUG
);
exec
(
'mv '
.
$data
[
'
old
'
][
'
document_root
'
]
.
' '
.
$new_dir
);
$app
->
log
(
'
Moving site to new document root: mv '
.
$data
[
'
old
'
][
'
document_root
'
]
.
' '
.
$new_dir
,
LOGLEVEL_DEBUG
);
//* Change the owner of the website files to the new website owner
exec
(
'chown --recursive --from='
.
escapeshellcmd
(
$data
[
"
old
"
][
"
system_user
"
])
.
':'
.
escapeshellcmd
(
$data
[
'old'
][
'system_group'
])
.
' '
.
escapeshellcmd
(
$data
[
"
new
"
][
"
system_user
"
])
.
':'
.
escapeshellcmd
(
$data
[
'new'
][
'system_group'
])
.
' '
.
$new_dir
);
exec
(
'chown --recursive --from='
.
escapeshellcmd
(
$data
[
'
old
'
][
'
system_user
'
])
.
':'
.
escapeshellcmd
(
$data
[
'old'
][
'system_group'
])
.
' '
.
escapeshellcmd
(
$data
[
'
new
'
][
'
system_user
'
])
.
':'
.
escapeshellcmd
(
$data
[
'new'
][
'system_group'
])
.
' '
.
$new_dir
);
//* Change the home directory and group of the website user
$command
=
'usermod'
;
$command
.
=
' --home '
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
]);
$command
.
=
' --home '
.
escapeshellcmd
(
$data
[
'
new
'
][
'
document_root
'
]);
$command
.
=
' --gid '
.
escapeshellcmd
(
$data
[
'new'
][
'system_group'
]);
$command
.
=
' '
.
escapeshellcmd
(
$data
[
"
new
"
][
"
system_user
"
]);
$command
.
=
' '
.
escapeshellcmd
(
$data
[
'
new
'
][
'
system_user
'
]);
exec
(
$command
);
if
(
$apache_chrooted
)
$this
->
_exec
(
"
chroot
"
.
escapeshellcmd
(
$web_config
[
'website_basedir'
])
.
" "
.
$command
);
if
(
$apache_chrooted
)
$this
->
_exec
(
'
chroot
'
.
escapeshellcmd
(
$web_config
[
'website_basedir'
])
.
' '
.
$command
);
}
//print_r($data);
// Check if the directories are there and create them if ne
s
cessary.
if
(
!
is_dir
(
$data
[
"
new
"
][
"
document_root
"
]
.
"
/web
"
))
exec
(
"
mkdir -p
"
.
$data
[
"
new
"
][
"
document_root
"
]
.
"
/web
"
);
if
(
!
is_dir
(
$data
[
"
new
"
][
"
document_root
"
]
.
"
/web/error
"
)
and
$data
[
"
new
"
][
"
errordocs
"
])
exec
(
"
mkdir -p
"
.
$data
[
"
new
"
][
"
document_root
"
]
.
"
/web/error
"
);
//if(!is_dir($data[
"
new
"
][
"
document_root
"
].
"
/log
"
)) exec(
"
mkdir -p
"
.$data[
"
new
"
][
"
document_root
"
].
"
/log
"
);
if
(
!
is_dir
(
$data
[
"
new
"
][
"
document_root
"
]
.
"
/ssl
"
))
exec
(
"
mkdir -p
"
.
$data
[
"
new
"
][
"
document_root
"
]
.
"
/ssl
"
);
if
(
!
is_dir
(
$data
[
"
new
"
][
"
document_root
"
]
.
"
/cgi-bin
"
))
exec
(
"
mkdir -p
"
.
$data
[
"
new
"
][
"
document_root
"
]
.
"
/cgi-bin
"
);
if
(
!
is_dir
(
$data
[
"
new
"
][
"
document_root
"
]
.
"
/tmp
"
))
exec
(
"
mkdir -p
"
.
$data
[
"
new
"
][
"
document_root
"
]
.
"
/tmp
"
);
// Check if the directories are there and create them if necessary.
if
(
!
is_dir
(
$data
[
'
new
'
][
'
document_root
'
]
.
'
/web
'
))
exec
(
'
mkdir -p
'
.
$data
[
'
new
'
][
'
document_root
'
]
.
'
/web
'
);
if
(
!
is_dir
(
$data
[
'
new
'
][
'
document_root
'
]
.
'
/web/error
'
)
and
$data
[
'
new
'
][
'
errordocs
'
])
exec
(
'
mkdir -p
'
.
$data
[
'
new
'
][
'
document_root
'
]
.
'
/web/error
'
);
//if(!is_dir($data[
'
new
'
][
'
document_root
'
].
'
/log
'
)) exec(
'
mkdir -p
'
.$data[
'
new
'
][
'
document_root
'
].
'
/log
'
);
if
(
!
is_dir
(
$data
[
'
new
'
][
'
document_root
'
]
.
'
/ssl
'
))
exec
(
'
mkdir -p
'
.
$data
[
'
new
'
][
'
document_root
'
]
.
'
/ssl
'
);
if
(
!
is_dir
(
$data
[
'
new
'
][
'
document_root
'
]
.
'
/cgi-bin
'
))
exec
(
'
mkdir -p
'
.
$data
[
'
new
'
][
'
document_root
'
]
.
'
/cgi-bin
'
);
if
(
!
is_dir
(
$data
[
'
new
'
][
'
document_root
'
]
.
'
/tmp
'
))
exec
(
'
mkdir -p
'
.
$data
[
'
new
'
][
'
document_root
'
]
.
'
/tmp
'
);
// Remove the symlink for the site, if site is renamed
if
(
$this
->
action
==
'update'
&&
$data
[
"
old
"
][
"
domain
"
]
!=
''
&&
$data
[
"
new
"
][
"
domain
"
]
!=
$data
[
"
old
"
][
"
domain
"
])
{
if
(
is_dir
(
'/var/log/ispconfig/httpd/'
.
$data
[
"
old
"
][
"
domain
"
]))
exec
(
'rm -rf /var/log/ispconfig/httpd/'
.
$data
[
"
old
"
][
"
domain
"
]);
if
(
is_link
(
$data
[
"
old
"
][
"
document_root
"
]
.
"
/log
"
))
unlink
(
$data
[
"
old
"
][
"
document_root
"
]
.
"
/log
"
);
if
(
$this
->
action
==
'update'
&&
$data
[
'
old
'
][
'
domain
'
]
!=
''
&&
$data
[
'
new
'
][
'
domain
'
]
!=
$data
[
'
old
'
][
'
domain
'
])
{
if
(
is_dir
(
'/var/log/ispconfig/httpd/'
.
$data
[
'
old
'
][
'
domain
'
]))
exec
(
'rm -rf /var/log/ispconfig/httpd/'
.
$data
[
'
old
'
][
'
domain
'
]);
if
(
is_link
(
$data
[
'
old
'
][
'
document_root
'
]
.
'
/log
'
))
unlink
(
$data
[
'
old
'
][
'
document_root
'
]
.
'
/log
'
);
}
// Create the symlink for the logfiles
if
(
!
is_dir
(
'/var/log/ispconfig/httpd/'
.
$data
[
"
new
"
][
"
domain
"
]))
exec
(
'mkdir -p /var/log/ispconfig/httpd/'
.
$data
[
"
new
"
][
"
domain
"
]);
if
(
!
is_link
(
$data
[
"
new
"
][
"
document_root
"
]
.
"
/log
"
))
{
exec
(
"
ln -s /var/log/ispconfig/httpd/
"
.
$data
[
"
new
"
][
"
domain
"
]
.
" "
.
$data
[
"
new
"
][
"
document_root
"
]
.
"
/log
"
);
$app
->
log
(
"
Creating
S
ymlink: ln -s /var/log/ispconfig/httpd/
"
.
$data
[
"
new
"
][
"
domain
"
]
.
" "
.
$data
[
"
new
"
][
"
document_root
"
]
.
"
/log
"
,
LOGLEVEL_DEBUG
);
if
(
!
is_dir
(
'/var/log/ispconfig/httpd/'
.
$data
[
'
new
'
][
'
domain
'
]))
exec
(
'mkdir -p /var/log/ispconfig/httpd/'
.
$data
[
'
new
'
][
'
domain
'
]);
if
(
!
is_link
(
$data
[
'
new
'
][
'
document_root
'
]
.
'
/log
'
))
{
exec
(
'
ln -s /var/log/ispconfig/httpd/
'
.
$data
[
'
new
'
][
'
domain
'
]
.
' '
.
$data
[
'
new
'
][
'
document_root
'
]
.
'
/log
'
);
$app
->
log
(
'
Creating
s
ymlink: ln -s /var/log/ispconfig/httpd/
'
.
$data
[
'
new
'
][
'
domain
'
]
.
' '
.
$data
[
'
new
'
][
'
document_root
'
]
.
'
/log
'
,
LOGLEVEL_DEBUG
);
}
/*
// Create the symlink for the logfiles
// This does not work as vlogger can
not log trogh symlinks.
if($this->action == 'update' && $data[
"
old
"
][
"
domain
"
] != '' && $data[
"
new
"
][
"
domain
"
] != $data[
"
old
"
][
"
domain
"
]) {
if(is_dir($data[
"
old
"
][
"
document_root
"
].
"
/log
"
)) exec('rm -rf '.$data[
"
old
"
][
"
document_root
"
].
"
/log
"
);
if(is_link('/var/log/ispconfig/httpd/'.$data[
"
old
"
][
"
domain
"
])) unlink('/var/log/ispconfig/httpd/'.$data[
"
old
"
][
"
domain
"
]);
// This does not work as vlogger cannot log tro
u
gh symlinks.
if($this->action == 'update' && $data[
'
old
'
][
'
domain
'
] != '' && $data[
'
new
'
][
'
domain
'
] != $data[
'
old
'
][
'
domain
'
]) {
if(is_dir($data[
'
old
'
][
'
document_root
'
].
'
/log
'
)) exec('rm -rf '.$data[
'
old
'
][
'
document_root
'
].
'
/log
'
);
if(is_link('/var/log/ispconfig/httpd/'.$data[
'
old
'
][
'
domain
'
])) unlink('/var/log/ispconfig/httpd/'.$data[
'
old
'
][
'
domain
'
]);
}
// Create the symlink for the logfiles
if(!is_dir($data[
"
new
"
][
"
document_root
"
].
"
/log
"
)) exec('mkdir -p '.$data[
"
new
"
][
"
document_root
"
].
"
/log
"
);
if(!is_link('/var/log/ispconfig/httpd/'.$data[
"
new
"
][
"
domain
"
])) {
exec(
"
ln -s
"
.$data[
"
new
"
][
"
document_root
"
].
"
/log /var/log/ispconfig/httpd/
"
.$data[
"
new
"
][
"
domain
"
]);
$app->log(
"
Creating
S
ymlink: ln -s
"
.$data[
"
new
"
][
"
document_root
"
].
"
/log /var/log/ispconfig/httpd/
"
.$data[
"
new
"
][
"
domain
"
],LOGLEVEL_DEBUG);
if(!is_dir($data[
'
new
'
][
'
document_root
'
].
'
/log
'
)) exec('mkdir -p '.$data[
'
new
'
][
'
document_root
'
].
'
/log
'
);
if(!is_link('/var/log/ispconfig/httpd/'.$data[
'
new
'
][
'
domain
'
])) {
exec(
'
ln -s
'
.$data[
'
new
'
][
'
document_root
'
].
'
/log /var/log/ispconfig/httpd/
'
.$data[
'
new
'
][
'
domain
'
]);
$app->log(
'
Creating
s
ymlink: ln -s
'
.$data[
'
new
'
][
'
document_root
'
].
'
/log /var/log/ispconfig/httpd/
'
.$data[
'
new
'
][
'
domain
'
],LOGLEVEL_DEBUG);
}
*/
// Get the client ID
$client
=
$app
->
dbmaster
->
queryOneRecord
(
"
SELECT client_id FROM sys_group WHERE sys_group.groupid =
"
.
intval
(
$data
[
"
new
"
][
"
sys_groupid
"
]));
$client_id
=
intval
(
$client
[
"
client_id
"
]);
$client
=
$app
->
dbmaster
->
queryOneRecord
(
'
SELECT client_id FROM sys_group WHERE sys_group.groupid =
'
.
intval
(
$data
[
'
new
'
][
'
sys_groupid
'
]));
$client_id
=
intval
(
$client
[
'
client_id
'
]);
unset
(
$client
);
// Remove old symlinks, if site is renamed
if
(
$this
->
action
==
'update'
&&
$data
[
"
old
"
][
"
domain
"
]
!=
''
&&
$data
[
"
new
"
][
"
domain
"
]
!=
$data
[
"
old
"
][
"
domain
"
])
{
$tmp_symlinks_array
=
explode
(
':'
,
$web_config
[
"
website_symlinks
"
]);
if
(
$this
->
action
==
'update'
&&
$data
[
'
old
'
][
'
domain
'
]
!=
''
&&
$data
[
'
new
'
][
'
domain
'
]
!=
$data
[
'
old
'
][
'
domain
'
])
{
$tmp_symlinks_array
=
explode
(
':'
,
$web_config
[
'
website_symlinks
'
]);
if
(
is_array
(
$tmp_symlinks_array
))
{
foreach
(
$tmp_symlinks_array
as
$tmp_symlink
)
{
$tmp_symlink
=
str_replace
(
"
[client_id]
"
,
$client_id
,
$tmp_symlink
);
$tmp_symlink
=
str_replace
(
"
[website_domain]
"
,
$data
[
"
old
"
][
"
domain
"
],
$tmp_symlink
);
$tmp_symlink
=
str_replace
(
'
[client_id]
'
,
$client_id
,
$tmp_symlink
);
$tmp_symlink
=
str_replace
(
'
[website_domain]
'
,
$data
[
'
old
'
][
'
domain
'
],
$tmp_symlink
);
// Remove trailing slash
if
(
substr
(
$tmp_symlink
,
-
1
,
1
)
==
'/'
)
$tmp_symlink
=
substr
(
$tmp_symlink
,
0
,
-
1
);
// remove the symlinks, if not exist
if
(
is_link
(
$tmp_symlink
))
{
exec
(
"
rm -f
"
.
escapeshellcmd
(
$tmp_symlink
));
$app
->
log
(
"
Removed
S
ymlink: rm -f
"
.
$tmp_symlink
,
LOGLEVEL_DEBUG
);
exec
(
'
rm -f
'
.
escapeshellcmd
(
$tmp_symlink
));
$app
->
log
(
'
Removed
s
ymlink: rm -f
'
.
$tmp_symlink
,
LOGLEVEL_DEBUG
);
}
}
}
}
// Create the symlinks for the sites
$tmp_symlinks_array
=
explode
(
':'
,
$web_config
[
"
website_symlinks
"
]);
$tmp_symlinks_array
=
explode
(
':'
,
$web_config
[
'
website_symlinks
'
]);
if
(
is_array
(
$tmp_symlinks_array
))
{
foreach
(
$tmp_symlinks_array
as
$tmp_symlink
)
{
$tmp_symlink
=
str_replace
(
"
[client_id]
"
,
$client_id
,
$tmp_symlink
);
$tmp_symlink
=
str_replace
(
"
[website_domain]
"
,
$data
[
"
new
"
][
"
domain
"
],
$tmp_symlink
);
$tmp_symlink
=
str_replace
(
'
[client_id]
'
,
$client_id
,
$tmp_symlink
);
$tmp_symlink
=
str_replace
(
'
[website_domain]
'
,
$data
[
'
new
'
][
'
domain
'
],
$tmp_symlink
);
// Remove trailing slash
if
(
substr
(
$tmp_symlink
,
-
1
,
1
)
==
'/'
)
$tmp_symlink
=
substr
(
$tmp_symlink
,
0
,
-
1
);
//* Remove symlink if target folder has been changed.
if
(
$data
[
"
old
"
][
"
document_root
"
]
!=
''
&&
$data
[
"
old
"
][
"
document_root
"
]
!=
$data
[
"
new
"
][
"
document_root
"
]
&&
is_link
(
$tmp_symlink
))
{
if
(
$data
[
'
old
'
][
'
document_root
'
]
!=
''
&&
$data
[
'
old
'
][
'
document_root
'
]
!=
$data
[
'
new
'
][
'
document_root
'
]
&&
is_link
(
$tmp_symlink
))
{
unlink
(
$tmp_symlink
);
}
// create the symlinks, if not exist
if
(
!
is_link
(
$tmp_symlink
))
{
exec
(
"
ln -s
"
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
])
.
"
/
"
.
escapeshellcmd
(
$tmp_symlink
));
$app
->
log
(
"
Creating
S
ymlink: ln -s
"
.
$data
[
"
new
"
][
"
document_root
"
]
.
"
/
"
.
$tmp_symlink
,
LOGLEVEL_DEBUG
);
exec
(
'
ln -s
'
.
escapeshellcmd
(
$data
[
'
new
'
][
'
document_root
'
])
.
'
/
'
.
escapeshellcmd
(
$tmp_symlink
));
$app
->
log
(
'
Creating
s
ymlink: ln -s
'
.
$data
[
'
new
'
][
'
document_root
'
]
.
'
/
'
.
$tmp_symlink
,
LOGLEVEL_DEBUG
);
}
}
}
if
(
$this
->
action
==
'insert'
&&
$data
[
"
new
"
][
"
type
"
]
==
'vhost'
)
{
if
(
$this
->
action
==
'insert'
&&
$data
[
'
new
'
][
'
type
'
]
==
'vhost'
)
{
// Copy the error pages
if
(
$data
[
"
new
"
][
"
errordocs
"
])
{
$error_page_path
=
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
])
.
"
/web/error/
"
;
if
(
file_exists
(
"
/usr/local/ispconfig/server/conf-custom/error/
"
.
substr
(
escapeshellcmd
(
$conf
[
"
language
"
]),
0
,
2
)))
{
exec
(
"
cp /usr/local/ispconfig/server/conf-custom/error/
"
.
substr
(
escapeshellcmd
(
$conf
[
"
language
"
]),
0
,
2
)
.
"
/*
"
.
$error_page_path
);
if
(
$data
[
'
new
'
][
'
errordocs
'
])
{
$error_page_path
=
escapeshellcmd
(
$data
[
'
new
'
][
'
document_root
'
])
.
'
/web/error/
'
;
if
(
file_exists
(
'
/usr/local/ispconfig/server/conf-custom/error/
'
.
substr
(
escapeshellcmd
(
$conf
[
'
language
'
]),
0
,
2
)))
{
exec
(
'
cp /usr/local/ispconfig/server/conf-custom/error/
'
.
substr
(
escapeshellcmd
(
$conf
[
'
language
'
]),
0
,
2
)
.
'
/*
'
.
$error_page_path
);
}
else
{
if
(
file_exists
(
"
/usr/local/ispconfig/server/conf-custom/error/400.html
"
))
{
exec
(
"
cp /usr/local/ispconfig/server/conf-custom/error/*.html
"
.
$error_page_path
);
if
(
file_exists
(
'
/usr/local/ispconfig/server/conf-custom/error/400.html
'
))
{
exec
(
'
cp /usr/local/ispconfig/server/conf-custom/error/*.html
'
.
$error_page_path
);
}
else
{
exec
(
"
cp /usr/local/ispconfig/server/conf/error/
"
.
substr
(
escapeshellcmd
(
$conf
[
"
language
"
]),
0
,
2
)
.
"
/*
"
.
$error_page_path
);
exec
(
'
cp /usr/local/ispconfig/server/conf/error/
'
.
substr
(
escapeshellcmd
(
$conf
[
'
language
'
]),
0
,
2
)
.
'
/*
'
.
$error_page_path
);
}
}
exec
(
"
chmod -R a+r
"
.
$error_page_path
);
exec
(
'
chmod -R a+r
'
.
$error_page_path
);
}
// copy the standard index page
if
(
file_exists
(
"
/usr/local/ispconfig/server/conf-custom/index/standard_index.html_
"
.
substr
(
escapeshellcmd
(
$conf
[
"
language
"
]),
0
,
2
)))
{
exec
(
"
cp /usr/local/ispconfig/server/conf-custom/index/standard_index.html_
"
.
substr
(
escapeshellcmd
(
$conf
[
"
language
"
]),
0
,
2
)
.
" "
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
])
.
"
/web/index.html
"
);
if
(
file_exists
(
'
/usr/local/ispconfig/server/conf-custom/index/standard_index.html_
'
.
substr
(
escapeshellcmd
(
$conf
[
'
language
'
]),
0
,
2
)))
{
exec
(
'
cp /usr/local/ispconfig/server/conf-custom/index/standard_index.html_
'
.
substr
(
escapeshellcmd
(
$conf
[
'
language
'
]),
0
,
2
)
.
' '
.
escapeshellcmd
(
$data
[
'
new
'
][
'
document_root
'
])
.
'
/web/index.html
'
);
}
else
{
if
(
file_exists
(
"
/usr/local/ispconfig/server/conf-custom/index/standard_index.html
"
))
{
exec
(
"
cp /usr/local/ispconfig/server/conf-custom/index/standard_index.html
"
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
])
.
"
/web/index.html
"
);
if
(
file_exists
(
'
/usr/local/ispconfig/server/conf-custom/index/standard_index.html
'
))
{
exec
(
'
cp /usr/local/ispconfig/server/conf-custom/index/standard_index.html
'
.
escapeshellcmd
(
$data
[
'
new
'
][
'
document_root
'
])
.
'
/web/index.html
'
);
}
else
{
exec
(
"
cp /usr/local/ispconfig/server/conf/index/standard_index.html_
"
.
substr
(
escapeshellcmd
(
$conf
[
"
language
"
]),
0
,
2
)
.
" "
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
])
.
"
/web/index.html
"
);
if
(
is_file
(
'/usr/local/ispconfig/server/conf/index/favicon.ico'
))
exec
(
"
cp /usr/local/ispconfig/server/conf/index/favicon.ico
"
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
])
.
"
/web/
"
);
if
(
is_file
(
'/usr/local/ispconfig/server/conf/index/robots.txt'
))
exec
(
"
cp /usr/local/ispconfig/server/conf/index/robots.txt
"
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
])
.
"
/web/
"
);
if
(
is_file
(
'/usr/local/ispconfig/server/conf/index/.htaccess'
))
exec
(
"
cp /usr/local/ispconfig/server/conf/index/.htaccess
"
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
])
.
"
/web/
"
);
exec
(
'
cp /usr/local/ispconfig/server/conf/index/standard_index.html_
'
.
substr
(
escapeshellcmd
(
$conf
[
'
language
'
]),
0
,
2
)
.
' '
.
escapeshellcmd
(
$data
[
'
new
'
][
'
document_root
'
])
.
'
/web/index.html
'
);
if
(
is_file
(
'/usr/local/ispconfig/server/conf/index/favicon.ico'
))
exec
(
'
cp /usr/local/ispconfig/server/conf/index/favicon.ico
'
.
escapeshellcmd
(
$data
[
'
new
'
][
'
document_root
'
])
.
'
/web/
'
);
if
(
is_file
(
'/usr/local/ispconfig/server/conf/index/robots.txt'
))
exec
(
'
cp /usr/local/ispconfig/server/conf/index/robots.txt
'
.
escapeshellcmd
(
$data
[
'
new
'
][
'
document_root
'
])
.
'
/web/
'
);
if
(
is_file
(
'/usr/local/ispconfig/server/conf/index/.htaccess'
))
exec
(
'
cp /usr/local/ispconfig/server/conf/index/.htaccess
'
.
escapeshellcmd
(
$data
[
'
new
'
][
'
document_root
'
])
.
'
/web/
'
);
}
}
exec
(
"
chmod -R a+r
"
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
])
.
"
/web/
"
);
exec
(
'
chmod -R a+r
'
.
escapeshellcmd
(
$data
[
'
new
'
][
'
document_root
'
])
.
'
/web/
'
);
//** Copy the error documents on update when the error document checkbox has been activated and was deactivated before
}
elseif
(
$this
->
action
==
'update'
&&
$data
[
"
new
"
][
"
type
"
]
==
'vhost'
&&
$data
[
"
old
"
][
"
errordocs
"
]
==
0
&&
$data
[
"
new
"
][
"
errordocs
"
]
==
1
)
{
}
elseif
(
$this
->
action
==
'update'
&&
$data
[
'
new
'
][
'
type
'
]
==
'vhost'
&&
$data
[
'
old
'
][
'
errordocs
'
]
==
0
&&
$data
[
'
new
'
][
'
errordocs
'
]
==
1
)
{
$error_page_path
=
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
])
.
"
/web/error/
"
;
if
(
file_exists
(
"
/usr/local/ispconfig/server/conf-custom/error/
"
.
substr
(
escapeshellcmd
(
$conf
[
"
language
"
]),
0
,
2
)))
{
exec
(
"
cp /usr/local/ispconfig/server/conf-custom/error/
"
.
substr
(
escapeshellcmd
(
$conf
[
"
language
"
]),
0
,
2
)
.
"
/*
"
.
$error_page_path
);
$error_page_path
=
escapeshellcmd
(
$data
[
'
new
'
][
'
document_root
'
])
.
'
/web/error/
'
;
if
(
file_exists
(
'
/usr/local/ispconfig/server/conf-custom/error/
'
.
substr
(
escapeshellcmd
(
$conf
[
'
language
'
]),
0
,
2
)))
{
exec
(
'
cp /usr/local/ispconfig/server/conf-custom/error/
'
.
substr
(
escapeshellcmd
(
$conf
[
'
language
'
]),
0
,
2
)
.
'
/*
'
.
$error_page_path
);
}
else
{
if
(
file_exists
(
"
/usr/local/ispconfig/server/conf-custom/error/400.html
"
))
{
exec
(
"
cp /usr/local/ispconfig/server/conf-custom/error/*.html
"
.
$error_page_path
);
if
(
file_exists
(
'
/usr/local/ispconfig/server/conf-custom/error/400.html
'
))
{
exec
(
'
cp /usr/local/ispconfig/server/conf-custom/error/*.html
'
.
$error_page_path
);
}
else
{
exec
(
"
cp /usr/local/ispconfig/server/conf/error/
"
.
substr
(
escapeshellcmd
(
$conf
[
"
language
"
]),
0
,
2
)
.
"
/*
"
.
$error_page_path
);
exec
(
'
cp /usr/local/ispconfig/server/conf/error/
'
.
substr
(
escapeshellcmd
(
$conf
[
'
language
'
]),
0
,
2
)
.
'
/*
'
.
$error_page_path
);
}
}
exec
(
"
chmod -R a+r
"
.
$error_page_path
);
exec
(
'
chmod -R a+r
'
.
$error_page_path
);
}
// end copy error docs
// Create group and user, if not exist
$app
->
uses
(
"
system
"
);
$app
->
uses
(
'
system
'
);
$groupname
=
escapeshellcmd
(
$data
[
"
new
"
][
"
system_group
"
]);
if
(
$data
[
"
new
"
][
"
system_group
"
]
!=
''
&&
!
$app
->
system
->
is_group
(
$data
[
"
new
"
][
"
system_group
"
]))
{
exec
(
"
groupadd
$groupname
"
);
if
(
$apache_chrooted
)
$this
->
_exec
(
"
chroot
"
.
escapeshellcmd
(
$web_config
[
'website_basedir'
])
.
"
groupadd
$groupname
"
);
$app
->
log
(
"
Adding the group:
$groupname
"
,
LOGLEVEL_DEBUG
);
$groupname
=
escapeshellcmd
(
$data
[
'
new
'
][
'
system_group
'
]);
if
(
$data
[
'
new
'
][
'
system_group
'
]
!=
''
&&
!
$app
->
system
->
is_group
(
$data
[
'
new
'
][
'
system_group
'
]))
{
exec
(
'
groupadd
'
.
$groupname
);
if
(
$apache_chrooted
)
$this
->
_exec
(
'
chroot
'
.
escapeshellcmd
(
$web_config
[
'website_basedir'
])
.
'
groupadd
'
.
$groupname
);
$app
->
log
(
'
Adding the group:
'
.
$groupname
,
LOGLEVEL_DEBUG
);
}
$username
=
escapeshellcmd
(
$data
[
"
new
"
][
"
system_user
"
]);
if
(
$data
[
"
new
"
][
"
system_user
"
]
!=
''
&&
!
$app
->
system
->
is_user
(
$data
[
"
new
"
][
"
system_user
"
]))
{
exec
(
"
useradd -d
"
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
])
.
" -g
$groupname
-G sshusers
$username
-s /bin/false"
);
if
(
$apache_chrooted
)
$this
->
_exec
(
"
chroot
"
.
escapeshellcmd
(
$web_config
[
'website_basedir'
])
.
" "
.
"
useradd -d
"
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
])
.
" -g
$groupname
-G sshusers
$username
-s /bin/false"
);
$app
->
log
(
"
Adding the user:
$username
"
,
LOGLEVEL_DEBUG
);
$username
=
escapeshellcmd
(
$data
[
'
new
'
][
'
system_user
'
]);
if
(
$data
[
'
new
'
][
'
system_user
'
]
!=
''
&&
!
$app
->
system
->
is_user
(
$data
[
'
new
'
][
'
system_user
'
]))
{
exec
(
'
useradd -d
'
.
escapeshellcmd
(
$data
[
'
new
'
][
'
document_root
'
])
.
" -g
$groupname
-G sshusers
$username
-s /bin/false"
);
if
(
$apache_chrooted
)
$this
->
_exec
(
'
chroot
'
.
escapeshellcmd
(
$web_config
[
'website_basedir'
])
.
'
useradd -d
'
.
escapeshellcmd
(
$data
[
'
new
'
][
'
document_root
'
])
.
" -g
$groupname
-G sshusers
$username
-s /bin/false"
);
$app
->
log
(
'
Adding the user:
'
.
$username
,
LOGLEVEL_DEBUG
);
}
// Set the quota for the user
if
(
$username
!=
''
&&
$app
->
system
->
is_user
(
$username
))
{
if
(
$data
[
"
new
"
][
"
hd_quota
"
]
>
0
)
{
$blocks_soft
=
$data
[
"
new
"
][
"
hd_quota
"
]
*
1024
;
if
(
$data
[
'
new
'
][
'
hd_quota
'
]
>
0
)
{
$blocks_soft
=
$data
[
'
new
'
][
'
hd_quota
'
]
*
1024
;
$blocks_hard
=
$blocks_soft
+
1024
;
}
else
{
$blocks_soft
=
$blocks_hard
=
0
;
}
exec
(
"setquota -u
$username
$blocks_soft
$blocks_hard
0 0 -a &> /dev/null"
);
exec
(
"
setquota -T -u
$username
604800 604800 -a &> /dev/null
"
);
exec
(
'
setquota -T -u
'
.
$username
.
'
604800 604800 -a &> /dev/null
'
);
}
if
(
$this
->
action
==
'insert'
)
{
// Chown and chmod the directories below the document root
$this
->
_exec
(
"
chown -R
$username
:
$groupname
"
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
]));
$this
->
_exec
(
'
chown -R
'
.
$username
.
':'
.
$groupname
.
' '
.
escapeshellcmd
(
$data
[
'
new
'
][
'
document_root
'
]));
// The document root itself has to be owned by root in normal level and by the web owner in security level 20
if
(
$web_config
[
'security_level'
]
==
20
)
{
$this
->
_exec
(
"
chown
$username
:
$groupname
"
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
]));
$this
->
_exec
(
'
chown
'
.
$username
.
':'
.
$groupname
.
' '
.
escapeshellcmd
(
$data
[
'
new
'
][
'
document_root
'
]));
}
else
{
$this
->
_exec
(
"
chown root:root
"
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
]));
$this
->
_exec
(
'
chown root:root
'
.
escapeshellcmd
(
$data
[
'
new
'
][
'
document_root
'
]));
}
}
...
...
@@ -485,34 +485,34 @@ class apache2_plugin {
//* If the security level is set to high
if
(
$web_config
[
'security_level'
]
==
20
)
{
$this
->
_exec
(
"
chmod 751
"
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
]
.
"/"
));
$this
->
_exec
(
"
chmod 751
"
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
])
.
"
/*
"
);
$this
->
_exec
(
"
chmod 710
"
.
escapeshellcmd
(
$data
[
"
new
"
][
"
document_root
"
]
.
"
/web
"
));
$this
->
_exec
(
'
chmod 751
'
.
escapeshellcmd
(
$data
[
'
new
'