static int smb_create_user(const char *domain, const char *unix_username, const char *homedir)
{
- pstring add_script;
+ TALLOC_CTX *ctx = talloc_tos();
+ char *add_script;
int ret;
- pstrcpy(add_script, lp_adduser_script());
- if (! *add_script)
+ add_script = talloc_strdup(ctx, lp_adduser_script());
+ if (!add_script || !*add_script) {
return -1;
- all_string_sub(add_script, "%u", unix_username, sizeof(pstring));
- if (domain)
- all_string_sub(add_script, "%D", domain, sizeof(pstring));
- if (homedir)
- all_string_sub(add_script, "%H", homedir, sizeof(pstring));
+ }
+ add_script = talloc_all_string_sub(ctx,
+ add_script,
+ "%u",
+ unix_username);
+ if (!add_script) {
+ return -1;
+ }
+ if (domain) {
+ add_script = talloc_all_string_sub(ctx,
+ add_script,
+ "%D",
+ domain);
+ if (!add_script) {
+ return -1;
+ }
+ }
+ if (homedir) {
+ add_script = talloc_all_string_sub(ctx,
+ add_script,
+ "%H",
+ homedir);
+ if (!add_script) {
+ return -1;
+ }
+ }
ret = smbrun(add_script,NULL);
flush_pwnam_cache();
- DEBUG(ret ? 0 : 3,("smb_create_user: Running the command `%s' gave %d\n",add_script,ret));
+ DEBUG(ret ? 0 : 3,
+ ("smb_create_user: Running the command `%s' gave %d\n",
+ add_script,ret));
return ret;
}
Create an auth_usersupplied_data structure
****************************************************************************/
-static NTSTATUS make_user_info(auth_usersupplied_info **user_info,
- const char *smb_name,
+static NTSTATUS make_user_info(auth_usersupplied_info **user_info,
+ const char *smb_name,
const char *internal_username,
- const char *client_domain,
+ const char *client_domain,
const char *domain,
- const char *wksta_name,
+ const char *wksta_name,
DATA_BLOB *lm_pwd, DATA_BLOB *nt_pwd,
DATA_BLOB *lm_interactive_pwd, DATA_BLOB *nt_interactive_pwd,
- DATA_BLOB *plaintext,
+ DATA_BLOB *plaintext,
bool encrypted)
{
NTSTATUS pass_check(const struct passwd *pass, const char *user, const char *password,
int pwlen, bool (*fn) (const char *, const char *), bool run_cracker)
{
- pstring pass2;
+ char *pass2 = NULL;
int level = lp_passwordlevel();
NTSTATUS nt_status;
}
/* make a copy of it */
- pstrcpy(pass2, password);
+ pass2 = talloc_strdup(talloc_tos(), password);
+ if (!pass2) {
+ return NT_STATUS_NO_MEMORY;
+ }
/* try all lowercase if it's currently all uppercase */
if (strhasupper(pass2)) {