The branch, master has been updated
via 38e5b3d6a24 winbind:varlink: Always reply with the requested
username
via 0cc22fdd8d2 winbind:varlink: Print varlink replies
via f7a537531d6 winbind:varlink: Initialize variables
via 11591ba5449 winbind: Add a check for "winbind varlink service"
via 2f26ccdaac2 s3/utils: Add a check for "winbind varlink service"
via f79bdd17d6f winbind:varlink: Set the disposition field in user
records
via 8a626923e48 winbind:varlink: Check memory allocation when creating
the records
via 0653b4b1c95 pytests/varlink: Add varlink tests
via 5185d3eb376 bootstrap: Install libvarlink and python3-varlink for
selftests
via 949acb6a9b1 winbind:varlink: Avoid recursion
via 218e218de9d winbind:varlink: Improve membership enumeration
continue flag handling
via e61e6ecd3d3 winbind:varlink: Install connection closed handler
via 32d2a783b0c winbind:varlink: Implement membership by group and user
names
via 3ce570c7b5b winbind:varlink: Implement memberships by group name
via ad215705aad winbind:varlink: Implement memberships by user
via 6f437ae49d5 winbind:varlink: Implement memberships enumeration
via 68e590c7139 winbind:varlink: Implement get group record by name and
gid
via e8813b2d620 winbind:varlink: Implement get group record by name
via b841911f735 winbind:varlink: Implement get group record by gid
via 9144e091219 winbind:varlink: Implement group record enumeration
via 4c3910fa86d winbind:varlink: Implement get user record by name and
uid
via d42c485b843 winbind:varlink: Implement get user record by name
via 946a800c219 winbind:varlink: Implement get user record by uid
via 6369e052474 winbind:varlink: Implement user record enumeration
via d40f5591bc1 winbind:varlink: Add a function to craft a
winbindd_cli_state structure
via e59f2c513fa winbind:varlink: Add io.systemd.UserDatabase interface
via b52ccab3b33 winbind:varlink: Create varlink socket directory
via 776eea8090c winbind:varlink: Add varlink service
via e1f448e1259 winbind: Add "winbind varlink service" smb.conf option
via 7996e03b7da wscript: Add --with-systemd-userdb option
via 849f9596f91 winbind: Fix running in interactive mode
from 7f3222d0042 ctdb-scripts: Fix CTDB_BASE to allow event scripts to
run standalone
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 38e5b3d6a24f9b32b3736ac3dfa224c3c4569a5e
Author: Samuel Cabrero <[email protected]>
Date: Fri Feb 7 16:10:47 2025 +0100
winbind:varlink: Always reply with the requested username
The service io.systemd.Multiplexer will drop responses if the username in
the
response does not match the requested name. This happens when the requested
username is an UPN and the response is a down-level user name (DOMAIN\user).
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
Autobuild-User(master): Andreas Schneider <[email protected]>
Autobuild-Date(master): Thu Feb 20 09:05:46 UTC 2025 on atb-devel-224
commit 0cc22fdd8d25d51b48f26355b906b385b9b8b729
Author: Samuel Cabrero <[email protected]>
Date: Fri Feb 7 15:18:45 2025 +0100
winbind:varlink: Print varlink replies
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit f7a537531d63a47a8045cd917a4de5942089bf94
Author: Samuel Cabrero <[email protected]>
Date: Thu Feb 6 15:31:47 2025 +0100
winbind:varlink: Initialize variables
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 11591ba54496be67eb095776311dbbe3a72910e7
Author: Samuel Cabrero <[email protected]>
Date: Thu Feb 6 15:18:26 2025 +0100
winbind: Add a check for "winbind varlink service"
Print a warning in winbindd startup if the option is enabled
but samba was built without systemd's userdb support.
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 2f26ccdaac260d3832fe227805d79d13b2d4ef92
Author: Samuel Cabrero <[email protected]>
Date: Thu Feb 6 14:41:57 2025 +0100
s3/utils: Add a check for "winbind varlink service"
Warn when the option is enabled but samba was built without systemd's userdb
support.
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit f79bdd17d6fc93d202b8b079d11114fc1b3cba80
Author: Samuel Cabrero <[email protected]>
Date: Mon Feb 3 14:53:59 2025 +0100
winbind:varlink: Set the disposition field in user records
Set the disposition field in the user record, otherwise systemd could
derive it
from the uid based on its configured ranges.
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 8a626923e4884c9478322e61d31d056c6d2c1803
Author: Samuel Cabrero <[email protected]>
Date: Mon Feb 3 14:15:07 2025 +0100
winbind:varlink: Check memory allocation when creating the records
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 0653b4b1c95d197525c41faaff021e088b18edd1
Author: Samuel Cabrero <[email protected]>
Date: Tue Feb 21 18:02:26 2023 +0100
pytests/varlink: Add varlink tests
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 5185d3eb3760425aa7787f4fd303b6fe0451a625
Author: Samuel Cabrero <[email protected]>
Date: Tue Jan 21 12:14:45 2025 +0100
bootstrap: Install libvarlink and python3-varlink for selftests
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 949acb6a9b15578d554e605bfd90c22c4bc3fbec
Author: Samuel Cabrero <[email protected]>
Date: Wed Apr 17 11:58:24 2024 +0200
winbind:varlink: Avoid recursion
Avoid recursion while dispatching a call. This is similar to the
_NO_WINBINDD
environment variable that nss_winbind uses, but on the server side.
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 218e218de9df2c20ac409524e34ece276c9d42ea
Author: Samuel Cabrero <[email protected]>
Date: Thu Feb 9 14:26:04 2023 +0100
winbind:varlink: Improve membership enumeration continue flag handling
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit e61e6ecd3d30d6baef667197aa64f22246ba112a
Author: Samuel Cabrero <[email protected]>
Date: Wed Feb 8 15:57:37 2023 +0100
winbind:varlink: Install connection closed handler
If the connection is closed by the client the ongoing tevent_req must be
cancelled, otherwise winbindd receives a SIGBUS when trying to write in
the closed stream.
[2023/02/08 12:56:41.308393, 0] ../../lib/util/fault.c:173(smb_panic_log)
===============================================================
[2023/02/08 12:56:41.308438, 0] ../../lib/util/fault.c:174(smb_panic_log)
INTERNAL ERROR: Signal 7: Bus error in pid 24407
(4.19.0pre1-DEVELOPERBUILD)
[2023/02/08 12:56:41.308451, 0] ../../lib/util/fault.c:178(smb_panic_log)
If you are running a recent Samba version, and if you think this
problem is not yet fixed in the latest versions, please consider reporting this
bug, see https://wiki.samba.org/index.php/Bug_Reporting
[2023/02/08 12:56:41.308463, 0] ../../lib/util/fault.c:183(smb_panic_log)
===============================================================
[2023/02/08 12:56:41.308473, 0] ../../lib/util/fault.c:184(smb_panic_log)
PANIC (pid 24407): Signal 7: Bus error in 4.19.0pre1-DEVELOPERBUILD
Backtrace:
#0 0x00007f0e76853997 in wait4 () from /lib64/libc.so.6
#1 0x00007f0e767c591b in do_system () from /lib64/libc.so.6
#2 0x00007f0e7785ce43 in smb_panic_s3 (why=0x7ffe41b4e110 "Signal 7: Bus
error")
at ../../source3/lib/util.c:698
#3 0x00007f0e76ce59f1 in smb_panic (why=0x7ffe41b4e110 "Signal 7: Bus
error")
at ../../lib/util/fault.c:198
#4 0x00007f0e76ce54d0 in fault_report (sig=7) at
../../lib/util/fault.c:82
#5 0x00007f0e76ce54e5 in sig_fault (sig=7) at ../../lib/util/fault.c:93
#6 <signal handler called>
#7 varlink_stream_write (stream=0x656d614e72657375, message=<optimized
out>) at ../lib/stream.c:303
#8 0x00007f0e76c5aa35 in varlink_call_reply (call=0x561c51aafe60,
parameters=<optimized out>, flags=1)
at ../lib/service.c:651
#9 0x0000561c506a7e5b in membership_reply (call=0x561c51aafe60,
username=0x561c51aaa860 "AFOREST+buser1", groupname=0x561c51acae58
"AFOREST+bgroup453",
continues=true) at
../../source3/winbindd/winbindd_varlink_getmemberships.c:36
#10 0x0000561c506a9793 in memberships_by_user_getgrgid_done (req=0x0)
at ../../source3/winbindd/winbindd_varlink_getmemberships.c:481
#11 0x00007f0e780cb413 in _tevent_req_notify_callback (req=0x561c51ab2d30,
location=0x561c5075b870
"../../source3/winbindd/winbindd_getgrgid.c:110")
at ../../lib/tevent/tevent_req.c:151
#12 0x00007f0e780cb577 in tevent_req_finish (req=0x561c51ab2d30,
state=TEVENT_REQ_DONE,
location=0x561c5075b870
"../../source3/winbindd/winbindd_getgrgid.c:110")
at ../../lib/tevent/tevent_req.c:203
#13 0x00007f0e780cb5a3 in _tevent_req_done (req=0x561c51ab2d30,
location=0x561c5075b870
"../../source3/winbindd/winbindd_getgrgid.c:110")
at ../../lib/tevent/tevent_req.c:209
#14 0x0000561c50713770 in winbindd_getgrgid_done (subreq=0x0)
at ../../source3/winbindd/winbindd_getgrgid.c:110
#15 0x00007f0e780cb413 in _tevent_req_notify_callback (req=0x561c51a98c50,
location=0x561c507559b0 "../../source3/winbindd/wb_getgrsid.c:201")
at ../../lib/tevent/tevent_req.c:151
#16 0x00007f0e780cb577 in tevent_req_finish (req=0x561c51a98c50,
state=TEVENT_REQ_DONE,
location=0x561c507559b0 "../../source3/winbindd/wb_getgrsid.c:201")
at ../../lib/tevent/tevent_req.c:203
#17 0x00007f0e780cb5a3 in _tevent_req_done (req=0x561c51a98c50,
location=0x561c507559b0 "../../source3/winbindd/wb_getgrsid.c:201")
at ../../lib/tevent/tevent_req.c:209
#18 0x0000561c50708d22 in wb_getgrsid_got_members (subreq=0x0)
at ../../source3/winbindd/wb_getgrsid.c:201
#19 0x00007f0e780cb413 in _tevent_req_notify_callback (req=0x561c51aa9e80,
location=0x561c50755310
"../../source3/winbindd/wb_group_members.c:463")
at ../../lib/tevent/tevent_req.c:151
#20 0x00007f0e780cb577 in tevent_req_finish (req=0x561c51aa9e80,
state=TEVENT_REQ_DONE,
location=0x561c50755310
"../../source3/winbindd/wb_group_members.c:463")
at ../../lib/tevent/tevent_req.c:203
#21 0x00007f0e780cb5a3 in _tevent_req_done (req=0x561c51aa9e80,
location=0x561c50755310
"../../source3/winbindd/wb_group_members.c:463")
at ../../lib/tevent/tevent_req.c:209
#22 0x0000561c507082a6 in wb_group_members_done (subreq=0x0)
at ../../source3/winbindd/wb_group_members.c:463
#23 0x00007f0e780cb413 in _tevent_req_notify_callback (req=0x561c51ab1e00,
location=0x561c50754f18
"../../source3/winbindd/wb_group_members.c:252")
at ../../lib/tevent/tevent_req.c:151
#24 0x00007f0e780cb577 in tevent_req_finish (req=0x561c51ab1e00,
state=TEVENT_REQ_DONE,
location=0x561c50754f18
"../../source3/winbindd/wb_group_members.c:252")
at ../../lib/tevent/tevent_req.c:203
#25 0x00007f0e780cb5a3 in _tevent_req_done (req=0x561c51ab1e00,
location=0x561c50754f18
"../../source3/winbindd/wb_group_members.c:252")
at ../../lib/tevent/tevent_req.c:209
#26 0x0000561c50707903 in wb_groups_members_done (subreq=0x0)
at ../../source3/winbindd/wb_group_members.c:252
#27 0x00007f0e780cb413 in _tevent_req_notify_callback (req=0x561c51aafad0,
location=0x561c50754bf0
"../../source3/winbindd/wb_group_members.c:102")
at ../../lib/tevent/tevent_req.c:151
#28 0x00007f0e780cb577 in tevent_req_finish (req=0x561c51aafad0,
state=TEVENT_REQ_DONE,
location=0x561c50754bf0
"../../source3/winbindd/wb_group_members.c:102")
at ../../lib/tevent/tevent_req.c:203
#29 0x00007f0e780cb5a3 in _tevent_req_done (req=0x561c51aafad0,
location=0x561c50754bf0
"../../source3/winbindd/wb_group_members.c:102")
at ../../lib/tevent/tevent_req.c:209
#30 0x0000561c5070732e in wb_lookupgroupmem_done (subreq=0x0)
at ../../source3/winbindd/wb_group_members.c:102
#31 0x00007f0e780cb413 in _tevent_req_notify_callback (req=0x561c51ab66a0,
location=0x7f0e77bc5f18 "librpc/gen_ndr/ndr_winbind_c.c:2888") at
../../lib/tevent/tevent_req.c:151
#32 0x00007f0e780cb577 in tevent_req_finish (req=0x561c51ab66a0,
state=TEVENT_REQ_DONE,
location=0x7f0e77bc5f18 "librpc/gen_ndr/ndr_winbind_c.c:2888") at
../../lib/tevent/tevent_req.c:203
#33 0x00007f0e780cb5a3 in _tevent_req_done (req=0x561c51ab66a0,
location=0x7f0e77bc5f18 "librpc/gen_ndr/ndr_winbind_c.c:2888") at
../../lib/tevent/tevent_req.c:209
#34 0x00007f0e77bba4a7 in dcerpc_wbint_LookupGroupMembers_done
(subreq=0x0)
at librpc/gen_ndr/ndr_winbind_c.c:2888
#35 0x00007f0e780cb413 in _tevent_req_notify_callback (req=0x561c51aa1dc0,
location=0x7f0e77bc5d28 "librpc/gen_ndr/ndr_winbind_c.c:2773") at
../../lib/tevent/tevent_req.c:151
#36 0x00007f0e780cb577 in tevent_req_finish (req=0x561c51aa1dc0,
state=TEVENT_REQ_DONE,
location=0x7f0e77bc5d28 "librpc/gen_ndr/ndr_winbind_c.c:2773") at
../../lib/tevent/tevent_req.c:203
#37 0x00007f0e780cb5a3 in _tevent_req_done (req=0x561c51aa1dc0,
location=0x7f0e77bc5d28 "librpc/gen_ndr/ndr_winbind_c.c:2773") at
../../lib/tevent/tevent_req.c:209
#38 0x00007f0e77bba0ef in dcerpc_wbint_LookupGroupMembers_r_done
(subreq=0x0)
at librpc/gen_ndr/ndr_winbind_c.c:2773
#39 0x00007f0e780cb413 in _tevent_req_notify_callback (req=0x561c51ab51f0,
location=0x7f0e7810b4d0 "../../librpc/rpc/binding_handle.c:520") at
../../lib/tevent/tevent_req.c:151
#40 0x00007f0e780cb577 in tevent_req_finish (req=0x561c51ab51f0,
state=TEVENT_REQ_DONE,
location=0x7f0e7810b4d0 "../../librpc/rpc/binding_handle.c:520") at
../../lib/tevent/tevent_req.c:203
#41 0x00007f0e780cb5a3 in _tevent_req_done (req=0x561c51ab51f0,
location=0x7f0e7810b4d0 "../../librpc/rpc/binding_handle.c:520") at
../../lib/tevent/tevent_req.c:209
#42 0x00007f0e780f6bec in dcerpc_binding_handle_call_done (subreq=0x0)
at ../../librpc/rpc/binding_handle.c:520
#43 0x00007f0e780cb413 in _tevent_req_notify_callback (req=0x561c51aaacf0,
location=0x7f0e7810b090 "../../librpc/rpc/binding_handle.c:203") at
../../lib/tevent/tevent_req.c:151
#44 0x00007f0e780cb577 in tevent_req_finish (req=0x561c51aaacf0,
state=TEVENT_REQ_DONE,
location=0x7f0e7810b090 "../../librpc/rpc/binding_handle.c:203") at
../../lib/tevent/tevent_req.c:203
#45 0x00007f0e780cb5a3 in _tevent_req_done (req=0x561c51aaacf0,
location=0x7f0e7810b090 "../../librpc/rpc/binding_handle.c:203") at
../../lib/tevent/tevent_req.c:209
#46 0x00007f0e780f60d2 in dcerpc_binding_handle_raw_call_done (subreq=0x0)
at ../../librpc/rpc/binding_handle.c:203
#47 0x00007f0e780cb413 in _tevent_req_notify_callback (req=0x561c51ab78b0,
location=0x561c50745ef0
"../../source3/winbindd/winbindd_dual_ndr.c:209")
at ../../lib/tevent/tevent_req.c:151
#48 0x00007f0e780cb577 in tevent_req_finish (req=0x561c51ab78b0,
state=TEVENT_REQ_DONE,
location=0x561c50745ef0
"../../source3/winbindd/winbindd_dual_ndr.c:209")
at ../../lib/tevent/tevent_req.c:203
#49 0x00007f0e780cb5a3 in _tevent_req_done (req=0x561c51ab78b0,
location=0x561c50745ef0
"../../source3/winbindd/winbindd_dual_ndr.c:209")
at ../../lib/tevent/tevent_req.c:209
#50 0x0000561c506e7782 in wbint_bh_raw_call_domain_done (subreq=0x0)
at ../../source3/winbindd/winbindd_dual_ndr.c:209
#51 0x00007f0e780cb413 in _tevent_req_notify_callback (req=0x561c51a98750,
location=0x561c50743390 "../../source3/winbindd/winbindd_dual.c:745")
at ../../lib/tevent/tevent_req.c:151
#52 0x00007f0e780cb577 in tevent_req_finish (req=0x561c51a98750,
state=TEVENT_REQ_DONE,
location=0x561c50743390 "../../source3/winbindd/winbindd_dual.c:745")
at ../../lib/tevent/tevent_req.c:203
#53 0x00007f0e780cb5a3 in _tevent_req_done (req=0x561c51a98750,
location=0x561c50743390 "../../source3/winbindd/winbindd_dual.c:745")
at ../../lib/tevent/tevent_req.c:209
#54 0x0000561c506e30d3 in wb_domain_request_done (subreq=0x0)
at ../../source3/winbindd/winbindd_dual.c:745
#55 0x00007f0e780cb413 in _tevent_req_notify_callback (req=0x561c51ab1a90,
location=0x561c507429f8 "../../source3/winbindd/winbindd_dual.c:306")
at ../../lib/tevent/tevent_req.c:151
#56 0x00007f0e780cb577 in tevent_req_finish (req=0x561c51ab1a90,
state=TEVENT_REQ_DONE,
location=0x561c507429f8 "../../source3/winbindd/winbindd_dual.c:306")
at ../../lib/tevent/tevent_req.c:203
#57 0x00007f0e780cb5a3 in _tevent_req_done (req=0x561c51ab1a90,
location=0x561c507429f8 "../../source3/winbindd/winbindd_dual.c:306")
at ../../lib/tevent/tevent_req.c:209
#58 0x0000561c506e1f8d in wb_child_request_done (subreq=0x561c51ab3ca0)
at ../../source3/winbindd/winbindd_dual.c:306
#59 0x00007f0e780cb413 in _tevent_req_notify_callback (req=0x561c51ab3ca0,
location=0x561c50723d98 "../../nsswitch/wb_reqtrans.c:432") at
../../lib/tevent/tevent_req.c:151
#60 0x00007f0e780cb577 in tevent_req_finish (req=0x561c51ab3ca0,
state=TEVENT_REQ_DONE,
location=0x561c50723d98 "../../nsswitch/wb_reqtrans.c:432") at
../../lib/tevent/tevent_req.c:203
#61 0x00007f0e780cb5a3 in _tevent_req_done (req=0x561c51ab3ca0,
location=0x561c50723d98 "../../nsswitch/wb_reqtrans.c:432") at
../../lib/tevent/tevent_req.c:209
#62 0x0000561c50696101 in wb_simple_trans_read_done (subreq=0x0) at
../../nsswitch/wb_reqtrans.c:432
#63 0x00007f0e780cb413 in _tevent_req_notify_callback (req=0x561c51ab6a20,
location=0x561c50723a20 "../../nsswitch/wb_reqtrans.c:275") at
../../lib/tevent/tevent_req.c:151
#64 0x00007f0e780cb577 in tevent_req_finish (req=0x561c51ab6a20,
state=TEVENT_REQ_DONE,
location=0x561c50723a20 "../../nsswitch/wb_reqtrans.c:275") at
../../lib/tevent/tevent_req.c:203
#65 0x00007f0e780cb5a3 in _tevent_req_done (req=0x561c51ab6a20,
location=0x561c50723a20 "../../nsswitch/wb_reqtrans.c:275") at
../../lib/tevent/tevent_req.c:209
#66 0x0000561c50695adf in wb_resp_read_done (subreq=0x0) at
../../nsswitch/wb_reqtrans.c:275
#67 0x00007f0e780cb413 in _tevent_req_notify_callback (req=0x561c51ab6d70,
location=0x7f0e7786fec8 "../../lib/async_req/async_sock.c:568") at
../../lib/tevent/tevent_req.c:151
#68 0x00007f0e780cb577 in tevent_req_finish (req=0x561c51ab6d70,
state=TEVENT_REQ_DONE,
location=0x7f0e7786fec8 "../../lib/async_req/async_sock.c:568") at
../../lib/tevent/tevent_req.c:203
#69 0x00007f0e780cb5a3 in _tevent_req_done (req=0x561c51ab6d70,
location=0x7f0e7786fec8 "../../lib/async_req/async_sock.c:568") at
../../lib/tevent/tevent_req.c:209
#70 0x00007f0e778255eb in read_packet_handler (ev=0x561c51a86670,
fde=0x561c51b982a0, flags=1,
private_data=0x561c51ab6d70) at ../../lib/async_req/async_sock.c:568
#71 0x00007f0e780c9651 in tevent_common_invoke_fd_handler
(fde=0x561c51b982a0, flags=1, removed=0x0)
at ../../lib/tevent/tevent_fd.c:142
#72 0x00007f0e780d448c in epoll_event_loop (epoll_ev=0x561c51a96380,
tvalp=0x7ffe41b4f6f0)
at ../../lib/tevent/tevent_epoll.c:737
#73 0x00007f0e780d4aec in epoll_event_loop_once (ev=0x561c51a86670,
location=0x561c50726a70 "../../source3/winbindd/winbindd.c:1734")
at ../../lib/tevent/tevent_epoll.c:938
#74 0x00007f0e780d1408 in std_event_loop_once (ev=0x561c51a86670,
location=0x561c50726a70 "../../source3/winbindd/winbindd.c:1734")
at ../../lib/tevent/tevent_standard.c:110
#75 0x00007f0e780c8239 in _tevent_loop_once (ev=0x561c51a86670,
location=0x561c50726a70 "../../source3/winbindd/winbindd.c:1734") at
../../lib/tevent/tevent.c:823
#76 0x0000561c5069c4a3 in main (argc=1, argv=0x7ffe41b4fb28) at
../../source3/winbindd/winbindd.c:1734
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 32d2a783b0c9b060d3f2f330e98c62b7b165aee3
Author: Samuel Cabrero <[email protected]>
Date: Mon Feb 6 19:06:43 2023 +0100
winbind:varlink: Implement membership by group and user names
$> varlink call -m
unix:/run/systemd/userdb/org.samba.winbind/io.systemd.UserDatabase.GetMemberships
"{\"service\":\"org.samba.winbind\",\"groupName\":\"AFOREST+domain
users\",\"userName\":\"AFOREST+user1\"}"
{
"groupName": "AFOREST+domain users",
"userName": "AFOREST+user1"
}
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 3ce570c7b5b346476f0526d0a53016fbca27912d
Author: Samuel Cabrero <[email protected]>
Date: Mon Feb 6 19:03:03 2023 +0100
winbind:varlink: Implement memberships by group name
$> userdbctl -s org.samba.winbind users-in-group "AFOREST+domain users"
Enabled services: org.samba.winbind
USER GROUP
AFOREST+administrator AFOREST+domain users
AFOREST+krbtgt AFOREST+domain users
AFOREST+user1 AFOREST+domain users
3 memberships listed.
$> SYSTEMD_LOG_LEVEL=7 getent -sgroup:systemd group "AFOREST+domain users"
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetGroupRecord","parameters":{"groupName":"AFOREST+domain
users","service":"org.samba.winbind"}}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"parameters":{"incomplete":false,"record":{"gid":20513,"groupName":"AFOREST+domain
users","members":["AFOREST+administrator","AFOREST+user1","AFOREST+krbtgt"],"service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+domain
users","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"groupName":"AFOREST+domain
users","userName":"AFOREST+administrator"}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"groupName":"AFOREST+domain
users","userName":"AFOREST+user1"}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"parameters":{"groupName":"AFOREST+domain users","userName":"AFOREST+krbtgt"}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+domain
users:x:20513:AFOREST+administrator,AFOREST+user1,AFOREST+krbtgt
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit ad215705aad9facb824aff08b72cc06ae8c1b0a8
Author: Samuel Cabrero <[email protected]>
Date: Mon Feb 6 18:58:25 2023 +0100
winbind:varlink: Implement memberships by user
$> userdbctl -s org.samba.winbind groups-of-user AFOREST+user1
Enabled services: org.samba.winbind
USER GROUP
AFOREST+user1 AFOREST+domain users
AFOREST+user1 AFOREST+user1
2 memberships listed.
$> SYSTEMD_LOG_LEVEL=7 getent -sinitgroups:systemd initgroups
"AFOREST+domain users"
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"userName":"AFOREST+domain
users","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"groupName":"AFOREST+domain
users","userName":"AFOREST+domain users"}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
Failed to connect to /run/systemd/userdb/io.systemd.Multiplexer: No such
file or directory
Unable to connect to /run/systemd/userdb/io.systemd.Multiplexer: No such
file or directory
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetGroupRecord","parameters":{"groupName":"AFOREST+domain
users","service":"org.samba.winbind"}}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"parameters":{"incomplete":false,"record":{"gid":20513,"groupName":"AFOREST+domain
users","members":["AFOREST+administrator","AFOREST+user1","AFOREST+krbtgt"],"service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"parameters":{"groupName":"AFOREST+domain users","userName":"AFOREST+domain
users"}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
Failed to connect to /run/systemd/userdb/io.systemd.Multiplexer: No such
file or directory
Unable to connect to /run/systemd/userdb/io.systemd.Multiplexer: No such
file or directory
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetGroupRecord","parameters":{"groupName":"AFOREST+domain
users","service":"org.samba.winbind"}}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"parameters":{"incomplete":false,"record":{"gid":20513,"groupName":"AFOREST+domain
users","members":["AFOREST+administrator","AFOREST+user1","AFOREST+krbtgt"],"service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+domain users 20513 20513
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 6f437ae49d5561947a8d63f25ed7faa1e4e51441
Author: Samuel Cabrero <[email protected]>
Date: Mon Feb 6 18:49:07 2023 +0100
winbind:varlink: Implement memberships enumeration
$> varlink call -m
unix:/run/systemd/userdb/org.samba.winbind/io.systemd.UserDatabase.GetMemberships
"{\"service\":\"org.samba.winbind\"}"
{
"groupName": "AFOREST+schema admins",
"userName": "AFOREST+administrator"
}
{
"groupName": "AFOREST+enterprise admins",
"userName": "AFOREST+administrator"
}
{
"groupName": "AFOREST+domain admins",
"userName": "AFOREST+administrator"
}
{
"groupName": "AFOREST+domain users",
"userName": "AFOREST+administrator"
}
{
"groupName": "AFOREST+domain users",
"userName": "AFOREST+user1"
}
{
"groupName": "AFOREST+domain users",
"userName": "AFOREST+krbtgt"
}
{
"groupName": "AFOREST+domain guests",
"userName": "AFOREST+guest"
}
{
"groupName": "AFOREST+group policy creator owners",
"userName": "AFOREST+administrator"
}
{
"groupName": "AFOREST+denied rodc password replication group",
"userName": "AFOREST+krbtgt"
}
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 68e590c71395b531e47dcae98565910121145d5f
Author: Samuel Cabrero <[email protected]>
Date: Mon Feb 6 18:39:46 2023 +0100
winbind:varlink: Implement get group record by name and gid
$> varlink call -m
unix:/run/systemd/userdb/org.samba.winbind/io.systemd.UserDatabase.GetGroupRecord
"{\"service\":\"org.samba.winbind\",\"gid\":20513,\"groupName\":\"AFOREST+domain
users\"}"
{
"incomplete": false,
"record": {
"gid": 20513,
"groupName": "AFOREST+domain users",
"members": [
"AFOREST+administrator",
"AFOREST+user1",
"AFOREST+krbtgt"
],
"service": "org.samba.winbind"
}
}
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit e8813b2d620b9a1896037a479d42249d70bec0a9
Author: Samuel Cabrero <[email protected]>
Date: Mon Feb 6 18:35:29 2023 +0100
winbind:varlink: Implement get group record by name
$> userdbctl -s org.samba.winbind group "AFOREST+domain users"
Enabled services: org.samba.winbind
Group name: AFOREST+domain users
Disposition: regular
GID: 20513
Service: org.samba.winbind
$> SYSTEMD_LOG_LEVEL=7 getent -sgroup:systemd group "AFOREST+domain users"
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetGroupRecord","parameters":{"groupName":"AFOREST+domain
users","service":"org.samba.winbind"}}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"parameters":{"incomplete":false,"record":{"gid":20513,"groupName":"AFOREST+domain
users","members":["AFOREST+administrator","AFOREST+user1","AFOREST+krbtgt"],"service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+domain
users","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+domain
users:x:20513:AFOREST+administrator,AFOREST+user1,AFOREST+krbtgt
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit b841911f73555209a3b41ba829caff0997ba4045
Author: Samuel Cabrero <[email protected]>
Date: Mon Feb 6 18:34:04 2023 +0100
winbind:varlink: Implement get group record by gid
$> userdbctl -s org.samba.winbind group 20513
Enabled services: org.samba.winbind
Group name: AFOREST+domain users
Disposition: regular
GID: 20513
Service: org.samba.winbind
$> SYSTEMD_LOG_LEVEL=7 getent -sgroup:systemd group 20513
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetGroupRecord","parameters":{"gid":20513,"service":"org.samba.winbind"}}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"parameters":{"incomplete":false,"record":{"gid":20513,"groupName":"AFOREST+domain
users","members":["AFOREST+administrator","AFOREST+user1","AFOREST+krbtgt"],"service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+domain
users","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+domain
users:x:20513:AFOREST+administrator,AFOREST+user1,AFOREST+krbtgt
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 9144e091219b176260f5a5fd8d411682109f74e8
Author: Samuel Cabrero <[email protected]>
Date: Mon Feb 6 18:32:21 2023 +0100
winbind:varlink: Implement group record enumeration
$> userdbctl -s org.samba.winbind group
NAME DISPOSITION GID
DESCRIPTION
...
AFOREST+enterprise read-only domain controllers regular 20498 -
AFOREST+domain admins regular 20512 -
AFOREST+domain users regular 20513 -
AFOREST+domain guests regular 20514 -
AFOREST+domain computers regular 20515 -
AFOREST+domain controllers regular 20516 -
AFOREST+cert publishers regular 20517 -
AFOREST+schema admins regular 20518 -
AFOREST+enterprise admins regular 20519 -
AFOREST+group policy creator owners regular 20520 -
AFOREST+read-only domain controllers regular 20521 -
AFOREST+cloneable domain controllers regular 20522 -
AFOREST+protected users regular 20525 -
AFOREST+ras and ias servers regular 20553 -
AFOREST+allowed rodc password replication group regular 20571 -
AFOREST+denied rodc password replication group regular 20572 -
AFOREST+winrmremotewmiusers__ regular 21000 -
AFOREST+dnsadmins regular 21102 -
AFOREST+dnsupdateproxy regular 21103 -
...
$> SYSTEMD_LOG_LEVEL=7 getent -sgroup:systemd group
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetGroupRecord","parameters":{"service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":21000,"groupName":"AFOREST+winrmremotewmiusers__","service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+winrmremotewmiusers__","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+winrmremotewmiusers__:x:21000:
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20515,"groupName":"AFOREST+domain
computers","service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+domain
computers","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+domain computers:x:20515:
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20516,"groupName":"AFOREST+domain
controllers","service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+domain
controllers","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+domain controllers:x:20516:
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20518,"groupName":"AFOREST+schema
admins","members":["AFOREST+administrator"],"service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+schema
admins","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+schema admins:x:20518:AFOREST+administrator
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20519,"groupName":"AFOREST+enterprise
admins","members":["AFOREST+administrator"],"service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+enterprise
admins","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+enterprise admins:x:20519:AFOREST+administrator
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20517,"groupName":"AFOREST+cert
publishers","service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+cert
publishers","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+cert publishers:x:20517:
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20512,"groupName":"AFOREST+domain
admins","members":["AFOREST+administrator"],"service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+domain
admins","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+domain admins:x:20512:AFOREST+administrator
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20513,"groupName":"AFOREST+domain
users","members":["AFOREST+user1","AFOREST+administrator","AFOREST+krbtgt"],"service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+domain
users","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+domain
users:x:20513:AFOREST+user1,AFOREST+administrator,AFOREST+krbtgt
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20514,"groupName":"AFOREST+domain
guests","members":["AFOREST+guest"],"service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+domain
guests","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+domain guests:x:20514:AFOREST+guest
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20520,"groupName":"AFOREST+group
policy creator
owners","members":["AFOREST+administrator"],"service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+group
policy creator owners","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+group policy creator owners:x:20520:AFOREST+administrator
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20553,"groupName":"AFOREST+ras
and ias servers","service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+ras
and ias servers","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+ras and ias servers:x:20553:
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20571,"groupName":"AFOREST+allowed
rodc password replication group","service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+allowed
rodc password replication group","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+allowed rodc password replication group:x:20571:
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20572,"groupName":"AFOREST+denied
rodc password replication
group","members":["AFOREST+krbtgt"],"service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+denied
rodc password replication group","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+denied rodc password replication group:x:20572:AFOREST+krbtgt
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20521,"groupName":"AFOREST+read-only
domain controllers","service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+read-only
domain controllers","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+read-only domain controllers:x:20521:
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20498,"groupName":"AFOREST+enterprise
read-only domain controllers","service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+enterprise
read-only domain controllers","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+enterprise read-only domain controllers:x:20498:
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20522,"groupName":"AFOREST+cloneable
domain controllers","service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+cloneable
domain controllers","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+cloneable domain controllers:x:20522:
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20525,"groupName":"AFOREST+protected
users","service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+protected
users","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+protected users:x:20525:
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":21102,"groupName":"AFOREST+dnsadmins","service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+dnsadmins","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+dnsadmins:x:21102:
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"parameters":{"incomplete":false,"record":{"gid":21103,"groupName":"AFOREST+dnsupdateproxy","service":"org.samba.winbind"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"groupName":"AFOREST+dnsupdateproxy","service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+dnsupdateproxy:x:21103:
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetMemberships","parameters":{"service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"error":"io.systemd.UserDatabase.NoRecordFound"}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
Got lookup error: io.systemd.UserDatabase.NoRecordFound
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 4c3910fa86d80a730f0ed9d1a7dcdadc7cc3a09a
Author: Samuel Cabrero <[email protected]>
Date: Mon Feb 6 18:24:15 2023 +0100
winbind:varlink: Implement get user record by name and uid
$> varlink call
unix:/run/systemd/userdb/org.samba.winbind/io.systemd.UserDatabase.GetUserRecord
"{\"service\":\"org.samba.winbind\",\"userName\":\"AFOREST+user1\",\"uid\":21105}"
{
"incomplete": false,
"record": {
"gid": 20513,
"homeDirectory": "/home/AFOREST/user1",
"service": "org.samba.winbind",
"shell": "/bin/bash",
"uid": 21105,
"userName": "AFOREST+user1"
}
}
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit d42c485b8431cce292e4794b6ed5a6d34c81f0ba
Author: Samuel Cabrero <[email protected]>
Date: Mon Feb 6 18:22:30 2023 +0100
winbind:varlink: Implement get user record by name
$> userdbctl -s org.samba.winbind user AFOREST+user1
Enabled services: org.samba.winbind
User name: AFOREST+user1
Disposition: regular
Login OK: yes
Password OK: no (none set)
UID: 21105
GID: 20513 (unresolvable: No such process)
Directory: /home/AFOREST/user1
Storage: classic
Shell: /bin/bash
Passwords: none
Service: org.samba.winbind
$> SYSTEMD_LOG_LEVEL=7 getent -spasswd:systemd passwd AFOREST+user1
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetUserRecord","parameters":{"userName":"AFOREST+user1","service":"org.samba.winbind"}}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"parameters":{"incomplete":false,"record":{"gid":20513,"homeDirectory":"/home/AFOREST/user1","service":"org.samba.winbind","shell":"/bin/bash","uid":21105,"userName":"AFOREST+user1"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+user1:x:21105:20513:AFOREST+user1:/home/AFOREST/user1:/bin/bash
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 946a800c2198b57bd033d6efdbec05be18386239
Author: Samuel Cabrero <[email protected]>
Date: Mon Feb 6 18:20:32 2023 +0100
winbind:varlink: Implement get user record by uid
$> userdbctl -s org.samba.winbind user 21105
Enabled services: org.samba.winbind
User name: AFOREST+user1
Disposition: regular
Login OK: yes
Password OK: no (none set)
UID: 21105
GID: 20513 (unresolvable: No such process)
Directory: /home/AFOREST/user1
Storage: classic
Shell: /bin/bash
Passwords: none
Service: org.samba.winbind
$> SYSTEMD_LOG_LEVEL=7 getent -spasswd:systemd passwd 21105
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetUserRecord","parameters":{"uid":21105,"service":"org.samba.winbind"}}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"parameters":{"incomplete":false,"record":{"gid":20513,"homeDirectory":"/home/AFOREST/user1","service":"org.samba.winbind","shell":"/bin/bash","uid":21105,"userName":"AFOREST+user1"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+user1:x:21105:20513:AFOREST+user1:/home/AFOREST/user1:/bin/bash
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 6369e0524746f553fb3b2f3fd8f9ffcc2e0d5c4c
Author: Samuel Cabrero <[email protected]>
Date: Mon Feb 6 18:17:52 2023 +0100
winbind:varlink: Implement user record enumeration
$> userdbctl -s org.samba.winbind
Enabled services: org.samba.winbind
NAME DISPOSITION UID GID REALNAME
HOME SHELL
...
AFOREST+administrator regular 20500 20513 -
/home/AFOREST/administrator /bin/bash
AFOREST+guest regular 20501 20513 -
/home/AFOREST/guest /bin/bash
AFOREST+krbtgt regular 20502 20513 -
/home/AFOREST/krbtgt /bin/bash
AFOREST+user1 regular 21105 20513 -
/home/AFOREST/user1 /bin/bash
...
$> SYSTEMD_LOG_LEVEL=7 getent -spasswd:systemd passwd
varlink: Setting state idle-client
/run/systemd/userdb/org.samba.winbind: Sending message:
{"method":"io.systemd.UserDatabase.GetUserRecord","parameters":{"service":"org.samba.winbind"},"more":true}
/run/systemd/userdb/org.samba.winbind: Changing state idle-client →
awaiting-reply-more
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20513,"homeDirectory":"/home/AFOREST/administrator","service":"org.samba.winbind","shell":"/bin/bash","uid":20500,"userName":"AFOREST+administrator"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
AFOREST+administrator:x:20500:20513:AFOREST+administrator:/home/AFOREST/administrator:/bin/bash
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20513,"homeDirectory":"/home/AFOREST/guest","service":"org.samba.winbind","shell":"/bin/bash","uid":20501,"userName":"AFOREST+guest"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
AFOREST+guest:x:20501:20513:AFOREST+guest:/home/AFOREST/guest:/bin/bash
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"continues":true,"parameters":{"incomplete":false,"record":{"gid":20513,"homeDirectory":"/home/AFOREST/krbtgt","service":"org.samba.winbind","shell":"/bin/bash","uid":20502,"userName":"AFOREST+krbtgt"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
awaiting-reply-more
AFOREST+krbtgt:x:20502:20513:AFOREST+krbtgt:/home/AFOREST/krbtgt:/bin/bash
/run/systemd/userdb/org.samba.winbind: New incoming message:
{"parameters":{"incomplete":false,"record":{"gid":20513,"homeDirectory":"/home/AFOREST/user1","service":"org.samba.winbind","shell":"/bin/bash","uid":21105,"userName":"AFOREST+user1"}}}
/run/systemd/userdb/org.samba.winbind: Changing state awaiting-reply-more →
processing-reply
/run/systemd/userdb/org.samba.winbind: Changing state processing-reply →
idle-client
AFOREST+user1:x:21105:20513:AFOREST+user1:/home/AFOREST/user1:/bin/bash
$> ./bin/varlink-tool call
unix:/run/systemd/userdb/org.samba.winbind/io.systemd.UserDatabase.GetUserRecord
"{\"service\":\"org.samba.winbind\"}" -m
...
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit d40f5591bc19c0b3b3e37af005d6055d92e70174
Author: Samuel Cabrero <[email protected]>
Date: Mon Feb 6 18:11:33 2023 +0100
winbind:varlink: Add a function to craft a winbindd_cli_state structure
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit e59f2c513fa810a3980690d52e6a860826a4d6cf
Author: Samuel Cabrero <[email protected]>
Date: Wed Feb 1 17:02:38 2023 +0100
winbind:varlink: Add io.systemd.UserDatabase interface
$> varlink info unix:/run/systemd/userdb/org.samba.winbind
Vendor: Samba
Product: Winbind
Version: 1
URL: https://samba.org
Interfaces:
io.systemd.UserDatabase
org.varlink.service
TODO libvarlink bug handling camel case interface names:
https://github.com/varlink/libvarlink/pull/58
$> varlink help
unix:/run/systemd/userdb/org.samba.winbind/io.systemd.UserDatabase
interface io.systemd.UserDatabase
method GetUserRecord(
uid: ?int,
userName: ?string,
service: string
) -> (record: object, incomplete: bool)
method GetGroupRecord(
gid: ?int,
groupName: ?string,
service: string
) -> (record: object, incomplete: bool)
method GetMemberships(
userName: ?string,
groupName: ?string,
service: string
) -> (userName: string, groupName: string)
error NoRecordFound ()
error BadService ()
error ServiceNotAvailable ()
error ConflictingRecordFound ()
error EnumerationNotSupported ()
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit b52ccab3b3372ae8e2ddaa4d143d47ac2b3c7841
Author: Samuel Cabrero <[email protected]>
Date: Thu Feb 2 09:56:05 2023 +0100
winbind:varlink: Create varlink socket directory
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 776eea8090c9edfdf68e64fd840523a98fadbe64
Author: Samuel Cabrero <[email protected]>
Date: Wed Feb 1 17:01:21 2023 +0100
winbind:varlink: Add varlink service
$> userdbctl services
SERVICE LISTENING
org.samba.winbind yes
1 services listed.
$> varlink info unix:/run/systemd/userdb/org.samba.winbind
Vendor: Samba
Product: Winbind
Version: 1
URL: https://samba.org
Interfaces:
org.varlink.service
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit e1f448e1259af53e265466863a9f1b38cbda226e
Author: Samuel Cabrero <[email protected]>
Date: Wed Feb 8 10:29:48 2023 +0100
winbind: Add "winbind varlink service" smb.conf option
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 7996e03b7dae54996f46b359a790dc75ee7d83cd
Author: Samuel Cabrero <[email protected]>
Date: Tue Jan 21 12:12:55 2025 +0100
wscript: Add --with-systemd-userdb option
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
commit 849f9596f91d363c517a867fe94922c099491f45
Author: Samuel Cabrero <[email protected]>
Date: Fri Jan 26 12:21:59 2024 +0100
winbind: Fix running in interactive mode
Signed-off-by: Samuel Cabrero <[email protected]>
Reviewed-by: Andreas Schneider <[email protected]>
-----------------------------------------------------------------------
Summary of changes:
.gitlab-ci-main.yml | 2 +-
bootstrap/config.py | 8 +
bootstrap/generated-dists/fedora41/bootstrap.sh | 2 +
bootstrap/generated-dists/fedora41/packages.yml | 2 +
bootstrap/generated-dists/opensuse155/bootstrap.sh | 1 +
bootstrap/generated-dists/opensuse155/packages.yml | 1 +
bootstrap/generated-dists/rocky8/bootstrap.sh | 1 +
bootstrap/generated-dists/rocky8/packages.yml | 1 +
bootstrap/sha1sum.txt | 2 +-
.../smbdotconf/winbind/winbindvarlinkservice.xml | 28 +
python/samba/tests/varlink/base.py | 89 ++
python/samba/tests/varlink/getgrouprecord.py | 61 ++
python/samba/tests/varlink/getmemberships.py | 89 ++
python/samba/tests/varlink/getuserrecord.py | 59 ++
script/autobuild.py | 2 +-
selftest/target/Samba4.pm | 7 +
source3/utils/testparm.c | 10 +
source3/winbindd/winbindd.c | 31 +-
source3/winbindd/winbindd_varlink.c | 587 +++++++++++
source3/winbindd/winbindd_varlink.h | 133 +++
source3/winbindd/winbindd_varlink_getgrouprecord.c | 902 ++++++++++++++++
source3/winbindd/winbindd_varlink_getmemberships.c | 1072 ++++++++++++++++++++
source3/winbindd/winbindd_varlink_getuserrecord.c | 862 ++++++++++++++++
source3/winbindd/wscript_build | 11 +
source3/wscript | 10 +
source4/selftest/tests.py | 5 +
wscript | 5 +
27 files changed, 3970 insertions(+), 13 deletions(-)
create mode 100644 docs-xml/smbdotconf/winbind/winbindvarlinkservice.xml
create mode 100644 python/samba/tests/varlink/base.py
create mode 100644 python/samba/tests/varlink/getgrouprecord.py
create mode 100644 python/samba/tests/varlink/getmemberships.py
create mode 100644 python/samba/tests/varlink/getuserrecord.py
create mode 100644 source3/winbindd/winbindd_varlink.c
create mode 100644 source3/winbindd/winbindd_varlink.h
create mode 100644 source3/winbindd/winbindd_varlink_getgrouprecord.c
create mode 100644 source3/winbindd/winbindd_varlink_getmemberships.c
create mode 100644 source3/winbindd/winbindd_varlink_getuserrecord.c
Changeset truncated at 500 lines:
diff --git a/.gitlab-ci-main.yml b/.gitlab-ci-main.yml
index 6a27d035928..23be1ef6d7e 100644
--- a/.gitlab-ci-main.yml
+++ b/.gitlab-ci-main.yml
@@ -47,7 +47,7 @@ variables:
# Set this to the contents of bootstrap/sha1sum.txt
# which is generated by bootstrap/template.py --render
#
- SAMBA_CI_CONTAINER_TAG: a234da56a3f4ea96265e6c8a308051be3478ab22
+ SAMBA_CI_CONTAINER_TAG: fb63148d63beac20259d0c61ece2c608d2d1d2a1
#
# We use the ubuntu2204 image as default as
# it matches what we have on atb-devel-224
diff --git a/bootstrap/config.py b/bootstrap/config.py
index f65b6b3dab7..d9e39b19045 100644
--- a/bootstrap/config.py
+++ b/bootstrap/config.py
@@ -178,6 +178,10 @@ PKGS = [
# spotlight
('libtracker-sparql-2.0-dev', 'tracker-devel'),
+ # systemd userdb
+ ('', 'libvarlink-devel'),
+ ('', 'python3-varlink'),
+
# misc
# @ means group for rpm, use fedora as rpm default
('build-essential', '@development-tools'),
@@ -534,6 +538,7 @@ RPM_DISTS = {
'ShellCheck': '',
'shfmt': '',
'codespell': '',
+ 'libvarlink-devel': '', # not available
}
},
'centos9s': {
@@ -553,6 +558,8 @@ RPM_DISTS = {
'codespell': '',
'libcephfs-devel': '', # not available anymore
'curl': '', # Use installed curl-minimal
+ 'libvarlink-devel': '', # not available
+ 'python3-varlink': '', # not available
}
},
'fedora41': {
@@ -598,6 +605,7 @@ RPM_DISTS = {
'mold': '',
'shfmt': '',
'yum-utils': '',
+ 'libvarlink-devel': '', # not available
}
}
}
diff --git a/bootstrap/generated-dists/fedora41/bootstrap.sh
b/bootstrap/generated-dists/fedora41/bootstrap.sh
index 22d2fa89745..ae7e1a5d891 100755
--- a/bootstrap/generated-dists/fedora41/bootstrap.sh
+++ b/bootstrap/generated-dists/fedora41/bootstrap.sh
@@ -69,6 +69,7 @@ dnf install -y \
libunwind-devel \
liburing-devel \
libuuid-devel \
+ libvarlink-devel \
libxslt \
lmdb \
lmdb-devel \
@@ -103,6 +104,7 @@ dnf install -y \
python3-pyasn1 \
python3-requests \
python3-setproctitle \
+ python3-varlink \
quota-devel \
readline-devel \
redhat-lsb \
diff --git a/bootstrap/generated-dists/fedora41/packages.yml
b/bootstrap/generated-dists/fedora41/packages.yml
index 532ac877fdd..427b236d394 100644
--- a/bootstrap/generated-dists/fedora41/packages.yml
+++ b/bootstrap/generated-dists/fedora41/packages.yml
@@ -58,6 +58,7 @@ packages:
- libunwind-devel
- liburing-devel
- libuuid-devel
+ - libvarlink-devel
- libxslt
- lmdb
- lmdb-devel
@@ -92,6 +93,7 @@ packages:
- python3-pyasn1
- python3-requests
- python3-setproctitle
+ - python3-varlink
- quota-devel
- readline-devel
- redhat-lsb
diff --git a/bootstrap/generated-dists/opensuse155/bootstrap.sh
b/bootstrap/generated-dists/opensuse155/bootstrap.sh
index e81cc18ccfb..f94b52bb244 100755
--- a/bootstrap/generated-dists/opensuse155/bootstrap.sh
+++ b/bootstrap/generated-dists/opensuse155/bootstrap.sh
@@ -98,6 +98,7 @@ zypper --non-interactive install \
python3-requests \
python3-semanage \
python3-setproctitle \
+ python3-varlink \
readline-devel \
rng-tools \
rpcgen \
diff --git a/bootstrap/generated-dists/opensuse155/packages.yml
b/bootstrap/generated-dists/opensuse155/packages.yml
index b709cc45e23..866d4d376b0 100644
--- a/bootstrap/generated-dists/opensuse155/packages.yml
+++ b/bootstrap/generated-dists/opensuse155/packages.yml
@@ -86,6 +86,7 @@ packages:
- python3-requests
- python3-semanage
- python3-setproctitle
+ - python3-varlink
- readline-devel
- rng-tools
- rpcgen
diff --git a/bootstrap/generated-dists/rocky8/bootstrap.sh
b/bootstrap/generated-dists/rocky8/bootstrap.sh
index e8f632581d7..9faf66829e2 100755
--- a/bootstrap/generated-dists/rocky8/bootstrap.sh
+++ b/bootstrap/generated-dists/rocky8/bootstrap.sh
@@ -111,6 +111,7 @@ yum install -y \
python3-pyasn1 \
python3-requests \
python3-setproctitle \
+ python3-varlink \
quota-devel \
readline-devel \
redhat-lsb \
diff --git a/bootstrap/generated-dists/rocky8/packages.yml
b/bootstrap/generated-dists/rocky8/packages.yml
index cd91a67f11a..7b7ed9e6967 100644
--- a/bootstrap/generated-dists/rocky8/packages.yml
+++ b/bootstrap/generated-dists/rocky8/packages.yml
@@ -87,6 +87,7 @@ packages:
- python3-pyasn1
- python3-requests
- python3-setproctitle
+ - python3-varlink
- quota-devel
- readline-devel
- redhat-lsb
diff --git a/bootstrap/sha1sum.txt b/bootstrap/sha1sum.txt
index d011893c3ae..b4da7b234d0 100644
--- a/bootstrap/sha1sum.txt
+++ b/bootstrap/sha1sum.txt
@@ -1 +1 @@
-a234da56a3f4ea96265e6c8a308051be3478ab22
+fb63148d63beac20259d0c61ece2c608d2d1d2a1
diff --git a/docs-xml/smbdotconf/winbind/winbindvarlinkservice.xml
b/docs-xml/smbdotconf/winbind/winbindvarlinkservice.xml
new file mode 100644
index 00000000000..de8349501f9
--- /dev/null
+++ b/docs-xml/smbdotconf/winbind/winbindvarlinkservice.xml
@@ -0,0 +1,28 @@
+<samba:parameter name="winbind varlink service"
+ context="G"
+ type="boolean"
+ xmlns:samba="http://www.samba.org/samba/DTD/samba-doc">
+<description>
+<para>This setting controls whether
<citerefentry><refentrytitle>winbind</refentrytitle>
+<manvolnum>8</manvolnum></citerefentry> will listen for User/Group record
lookup
+from <citerefentry><refentrytitle>nss-systemd</refentrytitle>
+<manvolnum>8</manvolnum></citerefentry> via Varlink, offering an alternative
+to nss_winbind.</para>
+
+<para>For more information about User/Group record lookup via Varlink see
+https://systemd.io/USER_GROUP_API/ and <citerefentry><refentrytitle>nss-systemd
+</refentrytitle><manvolnum>8</manvolnum></citerefentry> manpage.</para>
+
+<para><warning><para><citerefentry><refentrytitle>Systemd</refentrytitle>
+<manvolnum>1</manvolnum></citerefentry> versions prior 253 consider the default
+<smbconfoption name="winbind separator"/> '\' an unsafe character in the
+GetMemberhips reply. To workaround the issue it is recommended to set it to '+'
+for example.</para></warning></para>
+
+<para><warning><para>This setting has no effect in platforms or distributions
without
+<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum>
+</citerefentry>.</para></warning></para>
+</description>
+
+<value type="default">no</value>
+</samba:parameter>
diff --git a/python/samba/tests/varlink/base.py
b/python/samba/tests/varlink/base.py
new file mode 100644
index 00000000000..3e313ec3fdc
--- /dev/null
+++ b/python/samba/tests/varlink/base.py
@@ -0,0 +1,89 @@
+# Unix SMB/CIFS implementation.
+#
+# Copyright (C) Samuel Cabrero <[email protected]> 2023
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+""" Winbind varlink service tests, base class """
+
+from samba.tests.samba_tool.base import SambaToolCmdTest
+from samba.auth import system_session
+from samba.samdb import SamDB
+from samba.credentials import Credentials
+import os, pwd, grp
+import varlink
+import samba
+import subprocess
+
+class VarlinkTestCase(SambaToolCmdTest):
+
+ def setUp(self):
+ super().setUp()
+ sdir = samba.tests.env_get_var_value("SELFTEST_WINBINDD_SOCKET_DIR")
+ uri = "unix:" + os.path.join(sdir, "org.samba.selftest")
+ self.cli = varlink.Client.new_with_address(uri)
+ self.assertIsNotNone(self.cli)
+
+ self.lp = samba.tests.env_loadparm()
+ self.domain = samba.tests.env_get_var_value("DOMAIN")
+ self.winbind_separator = self.lp.get('winbind separator')
+ self.varlink_service = self.lp.get('winbind varlink : service name')
+
+ self.bindir = os.path.normpath(os.getenv("BINDIR", "./bin"))
+ self.netcmd = os.path.join(self.bindir, "net")
+
+ self.ldb = SamDB(
+ session_info=system_session(),
+ credentials=Credentials(),
+ lp=self.lp)
+
+ self.users = []
+ self.groups = []
+ members = []
+ for i in range(0, 3):
+ username = "vl_test_user_%d" % i
+ groupname = "vl_test_group_%d" % i
+
+ subprocess.Popen([self.netcmd, "cache", "del", "NAME2SID/%s\\%s"
+ % (self.domain, username.upper())],
stdout=subprocess.PIPE)
+ self.runsubcmd("user", "create", username, self.random_password())
+
+ subprocess.Popen([self.netcmd, "cache", "del", "NAME2SID/%s\\%s"
+ % (self.domain, groupname.upper())],
stdout=subprocess.PIPE)
+ self.runsubcmd("group", "create", groupname)
+
+ members.append(username)
+ for m in members:
+ self.runsubcmd("group", "addmembers", groupname, m)
+
+ grent = grp.getgrnam(groupname)
+ self.groups.append({"groupname": groupname,
+ "gid": grent.gr_gid,
+ "members": members.copy()})
+
+ pwent = pwd.getpwnam(username)
+ self.users.append({"username": username,
+ "uid": pwent.pw_uid,
+ "gid": pwent.pw_gid,
+ "shell": pwent.pw_shell,
+ "dir": pwent.pw_dir})
+
+ def tearDown(self):
+ for group in self.groups:
+ self.runsubcmd("group", "delete", group["groupname"])
+
+ for user in self.users:
+ self.runsubcmd("user", "delete", user["username"])
+
+ super().tearDown()
diff --git a/python/samba/tests/varlink/getgrouprecord.py
b/python/samba/tests/varlink/getgrouprecord.py
new file mode 100644
index 00000000000..127464b2902
--- /dev/null
+++ b/python/samba/tests/varlink/getgrouprecord.py
@@ -0,0 +1,61 @@
+# Unix SMB/CIFS implementation.
+#
+# Copyright (C) Samuel Cabrero <[email protected]> 2024
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+""" Winbind varlink service tests """
+
+import sys
+import os
+
+sys.path.insert(0, "bin/python")
+os.environ["PYTHONUNBUFFERED"] = "1"
+
+from samba.tests.varlink.base import VarlinkTestCase
+
+
+class VarlinkGetUserRecordTests(VarlinkTestCase):
+ def setUp(self):
+ super().setUp()
+
+ def tearDown(self):
+ super().tearDown()
+
+ def testGetGroupRecord(self):
+ for group in self.groups:
+ with self.cli.open("io.systemd.UserDatabase", namespaced=True) as
conn:
+ full_groupname = "%s%s%s" % (self.domain,
+ self.winbind_separator,
+ group["groupname"])
+ full_members_names = []
+ for m in group["members"]:
+ full_members_names.append("%s%s%s" % (self.domain,
+ self.winbind_separator,
+ m))
+ r = conn.GetGroupRecord(service=self.varlink_service,
+ groupName=full_groupname)
+ self.assertIsNotNone(r)
+ self.assertFalse(r.incomplete)
+ self.assertIsNotNone(r.record)
+ self.assertEqual(r.record["service"], self.varlink_service)
+ self.assertEqual(r.record["groupName"], full_groupname)
+ self.assertEqual(r.record["gid"], group["gid"])
+ self.assertEqual(sorted(r.record["members"]),
+ sorted(full_members_names))
+
+
+if __name__ == "__main__":
+ import unittest
+ unittest.main()
diff --git a/python/samba/tests/varlink/getmemberships.py
b/python/samba/tests/varlink/getmemberships.py
new file mode 100644
index 00000000000..0308ccce368
--- /dev/null
+++ b/python/samba/tests/varlink/getmemberships.py
@@ -0,0 +1,89 @@
+# Unix SMB/CIFS implementation.
+#
+# Copyright (C) Samuel Cabrero <[email protected]> 2024
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+""" Winbind varlink service tests """
+
+import sys
+import os
+import pwd
+import grp
+
+sys.path.insert(0, "bin/python")
+os.environ["PYTHONUNBUFFERED"] = "1"
+
+from samba.tests.varlink.base import VarlinkTestCase
+
+
+class VarlinkGetMembershipsTests(VarlinkTestCase):
+ def setUp(self):
+ super().setUp()
+
+ def tearDown(self):
+ super().tearDown()
+
+ def testGetMembershipsByGroup(self):
+ for group in self.groups:
+ full_name = "%s%s%s" % (self.domain,
+ self.winbind_separator,
+ group["groupname"])
+ full_members_names = []
+ for m in group["members"]:
+ full_members_names.append("%s%s%s" % (self.domain,
+ self.winbind_separator,
+ m))
+ vl_members = []
+ with self.cli.open("io.systemd.UserDatabase", namespaced=True) as
conn:
+ for r in conn.GetMemberships(service=self.varlink_service,
+ groupName=full_name,
+ _more=True):
+ self.assertIsNotNone(r)
+ vl_members.append(r.userName)
+ self.assertEqual(sorted(vl_members),
+ sorted(full_members_names))
+
+ def testGetMembershipsByUser(self):
+ for user in self.users:
+ full_username = "%s%s%s" % (self.domain,
+ self.winbind_separator,
+ user["username"])
+ pwent = pwd.getpwnam(full_username)
+ glgid = os.getgrouplist(pwent.pw_name, pwent.pw_gid)
+ nss_list = []
+ for gid in glgid:
+ grent = grp.getgrgid(gid)
+ # nss_wrapper looks into files first, and "ADDOMAIN/domain
users" is
+ # mapped to "users" from files NSS group db.
+ gname = grent.gr_name
+ if gname == "users":
+ gname = "%s%s%s" % (self.domain,
+ self.winbind_separator,
+ "domain users")
+ nss_list.append(gname)
+
+ vl_list = []
+ with self.cli.open("io.systemd.UserDatabase", namespaced=True) as
conn:
+ for r in conn.GetMemberships(service=self.varlink_service,
+ userName=full_username,
+ _more=True):
+ self.assertIsNotNone(r)
+ vl_list.append(r.groupName)
+
+ self.assertEqual(sorted(nss_list), sorted(vl_list))
+
+if __name__ == "__main__":
+ import unittest
+ unittest.main()
diff --git a/python/samba/tests/varlink/getuserrecord.py
b/python/samba/tests/varlink/getuserrecord.py
new file mode 100644
index 00000000000..81ec8480da6
--- /dev/null
+++ b/python/samba/tests/varlink/getuserrecord.py
@@ -0,0 +1,59 @@
+# Unix SMB/CIFS implementation.
+#
+# Copyright (C) Samuel Cabrero <[email protected]> 2023
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+""" Winbind varlink service tests """
+
+import sys
+import os
+
+sys.path.insert(0, "bin/python")
+os.environ["PYTHONUNBUFFERED"] = "1"
+
+from samba.tests.varlink.base import VarlinkTestCase
+
+
+class VarlinkGetUserRecordTests(VarlinkTestCase):
+ def setUp(self):
+ super().setUp()
+
+ def tearDown(self):
+ super().tearDown()
+
+ def testGetUserRecord(self):
+ for user in self.users:
+ with self.cli.open("io.systemd.UserDatabase", namespaced=True) as
conn:
+ full_username = "%s%s%s" % (self.domain,
+ self.winbind_separator,
+ user["username"])
+ r = conn.GetUserRecord(service=self.varlink_service,
+ userName=full_username)
+ self.assertIsNotNone(r)
+ self.assertFalse(r.incomplete)
+ self.assertIsNotNone(r.record)
+ self.assertEqual(r.record["service"], self.varlink_service)
+ self.assertEqual(r.record["userName"], full_username)
+ self.assertEqual(r.record["uid"], user["uid"])
+ self.assertEqual(r.record["gid"], user["gid"])
+ self.assertEqual(r.record["shell"], user["shell"])
+ self.assertEqual(r.record["homeDirectory"], user["dir"])
+ self.assertEqual(r.record["disposition"], "regular")
+
+
--
Samba Shared Repository