1 # common functions for samba-tool python commands
3 # Copyright Andrew Tridgell 2010
4 # Copyright Giampaolo Lauria 2011 <lauria2@yahoo.com>
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
21 from samba
.dcerpc
import nbt
22 from samba
.net
import Net
25 def _get_user_realm_domain(user
):
26 """ get the realm or the domain and the base user
35 m
= re
.match(r
"(\w+)\\(\w+$)", user
)
39 return (baseuser
.lower(), domain
.upper(), realm
)
40 m
= re
.match(r
"(\w+)@(\w+)", user
)
44 return (baseuser
.lower(), domain
, realm
.upper())
47 def netcmd_dnsname(lp
):
48 '''return the full DNS name of our own host. Used as a default
49 for hostname when running status queries'''
50 return lp
.get('netbios name').lower() + "." + lp
.get('realm').lower()
53 def netcmd_finddc(lp
, creds
, realm
=None):
54 '''Return domain-name of a writable/ldap-capable DC for the default
55 domain (parameter "realm" in smb.conf) unless another realm has been
56 specified as argument'''
57 net
= Net(creds
=creds
, lp
=lp
)
59 realm
= lp
.get('realm')
60 cldap_ret
= net
.finddc(domain
=realm
,
61 flags
=nbt
.NBT_SERVER_LDAP | nbt
.NBT_SERVER_DS | nbt
.NBT_SERVER_WRITABLE
)
62 return cldap_ret
.pdc_dns_name
65 def netcmd_get_domain_infos_via_cldap(lp
, creds
, address
=None):
66 '''Return domain informations (CLDAP record) of the ldap-capable
67 DC with the specified address'''
68 net
= Net(creds
=creds
, lp
=lp
)
69 cldap_ret
= net
.finddc(address
=address
,
70 flags
=nbt
.NBT_SERVER_LDAP | nbt
.NBT_SERVER_DS
)