const char *cc = NULL;
const char *principal_s = NULL;
char *realm = NULL;
- fstring name_namespace, name_domain, name_user;
+ char *name_namespace = NULL;
+ char *name_domain = NULL;
+ char *name_user = NULL;
time_t ticket_lifetime = 0;
time_t renewal_until = 0;
time_t time_offset = 0;
/* 3rd step:
* do kerberos auth and setup ccache as the user */
- ok = parse_domain_user_fstr(user,
- name_namespace,
- name_domain,
- name_user);
+ ok = parse_domain_user(mem_ctx,
+ user,
+ &name_namespace,
+ &name_domain,
+ &name_user);
if (!ok) {
return NT_STATUS_INVALID_PARAMETER;
}
TALLOC_CTX *tmp_ctx = NULL;
NTSTATUS result = NT_STATUS_LOGON_FAILURE;
uint16_t max_allowed_bad_attempts;
- fstring name_namespace, name_domain, name_user;
+ char *name_namespace = NULL;
+ char *name_domain = NULL;
+ char *name_user = NULL;
struct dom_sid sid;
enum lsa_SidType type;
uchar new_nt_pass[NT_HASH_LEN];
/* Parse domain and username */
- ok = parse_domain_user_fstr(user,
- name_namespace,
- name_domain,
- name_user);
+ ok = parse_domain_user(tmp_ctx,
+ user,
+ &name_namespace,
+ &name_domain,
+ &name_user);
if (!ok) {
DBG_DEBUG("parse_domain_user failed\n");
result = NT_STATUS_NO_SUCH_USER;
{
struct netr_SamInfo6 *info6 = NULL;
struct winbindd_domain *contact_domain;
- fstring name_namespace, name_domain, name_user;
+ char *name_namespace = NULL;
+ char *name_domain = NULL;
+ char *name_user = NULL;
NTSTATUS result;
bool ok;
/* Parse domain and username */
- ok = parse_domain_user_fstr(user,
- name_namespace,
- name_domain,
- name_user);
+ ok = parse_domain_user(mem_ctx,
+ user,
+ &name_namespace,
+ &name_domain,
+ &name_user);
if (!ok) {
result = NT_STATUS_INVALID_PARAMETER;
goto done;
uint16_t *_validation_level,
union netr_Validation **_validation)
{
- fstring name_namespace, name_domain, name_user;
+ char *name_namespace = NULL;
+ char *name_domain = NULL;
+ char *name_user = NULL;
NTSTATUS result;
uint8_t authoritative = 1;
uint32_t flags = 0;
/* Parse domain and username */
- ok = parse_domain_user_fstr(user,
- name_namespace,
- name_domain,
- name_user);
+ ok = parse_domain_user(mem_ctx,
+ user,
+ &name_namespace,
+ &name_domain,
+ &name_user);
if (!ok) {
return NT_STATUS_INVALID_PARAMETER;
}
struct winbindd_domain *domain = wb_child_domain();
NTSTATUS result = NT_STATUS_LOGON_FAILURE;
NTSTATUS krb5_result = NT_STATUS_OK;
- fstring name_namespace, name_domain, name_user;
+ char *name_namespace = NULL;
+ char *name_domain = NULL;
+ char *name_user = NULL;
char *mapped_user = NULL;
const char *domain_user = NULL;
uint16_t validation_level = UINT16_MAX;
mapped_user = discard_const(r->in.info->username);
}
- ok = parse_domain_user_fstr(mapped_user,
- name_namespace,
- name_domain,
- name_user);
+ ok = parse_domain_user(p->mem_ctx,
+ mapped_user,
+ &name_namespace,
+ &name_domain,
+ &name_user);
if (!ok) {
result = NT_STATUS_INVALID_PARAMETER;
goto done;
struct userPwdChangeFailureInformation *reject = NULL;
NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
NTSTATUS result = NT_STATUS_UNSUCCESSFUL;
- fstring namespace, domain, user;
+ char *namespace = NULL;
+ char *domain = NULL;
+ char *user = NULL;
struct dcerpc_binding_handle *b = NULL;
bool ok;
pid_t client_pid;
DBG_NOTICE("[%"PRIu32"]: dual pam chauthtok %s\n",
client_pid, r->in.user);
- ok = parse_domain_user_fstr(r->in.user,
- namespace,
- domain,
- user);
+ ok = parse_domain_user(p->mem_ctx,
+ r->in.user,
+ &namespace,
+ &domain,
+ &user);
if (!ok) {
goto done;
}
struct wbint_PamAuthCrapChangePassword *r)
{
NTSTATUS result;
- fstring namespace, domain, user;
+ char *namespace = NULL;
+ char *domain = NULL;
+ char *user = NULL;
struct policy_handle dom_pol;
struct winbindd_domain *contact_domain = wb_child_domain();
struct rpc_pipe_client *cli = NULL;
struct dcerpc_binding_handle *b = NULL;
+ TALLOC_CTX *frame = talloc_stackframe();
pid_t client_pid;
ZERO_STRUCT(dom_pol);
return NT_STATUS_INVALID_PARAMETER;
}
- domain[0] = '\0';
- namespace[0] = '\0';
- user[0] = '\0';
-
DBG_NOTICE("[%"PRIu32"]: pam change pswd auth crap domain: %s "
"user: %s\n", client_pid, r->in.domain, r->in.user);
}
if (r->in.domain != NULL && strlen(r->in.domain) > 0) {
- fstrcpy(domain, r->in.domain);
+ user = talloc_strdup(frame, "");
+ namespace = talloc_strdup(frame, "");
+ domain = talloc_strdup(frame, r->in.domain);
+ if (domain == NULL || user == NULL || namespace == NULL) {
+ result = NT_STATUS_NO_MEMORY;
+ goto done;
+ }
+
} else {
bool ok;
- ok = parse_domain_user_fstr(r->in.user,
- namespace,
- domain,
- user);
+ ok = parse_domain_user(frame,
+ r->in.user,
+ &namespace,
+ &domain,
+ &user);
if (!ok) {
result = NT_STATUS_INVALID_PARAMETER;
goto done;
}
if (!*domain && lp_winbind_use_default_domain()) {
- fstrcpy(domain,lp_workgroup());
+ TALLOC_FREE(domain);
+ domain = talloc_strdup(frame, lp_workgroup());
+ if (domain == NULL) {
+ result = NT_STATUS_NO_MEMORY;
+ goto done;
+ }
}
if (!is_allowed_domain(domain)) {
}
if(!*user) {
- fstrcpy(user, r->in.user);
+ TALLOC_FREE(user);
+ user = talloc_strdup(frame, r->in.user);
+ if (user == NULL) {
+ result = NT_STATUS_NO_SUCH_USER;
+ goto done;
+ }
}
/* Get sam handle */
domain, user,
nt_errstr(result),
nt_status_to_pam(result)));
-
+ TALLOC_FREE(frame);
return result;
}