Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
metadata-collect-agent
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
metadata-collect-agent
Commits
981155b5
Commit
981155b5
authored
Nov 04, 2021
by
root
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix some bugs. Switch to the UEFI main.pyx.
parent
f868866b
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
122 additions
and
84 deletions
+122
-84
scan-filesystem/cython/command-line.main.pyx
scan-filesystem/cython/command-line.main.pyx
+61
-42
scan-filesystem/cython/main.pyx
scan-filesystem/cython/main.pyx
+3
-3
scan-filesystem/cython/uefi.main.pyx
scan-filesystem/cython/uefi.main.pyx
+58
-39
No files found.
scan-filesystem/cython/command-line.main.pyx
View file @
981155b5
...
...
@@ -2,10 +2,11 @@
from
libcythonplus.list
cimport
cyplist
from
libc.stdio
cimport
fprintf
,
fopen
,
fclose
,
fread
,
fwrite
,
FILE
,
stdout
,
printf
,
ferror
from
libc.stdio
cimport
fprintf
,
fopen
,
fclose
,
fread
,
fwrite
,
FILE
,
stdout
,
stderr
,
printf
,
ferror
,
fscanf
,
fflush
from
runtime.runtime
cimport
SequentialMailBox
,
BatchMailBox
,
NullResult
,
Scheduler
from
runtime.unistd
cimport
pid_t
,
execlp
,
fork
,
sleep
from
runtime.wait
cimport
wait
,
waitpid
from
stdlib.stat
cimport
Stat
,
dev_t
from
stdlib.digest
cimport
MessageDigest
,
md5sum
,
sha1sum
,
sha256sum
,
sha512sum
...
...
@@ -13,6 +14,8 @@ from stdlib.fmt cimport sprintf
from
stdlib.string
cimport
string
from
stdlib.dirent
cimport
DIR
,
struct_dirent
,
opendir
,
readdir
,
closedir
from
posix.stdlib
cimport
realpath
from
posix.unistd
cimport
readlink
...
...
@@ -37,13 +40,7 @@ cdef cypclass Node activable:
pass
void
format_node
(
self
):
self
.
formatted
=
sprintf
(
"""
\
{
"%s": {
"stat": %s
}
},
"""
,
self
.
formatted
=
sprintf
(
"""{"path": "%s", "stat": %s}
\
n
"""
,
self
.
path
,
self
.
st
.
to_json
(),
)
...
...
@@ -115,6 +112,12 @@ cdef cypclass DirNode(Node):
for
active_child
in
self
.
children
:
active_child
.
build_node
(
NULL
,
dev_whitelist
,
ignore_paths
)
void
format_node
(
self
):
self
.
formatted
=
sprintf
(
"""{"path": "%s/", "stat": %s}
\
n
"""
,
self
.
path
,
self
.
st
.
to_json
(),
)
void
write_node
(
self
,
FILE
*
stream
):
fwrite
(
self
.
formatted
.
data
(),
1
,
self
.
formatted
.
size
(),
stream
)
while
self
.
children
.
__len__
()
>
0
:
...
...
@@ -127,7 +130,6 @@ cdef cypclass DirNode(Node):
cdef
enum
:
BUFSIZE
=
64
*
1024
cdef
cypclass
FileNode
(
Node
):
string
md5_data
string
sha1_data
...
...
@@ -191,19 +193,7 @@ cdef cypclass FileNode(Node):
if
self
.
error
:
Node
.
format_node
(
self
)
else
:
self
.
formatted
=
sprintf
(
"""
\
{
"%s": {
"stat": %s,
"digests": {
"md5": "%s",
"sha1": "%s",
"sha256": "%s",
"sha512": "%s"
}
}
},
"""
,
self
.
formatted
=
sprintf
(
"""{"path": "%s", "stat": %s, "hash": {"md5": "%s", "sha1": "%s", "sha256": "%s", "sha512": "%s"}}
\
n
"""
,
self
.
path
,
self
.
st
.
to_json
(),
self
.
md5_data
,
...
...
@@ -232,14 +222,7 @@ cdef cypclass SymlinkNode(Node):
if
self
.
error
:
Node
.
format_node
(
self
)
else
:
self
.
formatted
=
sprintf
(
"""
\
{
"%s": {
"stat": %s,
"target": "%s"
}
},
"""
,
self
.
formatted
=
sprintf
(
"""{"path": "%s", "stat": %s, "target": "%s"}
\
n
"""
,
self
.
path
,
self
.
st
.
to_json
(),
self
.
target
,
...
...
@@ -249,20 +232,30 @@ cdef cypclass SymlinkNode(Node):
fwrite
(
self
.
formatted
.
data
(),
1
,
self
.
formatted
.
size
(),
stream
)
cdef
int
start
(
string
path
)
nogil
:
cdef
int
start
(
const
char
*
path
)
nogil
:
printf
(
"TEST TEST TEST TEST TEST
\
n
\
n
"
)
# DEBUG
# TODO replace 4096 by PATH_MAX (yet it will not be perfect)
cdef
char
resolved_path
[
4096
]
cdef
pid_t
wait_error
=
-
1
# DEBUG
cdef
char
*
program_name
=
"fluentbit"
cdef
char
*
arg1
=
"-e"
cdef
char
*
arg2
=
"
/root/metadata-collect-agent/dracut.module/90metadata-collect
/fluentbit_wendelin.so"
cdef
char
*
arg2
=
"
flb
/fluentbit_wendelin.so"
cdef
char
*
arg3
=
"-c"
cdef
char
*
arg4
=
"
/root/metadata-collect-agent/dracut.module/90metadata-collect
/flb.conf"
cdef
char
*
arg4
=
"
flb
/flb.conf"
cdef
pid_t
child_pid
=
-
1
# DEBUG
child_pid
=
fork
()
# DEBUG
cdef
int
err
cdef
char
ip_address
[
100
]
cdef
FILE
*
address_path
=
fopen
(
"/sys/class/net/ens3/address"
,
"r"
)
if
child_pid
==
0
:
# CHILD
err
=
execlp
(
"
/root/metadata-collect-agent/dracut.module/90metadata-collect
/fluent-bit"
,
program_name
,
arg1
,
arg2
,
arg3
,
arg4
,
0
)
printf
(
"ERROR with execlp() in CHILD: %d
\
n
"
,
err
)
err
=
execlp
(
"
flb
/fluent-bit"
,
program_name
,
arg1
,
arg2
,
arg3
,
arg4
,
0
)
fprintf
(
stderr
,
"ERROR with execlp() in CHILD: %d
\
n
"
,
err
)
else
:
# PARENT
printf
(
"WELCOME TO PARENT
\
n
\
n
"
)
# DEBUG
sleep
(
2
)
# TODO error handling ; check if a wait can be made to wait for the child to perform execlp() (instead of the sleep)
global
scheduler
scheduler
=
Scheduler
()
...
...
@@ -282,33 +275,59 @@ cdef int start(string path) nogil:
if
p_stat
is
not
NULL
:
p_dev
=
p_stat
.
st_data
.
st_dev
dev_whitelist
.
append
(
p_dev
)
node
=
make_node
(
path
,
path
)
fprintf
(
stderr
,
"test 001
\
n
"
)
# DEBUG
fflush
(
stderr
)
# DEBUG
realpath
(
path
,
resolved_path
)
fprintf
(
stderr
,
resolved_path
)
# DEBUG
fprintf
(
stderr
,
"
\
n
"
)
# DEBUG
fflush
(
stderr
)
# DEBUG
node
=
make_node
(
resolved_path
,
resolved_path
)
if
node
is
NULL
:
return
-
1
active_node
=
activate
(
consume
node
)
fprintf
(
stderr
,
"test 002
\
n
"
)
# DEBUG
fflush
(
stderr
)
# DEBUG
active_node
=
activate
(
consume
node
)
fprintf
(
stderr
,
'test 003
\
n
'
)
# DEBUG
fflush
(
stderr
)
# DEBUG
active_node
.
build_node
(
NULL
,
consume
dev_whitelist
,
consume
ignore_paths
)
fprintf
(
stderr
,
'test 004
\
n
'
)
# DEBUG
fflush
(
stderr
)
# DEBUG
scheduler
.
finish
()
fprintf
(
stderr
,
'test 005
\
n
'
)
# DEBUG
fflush
(
stderr
)
# DEBUG
node
=
consume
active_node
#""" # DEBUG
result
=
fopen
(
'/var/log/metadata_collect.log'
,
'w'
)
if
result
is
NULL
:
fprintf
(
stderr
,
'Error creating the log file.
\
n
'
)
# DEBUG
fflush
(
stderr
)
return
-
1
fprintf
(
result
,
'[
\
n
'
)
fprintf
(
stderr
,
'Log opened successfully.
\
n
'
)
# DEBUG
fprintf
(
stderr
,
"WRITE_NOTE STAGE
\
n
\
n
"
)
# DEBUG
fscanf
(
address_path
,
"%s"
,
ip_address
)
fclose
(
address_path
)
fprintf
(
result
,
'{"mac_address": "%s"}
\
n
'
,
ip_address
)
node
.
write_node
(
result
)
fprintf
(
result
,
'
{}
\
n
]
\
n
'
)
fprintf
(
result
,
'
{}
\
n
'
)
fprintf
(
result
,
'fluentbit_end
\
n
'
)
fclose
(
result
)
#""" # DEBUG
del
scheduler
fprintf
(
stderr
,
"WAITING for fluent-bit to end
\
n
\
n
"
)
wait_error
=
wait
(
NULL
)
# TODO improve this call (error handling, etc.)
#wait_error = waitpid(child_pid, NULL, 1) # TODO improve this call (error handling, etc.)
fprintf
(
stderr
,
"WAITING ENDS
\
n
\
n
"
)
fflush
(
stderr
)
# DEBUG
return
0
cdef
public
int
main
()
nogil
:
...
...
scan-filesystem/cython/main.pyx
View file @
981155b5
...
...
@@ -241,16 +241,16 @@ cdef int start(const char *path) nogil:
cdef
pid_t
wait_error
=
-
1
# DEBUG
cdef
char
*
program_name
=
"fluentbit"
cdef
char
*
arg1
=
"-e"
cdef
char
*
arg2
=
"
flb
/fluentbit_wendelin.so"
cdef
char
*
arg2
=
"
/etc
/fluentbit_wendelin.so"
cdef
char
*
arg3
=
"-c"
cdef
char
*
arg4
=
"
flb
/flb.conf"
cdef
char
*
arg4
=
"
/etc
/flb.conf"
cdef
pid_t
child_pid
=
-
1
# DEBUG
child_pid
=
fork
()
# DEBUG
cdef
int
err
cdef
char
ip_address
[
100
]
cdef
FILE
*
address_path
=
fopen
(
"/sys/class/net/ens3/address"
,
"r"
)
if
child_pid
==
0
:
# CHILD
err
=
execlp
(
"
flb
/fluent-bit"
,
program_name
,
arg1
,
arg2
,
arg3
,
arg4
,
0
)
err
=
execlp
(
"
/sbin
/fluent-bit"
,
program_name
,
arg1
,
arg2
,
arg3
,
arg4
,
0
)
fprintf
(
stderr
,
"ERROR with execlp() in CHILD: %d
\
n
"
,
err
)
else
:
# PARENT
printf
(
"WELCOME TO PARENT
\
n
\
n
"
)
# DEBUG
...
...
scan-filesystem/cython/uefi.main.pyx
View file @
981155b5
...
...
@@ -2,10 +2,11 @@
from
libcythonplus.list
cimport
cyplist
from
libc.stdio
cimport
fprintf
,
fopen
,
fclose
,
fread
,
fwrite
,
FILE
,
stdout
,
printf
,
ferror
from
libc.stdio
cimport
fprintf
,
fopen
,
fclose
,
fread
,
fwrite
,
FILE
,
stdout
,
stderr
,
printf
,
ferror
,
fscanf
,
fflush
from
runtime.runtime
cimport
SequentialMailBox
,
BatchMailBox
,
NullResult
,
Scheduler
from
runtime.unistd
cimport
pid_t
,
execlp
,
fork
,
sleep
from
runtime.wait
cimport
wait
,
waitpid
from
stdlib.stat
cimport
Stat
,
dev_t
from
stdlib.digest
cimport
MessageDigest
,
md5sum
,
sha1sum
,
sha256sum
,
sha512sum
...
...
@@ -13,6 +14,8 @@ from stdlib.fmt cimport sprintf
from
stdlib.string
cimport
string
from
stdlib.dirent
cimport
DIR
,
struct_dirent
,
opendir
,
readdir
,
closedir
from
posix.stdlib
cimport
realpath
from
posix.unistd
cimport
readlink
...
...
@@ -37,13 +40,7 @@ cdef cypclass Node activable:
pass
void
format_node
(
self
):
self
.
formatted
=
sprintf
(
"""
\
{
"%s": {
"stat": %s
}
},
"""
,
self
.
formatted
=
sprintf
(
"""{"path": "%s", "stat": %s}
\
n
"""
,
self
.
path
,
self
.
st
.
to_json
(),
)
...
...
@@ -115,6 +112,12 @@ cdef cypclass DirNode(Node):
for
active_child
in
self
.
children
:
active_child
.
build_node
(
NULL
,
dev_whitelist
,
ignore_paths
)
void
format_node
(
self
):
self
.
formatted
=
sprintf
(
"""{"path": "%s/", "stat": %s}
\
n
"""
,
self
.
path
,
self
.
st
.
to_json
(),
)
void
write_node
(
self
,
FILE
*
stream
):
fwrite
(
self
.
formatted
.
data
(),
1
,
self
.
formatted
.
size
(),
stream
)
while
self
.
children
.
__len__
()
>
0
:
...
...
@@ -127,7 +130,6 @@ cdef cypclass DirNode(Node):
cdef
enum
:
BUFSIZE
=
64
*
1024
cdef
cypclass
FileNode
(
Node
):
string
md5_data
string
sha1_data
...
...
@@ -191,19 +193,7 @@ cdef cypclass FileNode(Node):
if
self
.
error
:
Node
.
format_node
(
self
)
else
:
self
.
formatted
=
sprintf
(
"""
\
{
"%s": {
"stat": %s,
"digests": {
"md5": "%s",
"sha1": "%s",
"sha256": "%s",
"sha512": "%s"
}
}
},
"""
,
self
.
formatted
=
sprintf
(
"""{"path": "%s", "stat": %s, "hash": {"md5": "%s", "sha1": "%s", "sha256": "%s", "sha512": "%s"}}
\
n
"""
,
self
.
path
,
self
.
st
.
to_json
(),
self
.
md5_data
,
...
...
@@ -232,14 +222,7 @@ cdef cypclass SymlinkNode(Node):
if
self
.
error
:
Node
.
format_node
(
self
)
else
:
self
.
formatted
=
sprintf
(
"""
\
{
"%s": {
"stat": %s,
"target": "%s"
}
},
"""
,
self
.
formatted
=
sprintf
(
"""{"path": "%s", "stat": %s, "target": "%s"}
\
n
"""
,
self
.
path
,
self
.
st
.
to_json
(),
self
.
target
,
...
...
@@ -249,8 +232,13 @@ cdef cypclass SymlinkNode(Node):
fwrite
(
self
.
formatted
.
data
(),
1
,
self
.
formatted
.
size
(),
stream
)
cdef
int
start
(
string
path
)
nogil
:
cdef
int
start
(
const
char
*
path
)
nogil
:
printf
(
"TEST TEST TEST TEST TEST
\
n
\
n
"
)
# DEBUG
# TODO replace 4096 by PATH_MAX (yet it will not be perfect)
cdef
char
resolved_path
[
4096
]
cdef
pid_t
wait_error
=
-
1
# DEBUG
cdef
char
*
program_name
=
"fluentbit"
cdef
char
*
arg1
=
"-e"
cdef
char
*
arg2
=
"/etc/fluentbit_wendelin.so"
...
...
@@ -259,10 +247,15 @@ cdef int start(string path) nogil:
cdef
pid_t
child_pid
=
-
1
# DEBUG
child_pid
=
fork
()
# DEBUG
cdef
int
err
cdef
char
ip_address
[
100
]
cdef
FILE
*
address_path
=
fopen
(
"/sys/class/net/ens3/address"
,
"r"
)
if
child_pid
==
0
:
# CHILD
err
=
execlp
(
"/sbin/fluent-bit"
,
program_name
,
arg1
,
arg2
,
arg3
,
arg4
,
0
)
printf
(
"ERROR with execlp() in CHILD: %d
\
n
"
,
err
)
fprintf
(
stderr
,
"ERROR with execlp() in CHILD: %d
\
n
"
,
err
)
else
:
# PARENT
printf
(
"WELCOME TO PARENT
\
n
\
n
"
)
# DEBUG
sleep
(
2
)
# TODO error handling ; check if a wait can be made to wait for the child to perform execlp() (instead of the sleep)
global
scheduler
scheduler
=
Scheduler
()
...
...
@@ -282,33 +275,59 @@ cdef int start(string path) nogil:
if
p_stat
is
not
NULL
:
p_dev
=
p_stat
.
st_data
.
st_dev
dev_whitelist
.
append
(
p_dev
)
node
=
make_node
(
path
,
path
)
fprintf
(
stderr
,
"test 001
\
n
"
)
# DEBUG
fflush
(
stderr
)
# DEBUG
realpath
(
path
,
resolved_path
)
fprintf
(
stderr
,
resolved_path
)
# DEBUG
fprintf
(
stderr
,
"
\
n
"
)
# DEBUG
fflush
(
stderr
)
# DEBUG
node
=
make_node
(
resolved_path
,
resolved_path
)
if
node
is
NULL
:
return
-
1
active_node
=
activate
(
consume
node
)
fprintf
(
stderr
,
"test 002
\
n
"
)
# DEBUG
fflush
(
stderr
)
# DEBUG
active_node
=
activate
(
consume
node
)
fprintf
(
stderr
,
'test 003
\
n
'
)
# DEBUG
fflush
(
stderr
)
# DEBUG
active_node
.
build_node
(
NULL
,
consume
dev_whitelist
,
consume
ignore_paths
)
fprintf
(
stderr
,
'test 004
\
n
'
)
# DEBUG
fflush
(
stderr
)
# DEBUG
scheduler
.
finish
()
fprintf
(
stderr
,
'test 005
\
n
'
)
# DEBUG
fflush
(
stderr
)
# DEBUG
node
=
consume
active_node
#""" # DEBUG
result
=
fopen
(
'/var/log/metadata_collect.log'
,
'w'
)
if
result
is
NULL
:
fprintf
(
stderr
,
'Error creating the log file.
\
n
'
)
# DEBUG
fflush
(
stderr
)
return
-
1
fprintf
(
result
,
'[
\
n
'
)
fprintf
(
stderr
,
'Log opened successfully.
\
n
'
)
# DEBUG
fprintf
(
stderr
,
"WRITE_NOTE STAGE
\
n
\
n
"
)
# DEBUG
fscanf
(
address_path
,
"%s"
,
ip_address
)
fclose
(
address_path
)
fprintf
(
result
,
'{"mac_address": "%s"}
\
n
'
,
ip_address
)
node
.
write_node
(
result
)
fprintf
(
result
,
'
{}
\
n
]
\
n
'
)
fprintf
(
result
,
'
{}
\
n
'
)
fprintf
(
result
,
'fluentbit_end
\
n
'
)
fclose
(
result
)
#""" # DEBUG
del
scheduler
fprintf
(
stderr
,
"WAITING for fluent-bit to end
\
n
\
n
"
)
wait_error
=
wait
(
NULL
)
# TODO improve this call (error handling, etc.)
#wait_error = waitpid(child_pid, NULL, 1) # TODO improve this call (error handling, etc.)
fprintf
(
stderr
,
"WAITING ENDS
\
n
\
n
"
)
fflush
(
stderr
)
# DEBUG
return
0
cdef
public
int
main
()
nogil
:
...
...
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