[SCM] Samba Shared Repository - branch v3-devel updated -
release-3-2-0pre2-3962-gad462e2
simo
idra at samba.org
Wed Sep 3 18:39:41 GMT 2008
Sorry I pushed this by mistake, so I reverted :-(
On Wed, 2008-09-03 at 13:37 -0500, Simo Sorce wrote:
> The branch, v3-devel has been updated
> via ad462e2e2d025a7fc23e7dea32b2b442b528970b (commit)
> from 74c8575b3f3b90ea21ae6aa7ccd95947838af956 (commit)
>
> http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-devel
>
>
> - Log -----------------------------------------------------------------
> commit ad462e2e2d025a7fc23e7dea32b2b442b528970b
> Author: Simo Sorce <idra at samba.org>
> Date: Wed Sep 3 14:36:43 2008 -0400
>
> Revert "Split lookup_name() and create a new functiong called"
>
> This reverts commit 8594edf666c29fd4ddf1780da842683dd81483b6.
>
> -----------------------------------------------------------------------
>
> Summary of changes:
> source/auth/auth_util.c | 17 +++-
> source/auth/token_util.c | 7 +-
> source/include/proto.h | 4 -
> source/passdb/lookup_sid.c | 171 +++++++++++++++++--------------------
> source/winbindd/winbindd_passdb.c | 28 +++---
> 5 files changed, 110 insertions(+), 117 deletions(-)
>
>
> Changeset truncated at 500 lines:
>
> diff --git a/source/auth/auth_util.c b/source/auth/auth_util.c
> index 5b2c304..9220df0 100644
> --- a/source/auth/auth_util.c
> +++ b/source/auth/auth_util.c
> @@ -1086,6 +1086,7 @@ NTSTATUS make_server_info_pw(auth_serversupplied_info **server_info,
> NTSTATUS status;
> struct samu *sampass = NULL;
> gid_t *gids;
> + char *qualified_name = NULL;
> TALLOC_CTX *mem_ctx = NULL;
> DOM_SID u_sid;
> enum lsa_SidType type;
> @@ -1151,10 +1152,18 @@ NTSTATUS make_server_info_pw(auth_serversupplied_info **server_info,
> return NT_STATUS_NO_MEMORY;
> }
>
> - if (!lookup_domain_name(mem_ctx,
> - unix_users_domain_name(), unix_username,
> - LOOKUP_NAME_ALL,
> - NULL, NULL, &u_sid, &type)) {
> + qualified_name = talloc_asprintf(mem_ctx, "%s\\%s",
> + unix_users_domain_name(),
> + unix_username );
> + if (!qualified_name) {
> + TALLOC_FREE(result);
> + TALLOC_FREE(mem_ctx);
> + return NT_STATUS_NO_MEMORY;
> + }
> +
> + if (!lookup_name(mem_ctx, qualified_name, LOOKUP_NAME_ALL,
> + NULL, NULL,
> + &u_sid, &type)) {
> TALLOC_FREE(result);
> TALLOC_FREE(mem_ctx);
> return NT_STATUS_NO_SUCH_USER;
> diff --git a/source/auth/token_util.c b/source/auth/token_util.c
> index 2b55af7..d6cd2ea 100644
> --- a/source/auth/token_util.c
> +++ b/source/auth/token_util.c
> @@ -291,6 +291,7 @@ NTSTATUS create_builtin_administrators(const DOM_SID *dom_sid)
> {
> NTSTATUS status;
> DOM_SID dom_admins, root_sid;
> + fstring root_name;
> enum lsa_SidType type;
> TALLOC_CTX *ctx;
> bool ret;
> @@ -316,9 +317,9 @@ NTSTATUS create_builtin_administrators(const DOM_SID *dom_sid)
> if ( (ctx = talloc_init("create_builtin_administrators")) == NULL ) {
> return NT_STATUS_NO_MEMORY;
> }
> - ret = lookup_domain_name(ctx, get_global_sam_name(), "root",
> - LOOKUP_NAME_DOMAIN,
> - NULL, NULL, &root_sid, &type);
> + fstr_sprintf( root_name, "%s\\root", get_global_sam_name() );
> + ret = lookup_name(ctx, root_name, LOOKUP_NAME_DOMAIN, NULL, NULL,
> + &root_sid, &type);
> TALLOC_FREE( ctx );
>
> if ( ret ) {
> diff --git a/source/include/proto.h b/source/include/proto.h
> index a81375c..291afac 100644
> --- a/source/include/proto.h
> +++ b/source/include/proto.h
> @@ -6199,10 +6199,6 @@ bool lookup_name(TALLOC_CTX *mem_ctx,
> const char *full_name, int flags,
> const char **ret_domain, const char **ret_name,
> DOM_SID *ret_sid, enum lsa_SidType *ret_type);
> -bool lookup_domain_name(TALLOC_CTX *mem_ctx,
> - const char *domain, const char *name, int flags,
> - const char **ret_domain, const char **ret_name,
> - DOM_SID *ret_sid, enum lsa_SidType *ret_type);
> bool lookup_name_smbconf(TALLOC_CTX *mem_ctx,
> const char *full_name, int flags,
> const char **ret_domain, const char **ret_name,
> diff --git a/source/passdb/lookup_sid.c b/source/passdb/lookup_sid.c
> index 9813101..3861c8e 100644
> --- a/source/passdb/lookup_sid.c
> +++ b/source/passdb/lookup_sid.c
> @@ -29,72 +29,44 @@
> to do guesswork.
> *****************************************************************/
>
> -#define LN_CHECK_TALLOC(var, memctx) do { \
> - if (var == NULL) { \
> - DEBUG(0, ("talloc failed\n")); \
> - TALLOC_FREE(memctx); \
> - return false; \
> - } \
> -} while(0)
> -
> bool lookup_name(TALLOC_CTX *mem_ctx,
> const char *full_name, int flags,
> const char **ret_domain, const char **ret_name,
> DOM_SID *ret_sid, enum lsa_SidType *ret_type)
> {
> - char *domain, *name;
> - bool res;
> char *p;
> + const char *tmp;
> + const char *domain = NULL;
> + const char *name = NULL;
> + uint32 rid;
> + DOM_SID sid;
> + enum lsa_SidType type;
> + TALLOC_CTX *tmp_ctx = talloc_new(mem_ctx);
> +
> + if (tmp_ctx == NULL) {
> + DEBUG(0, ("talloc_new failed\n"));
> + return false;
> + }
>
> p = strchr_m(full_name, '\\');
>
> if (p != NULL) {
> - domain = talloc_strndup(mem_ctx, full_name,
> + domain = talloc_strndup(tmp_ctx, full_name,
> PTR_DIFF(p, full_name));
> - name = talloc_strdup(mem_ctx, p+1);
> + name = talloc_strdup(tmp_ctx, p+1);
> } else {
> - domain = NULL;
> - name = talloc_strdup(mem_ctx, full_name);
> + domain = talloc_strdup(tmp_ctx, "");
> + name = talloc_strdup(tmp_ctx, full_name);
> }
>
> - if (((p != NULL) && (domain == NULL)) || (name == NULL)) {
> + if ((domain == NULL) || (name == NULL)) {
> DEBUG(0, ("talloc failed\n"));
> + TALLOC_FREE(tmp_ctx);
> return false;
> }
>
> - DEBUG(10,("lookup_domain_name: %s => %s (domain), %s (name)\n",
> - full_name, domain, name));
> -
> - res = lookup_domain_name(mem_ctx, domain, name, flags,
> - ret_domain, ret_name, ret_sid, ret_type);
> -
> - talloc_free(domain);
> - talloc_free(name);
> -
> - return res;
> -}
> -
> -bool lookup_domain_name(TALLOC_CTX *mem_ctx,
> - const char *domain, const char *name, int flags,
> - const char **ret_domain, const char **ret_name,
> - DOM_SID *ret_sid, enum lsa_SidType *ret_type)
> -{
> - const char *tmp;
> - const char *domain_new = NULL;
> - uint32 rid;
> - DOM_SID sid;
> - enum lsa_SidType type;
> - TALLOC_CTX *tmp_ctx;
> -
> - tmp_ctx = talloc_new(mem_ctx);
> - if (tmp_ctx == NULL) {
> - DEBUG(0, ("talloc_new failed\n"));
> - return false;
> - }
> -
> - if (!domain) domain = talloc_strdup(tmp_ctx, "");
> - LN_CHECK_TALLOC(domain, tmp_ctx);
> -
> + DEBUG(10,("lookup_name: %s => %s (domain), %s (name)\n",
> + full_name, domain, name));
> DEBUG(10, ("lookup_name: flags = 0x0%x\n", flags));
>
> if ((flags & LOOKUP_NAME_DOMAIN) &&
> @@ -126,7 +98,7 @@ bool lookup_domain_name(TALLOC_CTX *mem_ctx,
> }
>
> /* Try the explicit winbind lookup first, don't let it guess the
> - * domain at this point yet. This comes later. */
> + * domain yet at this point yet. This comes later. */
>
> if ((domain[0] != '\0') &&
> (flags & ~(LOOKUP_NAME_DOMAIN|LOOKUP_NAME_ISOLATED)) &&
> @@ -165,10 +137,9 @@ bool lookup_domain_name(TALLOC_CTX *mem_ctx,
> /* 1. well-known names */
>
> if ((flags & LOOKUP_NAME_WKN) &&
> - lookup_wellknown_name(tmp_ctx, name, &sid, &domain_new))
> + lookup_wellknown_name(tmp_ctx, name, &sid, &domain))
> {
> type = SID_NAME_WKN_GRP;
> - LN_CHECK_TALLOC(domain_new, tmp_ctx);
> goto ok;
> }
>
> @@ -228,13 +199,12 @@ bool lookup_domain_name(TALLOC_CTX *mem_ctx,
> goto ok;
> }
>
> - /* 6. Builtin aliases */
> + /* 6. Builtin aliases */
>
> if ((flags & LOOKUP_NAME_BUILTIN) &&
> lookup_builtin_name(name, &rid))
> {
> - domain_new = talloc_strdup(tmp_ctx, builtin_domain_name());
> - LN_CHECK_TALLOC(domain_new, tmp_ctx);
> + domain = talloc_strdup(tmp_ctx, builtin_domain_name());
> sid_copy(&sid, &global_sid_Builtin);
> sid_append_rid(&sid, rid);
> type = SID_NAME_ALIAS;
> @@ -249,8 +219,7 @@ bool lookup_domain_name(TALLOC_CTX *mem_ctx,
> if ((flags & LOOKUP_NAME_DOMAIN) &&
> lookup_global_sam_name(name, flags, &rid, &type))
> {
> - domain_new = talloc_strdup(tmp_ctx, get_global_sam_name());
> - LN_CHECK_TALLOC(domain_new, tmp_ctx);
> + domain = talloc_strdup(tmp_ctx, get_global_sam_name());
> sid_copy(&sid, get_global_sam_sid());
> sid_append_rid(&sid, rid);
> goto ok;
> @@ -268,8 +237,7 @@ bool lookup_domain_name(TALLOC_CTX *mem_ctx,
>
> if (!IS_DC &&
> (winbind_lookup_name(lp_workgroup(), name, &sid, &type))) {
> - domain_new = talloc_strdup(tmp_ctx, lp_workgroup());
> - LN_CHECK_TALLOC(domain_new, tmp_ctx);
> + domain = talloc_strdup(tmp_ctx, lp_workgroup());
> goto ok;
> }
>
> @@ -282,7 +250,7 @@ bool lookup_domain_name(TALLOC_CTX *mem_ctx,
> DOM_SID dom_sid;
> uint32 tmp_rid;
> enum lsa_SidType domain_type;
> -
> +
> if (type == SID_NAME_DOMAIN) {
> /* Swap name and type */
> tmp = name; name = domain; domain = tmp;
> @@ -304,7 +272,6 @@ bool lookup_domain_name(TALLOC_CTX *mem_ctx,
> TALLOC_FREE(tmp_ctx);
> return false;
> }
> - LN_CHECK_TALLOC(domain_new, tmp_ctx);
> goto ok;
> }
>
> @@ -314,15 +281,13 @@ bool lookup_domain_name(TALLOC_CTX *mem_ctx,
> Unmapped users and unmapped groups */
>
> if (!(flags & LOOKUP_NAME_EXPLICIT) && lookup_unix_user_name(name, &sid)) {
> - domain_new = talloc_strdup(tmp_ctx, unix_users_domain_name());
> - LN_CHECK_TALLOC(domain_new, tmp_ctx);
> + domain = talloc_strdup(tmp_ctx, unix_users_domain_name());
> type = SID_NAME_USER;
> goto ok;
> }
>
> if (!(flags & LOOKUP_NAME_EXPLICIT) && lookup_unix_group_name(name, &sid)) {
> - domain_new = talloc_strdup(tmp_ctx, unix_groups_domain_name());
> - LN_CHECK_TALLOC(domain_new, tmp_ctx);
> + domain = talloc_strdup(tmp_ctx, unix_groups_domain_name());
> type = SID_NAME_DOM_GRP;
> goto ok;
> }
> @@ -335,6 +300,12 @@ bool lookup_domain_name(TALLOC_CTX *mem_ctx,
> return false;
>
> ok:
> + if ((domain == NULL) || (name == NULL)) {
> + DEBUG(0, ("talloc failed\n"));
> + TALLOC_FREE(tmp_ctx);
> + return false;
> + }
> +
> /*
> * Hand over the results to the talloc context we've been given.
> */
> @@ -348,14 +319,11 @@ bool lookup_domain_name(TALLOC_CTX *mem_ctx,
>
> if (ret_domain != NULL) {
> char *tmp_dom;
> -
> - if (domain_new) {
> - tmp_dom = talloc_steal(mem_ctx, (char *)domain_new);
> - } else {
> - tmp_dom = talloc_strdup(mem_ctx, domain);
> + if (!(tmp_dom = talloc_strdup(mem_ctx, domain))) {
> + DEBUG(0, ("talloc failed\n"));
> + TALLOC_FREE(tmp_ctx);
> + return false;
> }
> - LN_CHECK_TALLOC(tmp_dom, tmp_ctx);
> -
> strupper_m(tmp_dom);
> *ret_domain = tmp_dom;
> }
> @@ -383,42 +351,59 @@ bool lookup_name_smbconf(TALLOC_CTX *mem_ctx,
> const char **ret_domain, const char **ret_name,
> DOM_SID *ret_sid, enum lsa_SidType *ret_type)
> {
> - char *p;
> + char *qualified_name;
> + const char *p;
>
> - p = strchr_m(full_name, *lp_winbind_separator());
> - if (p != NULL) {
> - char *name;
> - bool res;
> + /* NB. No winbindd_separator here as lookup_name needs \\' */
> + if ((p = strchr_m(full_name, *lp_winbind_separator())) != NULL) {
>
> - name = talloc_strdup(mem_ctx, full_name);
> - if (!name) {
> - DEBUG(0, ("Out of memory!\n"));
> - return false;
> + /* The name is already qualified with a domain. */
> +
> + if (*lp_winbind_separator() != '\\') {
> + char *tmp;
> +
> + /* lookup_name() needs '\\' as a separator */
> +
> + tmp = talloc_strdup(mem_ctx, full_name);
> + if (!tmp) {
> + return false;
> + }
> + tmp[p - full_name] = '\\';
> + full_name = tmp;
> }
> - name[PTR_DIFF(p, full_name)] = '\\';
>
> - res = lookup_name(mem_ctx, name, flags,
> - ret_domain, ret_name,
> - ret_sid, ret_type);
> - talloc_free(name);
> - return res;
> + return lookup_name(mem_ctx, full_name, flags,
> + ret_domain, ret_name,
> + ret_sid, ret_type);
> }
>
> /* Try with our own SAM name. */
> - if (lookup_domain_name(mem_ctx,
> - get_global_sam_name(), full_name, flags,
> - ret_domain, ret_name, ret_sid, ret_type)) {
> - return true;
> + qualified_name = talloc_asprintf(mem_ctx, "%s\\%s",
> + get_global_sam_name(),
> + full_name );
> + if (!qualified_name) {
> + return false;
> }
>
> + if (lookup_name(mem_ctx, qualified_name, flags,
> + ret_domain, ret_name,
> + ret_sid, ret_type)) {
> + return true;
> + }
> +
> /* Finally try with "Unix Users" or "Unix Group" */
> - return lookup_domain_name(mem_ctx,
> + qualified_name = talloc_asprintf(mem_ctx, "%s\\%s",
> flags & LOOKUP_NAME_GROUP ?
> unix_groups_domain_name() :
> unix_users_domain_name(),
> - full_name, flags,
> - ret_domain, ret_name, ret_sid, ret_type);
> + full_name );
> + if (!qualified_name) {
> + return false;
> + }
>
> + return lookup_name(mem_ctx, qualified_name, flags,
> + ret_domain, ret_name,
> + ret_sid, ret_type);
> }
>
> static bool wb_lookup_rids(TALLOC_CTX *mem_ctx,
> diff --git a/source/winbindd/winbindd_passdb.c b/source/winbindd/winbindd_passdb.c
> index fbe4a27..5677c01 100644
> --- a/source/winbindd/winbindd_passdb.c
> +++ b/source/winbindd/winbindd_passdb.c
> @@ -94,8 +94,8 @@ static NTSTATUS name_to_sid(struct winbindd_domain *domain,
> DOM_SID *sid,
> enum lsa_SidType *type)
> {
> + const char *fullname;
> uint32 flags = LOOKUP_NAME_ALL;
> - bool res;
>
> switch ( original_cmd ) {
> case WINBINDD_LOOKUPNAME:
> @@ -107,26 +107,28 @@ static NTSTATUS name_to_sid(struct winbindd_domain *domain,
> DEBUG(10,("winbindd_passdb: limiting name_to_sid() to explicit mappings\n"));
> break;
> }
> -
> - DEBUG(10, ("looking up name [%s\\%s] (domain\\name) \n",
> - domain_name?domain_name:"(NULL)", name));
> -
> - if (strchr_m(name, '\\')) {
> - res = lookup_name(mem_ctx, name, flags, NULL, NULL, sid, type);
> +
> + if (domain_name && domain_name[0] && strchr_m(name, '\\') == NULL) {
> + fullname = talloc_asprintf(mem_ctx, "%s\\%s",
> + domain_name, name);
> + if (fullname == NULL) {
> + return NT_STATUS_NO_MEMORY;
> + }
> } else {
> - res = lookup_domain_name(mem_ctx, domain_name, name, flags,
> - NULL, NULL, sid, type);
> + fullname = name;
> }
>
> - if (!res) {
> + DEBUG(10, ("Finding fullname %s\n", fullname));
> +
> + if ( !lookup_name( mem_ctx, fullname, flags, NULL, NULL, sid, type ) ) {
> return NT_STATUS_NONE_MAPPED;
> }
>
> - DEBUG(10, ("name_to_sid for [%s\\%s] returned %s (%s)\n",
> - domain_name?domain_name:"(NULL)", name,
> + DEBUG(10, ("name_to_sid for %s returned %s (%s)\n",
> + fullname,
> sid_string_dbg(sid),
> sid_type_lookup((uint32)*type)));
> -
> +
> return NT_STATUS_OK;
> }
>
>
>
--
Simo Sorce
Samba Team GPL Compliance Officer <simo at samba.org>
Senior Software Engineer at Red Hat Inc. <simo at redhat.com>
More information about the samba-technical
mailing list