summaryrefslogtreecommitdiffstats
path: root/source3/utils/passwd_util.c
blob: edd2c52e242928538c0c29ce73896ad3a3ce182f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/* 
   Unix SMB/CIFS implementation.
   passdb editing frontend

   Copyright (C) Jeremy Allison  1998
   Copyright (C) Andrew Tridgell 1998
   Copyright (C) Tim Potter      2000
   Copyright (C) Simo Sorce      2000
   Copyright (C) Martin Pool     2001
   Copyright (C) Gerald Carter   2002
   Copyright (C) Andrew Bartlett 2003

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.
   
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#include "includes.h"
#include "passwd_proto.h"

/*************************************************************
 Utility function to prompt for passwords from stdin. Each
 password entered must end with a newline.
*************************************************************/
static char *stdin_new_passwd( void)
{
	static fstring new_pw;
	size_t len;

	ZERO_ARRAY(new_pw);

	/*
	 * if no error is reported from fgets() and string at least contains
	 * the newline that ends the password, then replace the newline with
	 * a null terminator.
	 */
	if ( fgets(new_pw, sizeof(new_pw), stdin) == NULL) {
		return NULL;
	}
	if ((len = strlen(new_pw)) > 0) {
		if(new_pw[len-1] == '\n')
			new_pw[len - 1] = 0;
	}
	return(new_pw);
}

/*************************************************************
 Utility function to get passwords via tty or stdin
 Used if the '-s' (smbpasswd) or '-t' (pdbedit) option is set
 to silently get passwords to enable scripting.
*************************************************************/
char *get_pass( const char *prompt, bool stdin_get)
{
	char pwd[256] = {0};
	char *p;
	int rc;

	if (stdin_get) {
		p = stdin_new_passwd();
		if (p == NULL) {
			return NULL;
		}
	} else {
		rc = samba_getpass(prompt, pwd, sizeof(pwd), false, false);
		if (rc < 0) {
			return NULL;
		}
		p = pwd;
	}
	return smb_xstrdup( p);
}