The function should also return if it failed or not.
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Stefan Metzmacher <metze@samba.org>
Autobuild-User(master): Stefan Metzmacher <metze@samba.org>
Autobuild-Date(master): Sun Sep 25 12:56:17 CEST 2016 on sn-devel-144
char *get_safe_str_ptr(const char *buf_base, size_t buf_len, char *ptr, size_t off);
int get_safe_SVAL(const char *buf_base, size_t buf_len, char *ptr, size_t off, int failval);
int get_safe_IVAL(const char *buf_base, size_t buf_len, char *ptr, size_t off, int failval);
-void split_domain_user(TALLOC_CTX *mem_ctx,
+bool split_domain_user(TALLOC_CTX *mem_ctx,
const char *full_name,
char **domain,
char **user);
call (they take care of winbind separator and other winbind specific settings).
****************************************************************/
-void split_domain_user(TALLOC_CTX *mem_ctx,
+bool split_domain_user(TALLOC_CTX *mem_ctx,
const char *full_name,
char **domain,
char **user)
if (p != NULL) {
*domain = talloc_strndup(mem_ctx, full_name,
PTR_DIFF(p, full_name));
+ if (*domain == NULL) {
+ return false;
+ }
*user = talloc_strdup(mem_ctx, p+1);
+ if (*user == NULL) {
+ TALLOC_FREE(*domain);
+ return false;
+ }
} else {
- *domain = talloc_strdup(mem_ctx, "");
+ *domain = NULL;
*user = talloc_strdup(mem_ctx, full_name);
+ if (*user == NULL) {
+ return false;
+ }
}
+
+ return true;
}
/****************************************************************
if (!r->in.admin_domain) {
char *admin_domain = NULL;
char *admin_account = NULL;
- split_domain_user(mem_ctx,
- r->in.admin_account,
- &admin_domain,
- &admin_account);
- r->in.admin_domain = admin_domain;
+ bool ok;
+
+ ok = split_domain_user(mem_ctx,
+ r->in.admin_account,
+ &admin_domain,
+ &admin_account);
+ if (!ok) {
+ return WERR_NOMEM;
+ }
+
+ if (admin_domain != NULL) {
+ r->in.admin_domain = admin_domain;
+ } else {
+ r->in.admin_domain = r->in.domain_name;
+ }
r->in.admin_account = admin_account;
}
if (!r->in.admin_domain) {
char *admin_domain = NULL;
char *admin_account = NULL;
- split_domain_user(mem_ctx,
- r->in.admin_account,
- &admin_domain,
- &admin_account);
- r->in.admin_domain = admin_domain;
+ bool ok;
+
+ ok = split_domain_user(mem_ctx,
+ r->in.admin_account,
+ &admin_domain,
+ &admin_account);
+ if (!ok) {
+ return WERR_NOMEM;
+ }
+
+ if (admin_domain != NULL) {
+ r->in.admin_domain = admin_domain;
+ } else {
+ r->in.admin_domain = r->in.domain_name;
+ }
r->in.admin_account = admin_account;
}
struct security_token *token = p->session_info->security_token;
NTSTATUS status;
DATA_BLOB session_key;
+ bool ok;
if (!r->in.domain_name) {
return WERR_INVALID_PARAM;
return werr;
}
- split_domain_user(p->mem_ctx,
- r->in.admin_account,
- &admin_domain,
- &admin_account);
+ ok = split_domain_user(p->mem_ctx,
+ r->in.admin_account,
+ &admin_domain,
+ &admin_account);
+ if (!ok) {
+ return WERR_NOMEM;
+ }
werr = libnet_init_JoinCtx(p->mem_ctx, &j);
if (!W_ERROR_IS_OK(werr)) {
struct security_token *token = p->session_info->security_token;
NTSTATUS status;
DATA_BLOB session_key;
+ bool ok;
if (!r->in.account || !r->in.encrypted_password) {
return WERR_INVALID_PARAM;
return werr;
}
- split_domain_user(p->mem_ctx,
- r->in.account,
- &admin_domain,
- &admin_account);
+ ok = split_domain_user(p->mem_ctx,
+ r->in.account,
+ &admin_domain,
+ &admin_account);
+ if (!ok) {
+ return WERR_NOMEM;
+ }
werr = libnet_init_UnjoinCtx(p->mem_ctx, &u);
if (!W_ERROR_IS_OK(werr)) {