diff options
author | bubulle <bubulle@alioth.debian.org> | 2008-11-01 11:09:46 +0000 |
---|---|---|
committer | bubulle <bubulle@alioth.debian.org> | 2008-11-01 11:09:46 +0000 |
commit | a2b71a0141763c20552bb45eeb4cb78c4b513118 (patch) | |
tree | 85b64d98387145ea4e00c1b529e1820542a979a3 /source/winbindd/idmap_ad.c | |
parent | 2203bd59918d6d70515f9dad601cb5c0ef098092 (diff) | |
download | samba-a2b71a0141763c20552bb45eeb4cb78c4b513118.tar.gz |
Revert the merge of 3.3.0~pre2 in upstream branch
git-svn-id: svn://svn.debian.org/svn/pkg-samba/branches/samba/upstream@2200 fc4039ab-9d04-0410-8cac-899223bdd6b0
Diffstat (limited to 'source/winbindd/idmap_ad.c')
-rw-r--r-- | source/winbindd/idmap_ad.c | 197 |
1 files changed, 27 insertions, 170 deletions
diff --git a/source/winbindd/idmap_ad.c b/source/winbindd/idmap_ad.c index 8144d876d4..a2c0dac9cd 100644 --- a/source/winbindd/idmap_ad.c +++ b/source/winbindd/idmap_ad.c @@ -160,8 +160,7 @@ static ADS_STRUCT *ad_idmap_cached_connection(void) /************************************************************************ ***********************************************************************/ -static NTSTATUS idmap_ad_initialize(struct idmap_domain *dom, - const char *params) +static NTSTATUS idmap_ad_initialize(struct idmap_domain *dom) { struct idmap_ad_context *ctx; char *config_option; @@ -207,6 +206,7 @@ static NTSTATUS idmap_ad_initialize(struct idmap_domain *dom, } dom->private_data = ctx; + dom->initialized = True; talloc_free(config_option); @@ -277,6 +277,14 @@ static NTSTATUS idmap_ad_unixids_to_sids(struct idmap_domain *dom, struct id_map return NT_STATUS_FILE_IS_OFFLINE; } + /* Initilization my have been deferred because we were offline */ + if ( ! dom->initialized) { + ret = idmap_ad_initialize(dom); + if ( ! NT_STATUS_IS_OK(ret)) { + return ret; + } + } + ctx = talloc_get_type(dom->private_data, struct idmap_ad_context); if ( (memctx = talloc_new(ctx)) == NULL ) { @@ -488,6 +496,14 @@ static NTSTATUS idmap_ad_sids_to_unixids(struct idmap_domain *dom, struct id_map return NT_STATUS_FILE_IS_OFFLINE; } + /* Initilization my have been deferred because we were offline */ + if ( ! dom->initialized) { + ret = idmap_ad_initialize(dom); + if ( ! NT_STATUS_IS_OK(ret)) { + return ret; + } + } + ctx = talloc_get_type(dom->private_data, struct idmap_ad_context); if ( (memctx = talloc_new(ctx)) == NULL ) { @@ -818,159 +834,6 @@ done: return nt_status; } -/********************************************************************** - *********************************************************************/ - -static NTSTATUS nss_ad_map_to_alias(TALLOC_CTX *mem_ctx, - const char *domain, - const char *name, - char **alias) -{ - ADS_STRUCT *ads_internal = NULL; - const char *attrs[] = {NULL, /* attr_uid */ - NULL }; - char *filter = NULL; - LDAPMessage *msg = NULL; - ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL); - NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; - - /* Check incoming parameters */ - - if ( !domain || !name || !*alias) { - nt_status = NT_STATUS_INVALID_PARAMETER; - goto done; - } - - /* Only do query if we are online */ - - if (idmap_is_offline()) { - nt_status = NT_STATUS_FILE_IS_OFFLINE; - goto done; - } - - ads_internal = ad_idmap_cached_connection(); - - if (!ads_internal || !ad_schema) { - nt_status = NT_STATUS_OBJECT_PATH_NOT_FOUND; - goto done; - } - - attrs[0] = ad_schema->posix_uid_attr; - - filter = talloc_asprintf(mem_ctx, - "(sAMAccountName=%s)", - name); - if (!filter) { - nt_status = NT_STATUS_NO_MEMORY; - goto done; - } - - ads_status = ads_search_retry(ads_internal, &msg, filter, attrs); - if (!ADS_ERR_OK(ads_status)) { - nt_status = ads_ntstatus(ads_status); - goto done; - } - - *alias = ads_pull_string(ads_internal, mem_ctx, msg, ad_schema->posix_uid_attr ); - - if (!*alias) { - return NT_STATUS_OBJECT_NAME_NOT_FOUND; - } - - nt_status = NT_STATUS_OK; - -done: - if (filter) { - talloc_destroy(filter); - } - if (msg) { - ads_msgfree(ads_internal, msg); - } - - return nt_status; -} - -/********************************************************************** - *********************************************************************/ - -static NTSTATUS nss_ad_map_from_alias( TALLOC_CTX *mem_ctx, - const char *domain, - const char *alias, - char **name ) -{ - ADS_STRUCT *ads_internal = NULL; - const char *attrs[] = {"sAMAccountName", - NULL }; - char *filter = NULL; - LDAPMessage *msg = NULL; - ADS_STATUS ads_status = ADS_ERROR_NT(NT_STATUS_UNSUCCESSFUL); - NTSTATUS nt_status = NT_STATUS_UNSUCCESSFUL; - char *username; - - /* Check incoming parameters */ - - if ( !alias || !name) { - nt_status = NT_STATUS_INVALID_PARAMETER; - goto done; - } - - /* Only do query if we are online */ - - if (idmap_is_offline()) { - nt_status = NT_STATUS_FILE_IS_OFFLINE; - goto done; - } - - ads_internal = ad_idmap_cached_connection(); - - if (!ads_internal || !ad_schema) { - nt_status = NT_STATUS_OBJECT_PATH_NOT_FOUND; - goto done; - } - - filter = talloc_asprintf(mem_ctx, - "(%s=%s)", - ad_schema->posix_uid_attr, - alias); - if (!filter) { - nt_status = NT_STATUS_NO_MEMORY; - goto done; - } - - ads_status = ads_search_retry(ads_internal, &msg, filter, attrs); - if (!ADS_ERR_OK(ads_status)) { - nt_status = ads_ntstatus(ads_status); - goto done; - } - - username = ads_pull_string(ads_internal, mem_ctx, msg, - "sAMAccountName"); - if (!username) { - return NT_STATUS_OBJECT_NAME_NOT_FOUND; - } - - *name = talloc_asprintf(mem_ctx, "%s\\%s", - lp_workgroup(), - username); - if (!*name) { - nt_status = NT_STATUS_NO_MEMORY; - goto done; - } - - nt_status = NT_STATUS_OK; - -done: - if (filter) { - talloc_destroy(filter); - } - if (msg) { - ads_msgfree(ads_internal, msg); - } - - return nt_status; -} - - /************************************************************************ ***********************************************************************/ @@ -996,27 +859,21 @@ static struct idmap_methods ad_methods = { function which sets the intended schema model to use */ static struct nss_info_methods nss_rfc2307_methods = { - .init = nss_rfc2307_init, - .get_nss_info = nss_ad_get_info, - .map_to_alias = nss_ad_map_to_alias, - .map_from_alias = nss_ad_map_from_alias, - .close_fn = nss_ad_close + .init = nss_rfc2307_init, + .get_nss_info = nss_ad_get_info, + .close_fn = nss_ad_close }; static struct nss_info_methods nss_sfu_methods = { - .init = nss_sfu_init, - .get_nss_info = nss_ad_get_info, - .map_to_alias = nss_ad_map_to_alias, - .map_from_alias = nss_ad_map_from_alias, - .close_fn = nss_ad_close + .init = nss_sfu_init, + .get_nss_info = nss_ad_get_info, + .close_fn = nss_ad_close }; static struct nss_info_methods nss_sfu20_methods = { - .init = nss_sfu20_init, - .get_nss_info = nss_ad_get_info, - .map_to_alias = nss_ad_map_to_alias, - .map_from_alias = nss_ad_map_from_alias, - .close_fn = nss_ad_close + .init = nss_sfu20_init, + .get_nss_info = nss_ad_get_info, + .close_fn = nss_ad_close }; |