summaryrefslogtreecommitdiff
path: root/source3/libnet/libnet_samsync_passdb.c
diff options
context:
space:
mode:
authorSimo Sorce <idra@samba.org>2009-05-16 13:04:06 -0400
committerSimo Sorce <idra@samba.org>2009-05-16 15:30:48 -0400
commit4112bb2428eccdf21c831d6f846fa055b1d1d7d3 (patch)
tree8ddda58cf65074bd24d0ae9e3912209d93a58447 /source3/libnet/libnet_samsync_passdb.c
parent72b744f38ebb9f9576c05c7bb0a00de26697ec8f (diff)
downloadsamba-4112bb2428eccdf21c831d6f846fa055b1d1d7d3.tar.gz
samba-4112bb2428eccdf21c831d6f846fa055b1d1d7d3.tar.bz2
samba-4112bb2428eccdf21c831d6f846fa055b1d1d7d3.zip
Move smb_create_user() in samsync
It is not used anywhere else, so make it also static and remove it from proto.h
Diffstat (limited to 'source3/libnet/libnet_samsync_passdb.c')
-rw-r--r--source3/libnet/libnet_samsync_passdb.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/source3/libnet/libnet_samsync_passdb.c b/source3/libnet/libnet_samsync_passdb.c
index 95e8448828..27c7aac7e7 100644
--- a/source3/libnet/libnet_samsync_passdb.c
+++ b/source3/libnet/libnet_samsync_passdb.c
@@ -226,6 +226,66 @@ static NTSTATUS sam_account_from_delta(struct samu *account,
return NT_STATUS_OK;
}
+
+/****************************************************************
+****************************************************************/
+
+static NTSTATUS smb_create_user(TALLOC_CTX *mem_ctx,
+ uint32_t acct_flags,
+ const char *account,
+ struct passwd **passwd_p)
+{
+ struct passwd *passwd;
+ char *add_script = NULL;
+
+ passwd = Get_Pwnam_alloc(mem_ctx, account);
+ if (passwd) {
+ *passwd_p = passwd;
+ return NT_STATUS_OK;
+ }
+
+ /* Create appropriate user */
+ if (acct_flags & ACB_NORMAL) {
+ add_script = talloc_strdup(mem_ctx, lp_adduser_script());
+ } else if ( (acct_flags & ACB_WSTRUST) ||
+ (acct_flags & ACB_SVRTRUST) ||
+ (acct_flags & ACB_DOMTRUST) ) {
+ add_script = talloc_strdup(mem_ctx, lp_addmachine_script());
+ } else {
+ DEBUG(1, ("Unknown user type: %s\n",
+ pdb_encode_acct_ctrl(acct_flags, NEW_PW_FORMAT_SPACE_PADDED_LEN)));
+ return NT_STATUS_UNSUCCESSFUL;
+ }
+
+ if (!add_script) {
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ if (*add_script) {
+ int add_ret;
+ add_script = talloc_all_string_sub(mem_ctx, add_script,
+ "%u", account);
+ if (!add_script) {
+ return NT_STATUS_NO_MEMORY;
+ }
+ add_ret = smbrun(add_script, NULL);
+ DEBUG(add_ret ? 0 : 1,("fetch_account: Running the command `%s' "
+ "gave %d\n", add_script, add_ret));
+ if (add_ret == 0) {
+ smb_nscd_flush_user_cache();
+ }
+ }
+
+ /* try and find the possible unix account again */
+ passwd = Get_Pwnam_alloc(mem_ctx, account);
+ if (!passwd) {
+ return NT_STATUS_NO_SUCH_USER;
+ }
+
+ *passwd_p = passwd;
+
+ return NT_STATUS_OK;
+}
/****************************************************************
****************************************************************/