Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
CIRCLE
/
cloud
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
94
Merge Requests
10
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
A prog2-höz tartozó friss repo anyagok itt elérhetőek:
https://git.iit.bme.hu/
Commit
e0ef5de6
authored
Feb 27, 2013
by
Őry Máté
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
store: do setuided write in subprocess
parent
5549fde5
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
21 additions
and
19 deletions
+21
-19
miscellaneous/store-server/CloudStore.py
+21
-19
No files found.
miscellaneous/store-server/CloudStore.py
View file @
e0ef5de6
...
...
@@ -8,9 +8,7 @@ import uuid
import
subprocess
import
ConfigParser
from
pwd
import
getpwnam
import
thread
setuid_lock
=
thread
.
allocate_lock
()
import
multiprocessing
# Get configuration file
config
=
ConfigParser
.
ConfigParser
()
...
...
@@ -281,6 +279,20 @@ def upload_allow(hash_num):
response
.
set_header
(
'Access-Control-Allow-Headers'
,
'Content-Type, Content-Range, Content-Disposition, Content-Description'
)
return
'ok'
def
_upload_save
(
uid
,
gid
,
input
,
path
):
os
.
setegid
(
gid
)
os
.
seteuid
(
uid
)
try
:
with
open
(
path
,
'wb'
,
0600
)
as
output
:
while
True
:
chunk
=
input
.
read
(
256
*
1024
)
if
not
chunk
:
break
output
.
write
(
chunk
)
finally
:
input
.
close
()
@route
(
'/ul/<hash_num>'
,
method
=
'POST'
)
def
upload
(
hash_num
):
link
=
ROOT_WWW_FOLDER
+
'/'
+
hash_num
...
...
@@ -300,25 +312,15 @@ def upload(hash_num):
abort
(
400
,
'Invalid path.'
)
linkstat
=
os
.
stat
(
link
)
os
.
remove
(
link
)
try
:
with
setuid_lock
:
p
=
multiprocessing
.
Process
(
target
=
_upload_save
,
args
=
(
linkstat
.
st_uid
,
linkstat
.
st_gid
,
file_data
.
file
,
up_path
,
))
try
:
os
.
setegid
(
linkstat
.
st_gid
)
os
.
seteuid
(
linkstat
.
st_uid
)
file
=
open
(
up_path
,
'wb'
,
0600
)
p
.
start
()
p
.
join
()
finally
:
os
.
seteuid
(
0
)
os
.
setegid
(
0
)
while
True
:
chunk
=
file_data
.
file
.
read
(
256
*
1024
)
if
not
chunk
:
break
file
.
write
(
chunk
)
except
:
p
.
terminate
()
if
p
.
exitcode
:
abort
(
400
,
'Write failed.'
)
finally
:
file
.
close
()
try
:
redirect_address
=
request
.
headers
.
get
(
'Referer'
)
except
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment