diff options
author | Noel Power <noel.power@suse.com> | 2014-10-02 16:13:18 +0100 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2015-01-08 00:18:05 +0100 |
commit | a5d383cbd56fdab958334c8e6a19a824941c11c1 (patch) | |
tree | dbc5b33685964bcb19061e04d4d741908f47df2f /source3/libnet/libnet_join.c | |
parent | a13e29cc4345d85ab6fe4482119386b87e4e8673 (diff) | |
download | samba-a5d383cbd56fdab958334c8e6a19a824941c11c1.tar.gz |
allow net ads join accept new osServicePack parameter
osServicePack paramater allows the default behaviour ( which is to use
the samba version string as the operatingSystemServicePack attribute )
to be overridden
Additionally make sure if blank string is passed that it is treated
as attribute deletion. This is necessary as values for the os attributes
are eventually passed to ads_modlist_add if the value is "" then the
attempt to add this attribute fails in the underlying ldap
'ldap_modfiy_ext_s' function. In this case we need to pass NULL as the
value to force deletion of the ldap attribute
Signed-off-by: Noel Power <noel.power@suse.com>
Reviewed-by: David Disseldorp <ddiss@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Thu Jan 8 00:18:05 CET 2015 on sn-devel-104
Diffstat (limited to 'source3/libnet/libnet_join.c')
-rw-r--r-- | source3/libnet/libnet_join.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/source3/libnet/libnet_join.c b/source3/libnet/libnet_join.c index dd87c6d4255..c5a61fe73cc 100644 --- a/source3/libnet/libnet_join.c +++ b/source3/libnet/libnet_join.c @@ -574,8 +574,19 @@ static ADS_STATUS libnet_join_set_os_attributes(TALLOC_CTX *mem_ctx, return ADS_ERROR(LDAP_NO_MEMORY); } - os_sp = talloc_asprintf(mem_ctx, "Samba %s", samba_version_string()); - if (!os_sp) { + if (r->in.os_servicepack) { + /* + * if blank string then leave os_sp equal to NULL to force + * attribute delete (LDAP_MOD_DELETE) + */ + if (!strequal(r->in.os_servicepack,"")) { + os_sp = talloc_strdup(mem_ctx, r->in.os_servicepack); + } + } else { + os_sp = talloc_asprintf(mem_ctx, "Samba %s", + samba_version_string()); + } + if (!os_sp && !strequal(r->in.os_servicepack,"")) { return ADS_ERROR(LDAP_NO_MEMORY); } |