diff options
author | Jeremy Allison <jra@samba.org> | 2006-02-15 02:07:14 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 11:10:07 -0500 |
commit | 8189bb6e4c5a3cde757bb7823f51541c8940914b (patch) | |
tree | 0df943929cf86e68b1355f58d7d13fa05b942bfb /source3/utils | |
parent | 0c0ce531a87f7e5f5a1a2980335322615a98c037 (diff) | |
download | samba-8189bb6e4c5a3cde757bb7823f51541c8940914b.tar.gz samba-8189bb6e4c5a3cde757bb7823f51541c8940914b.tar.bz2 samba-8189bb6e4c5a3cde757bb7823f51541c8940914b.zip |
r13502: Fix error messages for usershares when smbd is not
running. More generic error return cleanup in libsmb/
needs doing (everything returning NTSTATUS not BOOL).
Jeremy
(This used to be commit 654bb9853b450c5d509d182f67ec26ac320fd590)
Diffstat (limited to 'source3/utils')
-rw-r--r-- | source3/utils/net_usershare.c | 21 | ||||
-rw-r--r-- | source3/utils/netlookup.c | 35 |
2 files changed, 39 insertions, 17 deletions
diff --git a/source3/utils/net_usershare.c b/source3/utils/net_usershare.c index 40f1c22688..586d1646a9 100644 --- a/source3/utils/net_usershare.c +++ b/source3/utils/net_usershare.c @@ -362,10 +362,13 @@ static int info_fn(struct file_list *fl, void *priv) char access_str[2]; const char *domain; const char *name; + NTSTATUS ntstatus; access_str[1] = '\0'; - if (net_lookup_name_from_sid(ctx, &psd->dacl->ace[num_aces].trustee, &domain, &name)) { + ntstatus = net_lookup_name_from_sid(ctx, &psd->dacl->ace[num_aces].trustee, &domain, &name); + + if (!NT_STATUS_IS_OK(ntstatus)) { if (*domain) { pstrcat(acl_str, domain); pstrcat(acl_str, sep_str); @@ -548,7 +551,9 @@ static int net_usershare_add(int argc, const char **argv) if ((myeuid != 0) && lp_usershare_owner_only() && (myeuid != sbuf.st_uid)) { d_fprintf(stderr, "net usershare add: cannot share path %s as " - "we are restricted to only sharing directories we own.\n", + "we are restricted to only sharing directories we own.\n" + "\tAsk the administrator to add the line \"usershare owner only = False\" \n" + "\tto the [global] section of the smb.conf to allow this.\n", us_path ); SAFE_FREE(sharename); return -1; @@ -610,9 +615,15 @@ static int net_usershare_add(int argc, const char **argv) name = talloc_strndup(ctx, pacl, pcolon - pacl); if (!string_to_sid(&sid, name)) { /* Convert to a SID */ - if (!net_lookup_sid_from_name(ctx, name, &sid)) { - d_fprintf(stderr, "net usershare add: cannot convert name %s to a SID.\n", - name ); + NTSTATUS ntstatus = net_lookup_sid_from_name(ctx, name, &sid); + if (!NT_STATUS_IS_OK(ntstatus)) { + d_fprintf(stderr, "net usershare add: cannot convert name \"%s\" to a SID. %s.", + name, get_friendly_nt_error_msg(ntstatus) ); + if (NT_STATUS_EQUAL(ntstatus, NT_STATUS_CONNECTION_REFUSED)) { + d_fprintf(stderr, " Maybe smbd is not running.\n"); + } else { + d_fprintf(stderr, "\n"); + } talloc_destroy(ctx); SAFE_FREE(sharename); return -1; diff --git a/source3/utils/netlookup.c b/source3/utils/netlookup.c index edb2f7d5ba..df0fe0c843 100644 --- a/source3/utils/netlookup.c +++ b/source3/utils/netlookup.c @@ -29,6 +29,7 @@ struct con_struct { BOOL failed_connect; + NTSTATUS err; struct cli_state *cli; struct rpc_pipe_client *lsapipe; POLICY_HND pol; @@ -53,13 +54,16 @@ static int cs_destructor(void *p) Create the connection to localhost. ********************************************************/ -static struct con_struct *create_cs(TALLOC_CTX *ctx) +static struct con_struct *create_cs(TALLOC_CTX *ctx, NTSTATUS *perr) { NTSTATUS nt_status; struct in_addr loopback_ip = *interpret_addr2("127.0.0.1");; + *perr = NT_STATUS_OK; + if (cs) { if (cs->failed_connect) { + *perr = cs->err; return NULL; } return cs; @@ -67,6 +71,7 @@ static struct con_struct *create_cs(TALLOC_CTX *ctx) cs = TALLOC_P(ctx, struct con_struct); if (!cs) { + *perr = NT_STATUS_NO_MEMORY; return NULL; } @@ -103,6 +108,8 @@ static struct con_struct *create_cs(TALLOC_CTX *ctx) if (!NT_STATUS_IS_OK(nt_status)) { DEBUG(2,("create_cs: Connect failed. Error was %s\n", nt_errstr(nt_status))); cs->failed_connect = True; + cs->err = nt_status; + *perr = nt_status; return NULL; } @@ -113,6 +120,8 @@ static struct con_struct *create_cs(TALLOC_CTX *ctx) if (cs->lsapipe == NULL) { DEBUG(2,("create_cs: open LSA pipe failed. Error was %s\n", nt_errstr(nt_status))); cs->failed_connect = True; + cs->err = nt_status; + *perr = nt_status; return NULL; } @@ -123,9 +132,11 @@ static struct con_struct *create_cs(TALLOC_CTX *ctx) if (!NT_STATUS_IS_OK(nt_status)) { DEBUG(2,("create_cs: rpccli_lsa_open_policy failed. Error was %s\n", nt_errstr(nt_status))); cs->failed_connect = True; + cs->err = nt_status; + *perr = nt_status; return NULL; } - + return cs; } @@ -137,7 +148,7 @@ static struct con_struct *create_cs(TALLOC_CTX *ctx) The local smbd will also ask winbindd for us, so we don't have to. ********************************************************/ -BOOL net_lookup_name_from_sid(TALLOC_CTX *ctx, +NTSTATUS net_lookup_name_from_sid(TALLOC_CTX *ctx, DOM_SID *psid, const char **ppdomain, const char **ppname) @@ -151,9 +162,9 @@ BOOL net_lookup_name_from_sid(TALLOC_CTX *ctx, *ppdomain = NULL; *ppname = NULL; - csp = create_cs(ctx); + csp = create_cs(ctx, &nt_status); if (csp == NULL) { - return False; + return nt_status; } nt_status = rpccli_lsa_lookup_sids(csp->lsapipe, ctx, @@ -164,7 +175,7 @@ BOOL net_lookup_name_from_sid(TALLOC_CTX *ctx, &types); if (!NT_STATUS_IS_OK(nt_status)) { - return False; + return nt_status; } *ppdomain = domains[0]; @@ -172,23 +183,23 @@ BOOL net_lookup_name_from_sid(TALLOC_CTX *ctx, /* Don't care about type here. */ /* Converted OK */ - return True; + return NT_STATUS_OK; } /******************************************************** Do a lookup_names call to localhost. ********************************************************/ -BOOL net_lookup_sid_from_name(TALLOC_CTX *ctx, const char *full_name, DOM_SID *pret_sid) +NTSTATUS net_lookup_sid_from_name(TALLOC_CTX *ctx, const char *full_name, DOM_SID *pret_sid) { NTSTATUS nt_status; struct con_struct *csp = NULL; DOM_SID *sids = NULL; uint32 *types = NULL; - csp = create_cs(ctx); + csp = create_cs(ctx, &nt_status); if (csp == NULL) { - return False; + return nt_status; } nt_status = rpccli_lsa_lookup_names(csp->lsapipe, ctx, @@ -199,11 +210,11 @@ BOOL net_lookup_sid_from_name(TALLOC_CTX *ctx, const char *full_name, DOM_SID *p &types); if (!NT_STATUS_IS_OK(nt_status)) { - return False; + return nt_status; } *pret_sid = sids[0]; /* Converted OK */ - return True; + return NT_STATUS_OK; } |