Comments (7)
If one subprocess has a lock (can be only one), others will terminate. On the ttl expiration, the subprocess will terminate and remove lock file and socket file.
from ansible-keepass.
Ok, thx for your time
from ansible-keepass.
I just see that my collection version is 0.7.0 and not the last one, may be my runtime concurrent issue is not link to my previous code analysis...
from ansible-keepass.
This issue has been resolved in version 0.7.2
from ansible-keepass.
Ok, I'll try.
I still thinking that, if the plugin is run in multithreading, the following section should be threadsafe protect thanks a Lock():
lock_op.acquire()
try:
os.open(lock_file_, os.O_RDWR)
except FileNotFoundError:
cmd = [
"/usr/bin/env",
"python3",
os.path.abspath(__file__),
var_dbx,
socket_path,
var_ttl,
]
if var_key:
cmd.append("--key=%s" % var_key)
try:
display.v("KeePass: run socket for %s" % var_dbx)
subprocess.Popen(cmd)
except OSError:
os.remove(lock_file_)
raise AnsibleError(traceback.format_exc())
attempts = 10
success = False
for _ in range(attempts):
try:
display.vvv("KeePass: try connect to socket %s/%s" % (_, attempts))
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect(socket_path)
# send password to the socket for decrypt keepass dbx
display.vvv("KeePass: send password to '%s'" % socket_path)
sock.send(_rq("password", str(var_psw)))
resp = sock.recv(1024).decode().splitlines()
if len(resp) == 2 and resp[0] == "password":
if resp[1] == "0":
success = True
else:
raise AnsibleError("KeePass: wrong dbx password")
sock.close()
break
except FileNotFoundError:
# wait until the above command open the socket
time.sleep(1)
if not success:
raise AnsibleError("KeePass: socket connection failed for %s" % var_dbx)
display.v("KeePass: open socket for %s -> %s" % (var_dbx, socket_path))
finally:
lock_op.release()
Don't you think so ?
from ansible-keepass.
It protected:
Part of the plugin code from your example used to avoid manually opening keepass socket before use Ansible
from ansible-keepass.
Yes, but you may start multiple subprocess, and one will win to acquire le fd lock.
So, don't we have unused subprocess waiting on the lock, and on the ttl expiration they could unblock and restart listening on sock ?
from ansible-keepass.
Related Issues (20)
- Entry <name> not found HOT 2
- python-pykeepass 4.0.0 HOT 2
- global name 'FileNotFoundError' HOT 1
- FileNotFoundError: [Errno 2] No such file or directory: '/tmp/ansible-keepass-6d5c20be.sock' HOT 20
- Plugin does not suppport lookup of properties/attributes with several lines HOT 5
- Add module to collection for writing attachments to file system HOT 5
- Password shall not be mandatory for opening the db
- KeePass: socket connection failed when used in parallel HOT 2
- backslashes are being escaped in password HOT 2
- Using a kbdx over https HOT 1
- Socket location HOT 2
- Temp files should be in tmpfs HOT 4
- Support for database editting HOT 3
- Implementation as cache plugin HOT 6
- Unable to get attachments HOT 1
- custom_properties - long chain are truncated
- Search for DB entry by title/url + regex HOT 4
- Recover the attachment contents directly HOT 1
- python-pykeepass v4.0.7 - No module named 'pykeepass.kdbx_parsing'" HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ansible-keepass.