diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2002-08-29 07:19:05 +0000 |
---|---|---|
committer | Jelmer Vernooij <jelmer@samba.org> | 2002-08-29 07:19:05 +0000 |
commit | eafcc387045f4f265631a952297caf3f6db779d8 (patch) | |
tree | 4da09cb979bdf17fc2ed83baab2f001383624b0a /source/sam/account.c | |
parent | df3e467eb7cce059782870bfec222293577c4f69 (diff) | |
download | samba-eafcc387045f4f265631a952297caf3f6db779d8.tar.gz samba-eafcc387045f4f265631a952297caf3f6db779d8.tar.xz samba-eafcc387045f4f265631a952297caf3f6db779d8.zip |
Put in patch from metze (Stefan Metzmacher) to:
- Rename user -> account
- Add sam_* functions (api.c)
- Several small fixes
Diffstat (limited to 'source/sam/account.c')
-rw-r--r-- | source/sam/account.c | 104 |
1 files changed, 55 insertions, 49 deletions
diff --git a/source/sam/account.c b/source/sam/account.c index 04be8ef1628..4d6916c9d85 100644 --- a/source/sam/account.c +++ b/source/sam/account.c @@ -27,65 +27,70 @@ #define DBGC_CLASS DBGC_SAM /************************************************************ - Fill the SAM_USER_HANDLE with default values. + Fill the SAM_ACCOUNT_HANDLE with default values. ***********************************************************/ -static void sam_fill_default_user(SAM_USER_HANDLE *user) +static void sam_fill_default_account(SAM_ACCOUNT_HANDLE *account) { - ZERO_STRUCT(user->private); /* Don't touch the talloc context */ + ZERO_STRUCT(account->private); /* Don't touch the talloc context */ /* Don't change these timestamp settings without a good reason. They are important for NT member server compatibility. */ - user->private.init_flag = FLAG_SAM_UNINIT; + account->private.init_flag = FLAG_SAM_UNINIT; /* FIXME: We should actually call get_nt_time_max() or sthng * here */ - unix_to_nt_time(&(user->private.logoff_time),get_time_t_max()); - unix_to_nt_time(&(user->private.kickoff_time),get_time_t_max()); - unix_to_nt_time(&(user->private.pass_must_change_time),get_time_t_max()); - user->private.unknown_1 = 0x00ffffff; /* don't know */ - user->private.logon_divs = 168; /* hours per week */ - user->private.hours_len = 21; /* 21 times 8 bits = 168 */ - memset(user->private.hours, 0xff, user->private.hours_len); /* available at all hours */ - user->private.unknown_2 = 0x00000000; /* don't know */ - user->private.unknown_3 = 0x000004ec; /* don't know */ + unix_to_nt_time(&(account->private.logoff_time),get_time_t_max()); + unix_to_nt_time(&(account->private.kickoff_time),get_time_t_max()); + unix_to_nt_time(&(account->private.pass_must_change_time),get_time_t_max()); + account->private.unknown_1 = 0x00ffffff; /* don't know */ + account->private.logon_divs = 168; /* hours per week */ + account->private.hours_len = 21; /* 21 times 8 bits = 168 */ + memset(account->private.hours, 0xff, account->private.hours_len); /* available at all hours */ + account->private.unknown_2 = 0x00000000; /* don't know */ + account->private.unknown_3 = 0x000004ec; /* don't know */ } -static void destroy_sam_talloc(SAM_USER_HANDLE **user) +static void destroy_sam_talloc(SAM_ACCOUNT_HANDLE **account) { - if (*user) { - talloc_destroy((*user)->mem_ctx); - *user = NULL; + if (*account) { + data_blob_clear_free(&((*account)->private.lm_pw)); + data_blob_clear_free(&((*account)->private.nt_pw)); + if((*account)->private.plaintext_pw!=NULL) + memset((*account)->private.plaintext_pw,'\0',strlen((*account)->private.plaintext_pw)); + + talloc_destroy((*account)->mem_ctx); + *account = NULL; } } /********************************************************************** - Alloc memory and initialises a SAM_USER_HANDLE on supplied mem_ctx. + Alloc memory and initialises a SAM_ACCOUNT_HANDLE on supplied mem_ctx. ***********************************************************************/ -NTSTATUS sam_init_user_talloc(TALLOC_CTX *mem_ctx, SAM_USER_HANDLE **user) +NTSTATUS sam_init_account_talloc(TALLOC_CTX *mem_ctx, SAM_ACCOUNT_HANDLE **account) { - SMB_ASSERT(*user != NULL); + SMB_ASSERT(*account != NULL); if (!mem_ctx) { - DEBUG(0,("sam_init_user_talloc: mem_ctx was NULL!\n")); + DEBUG(0,("sam_init_account_talloc: mem_ctx was NULL!\n")); return NT_STATUS_UNSUCCESSFUL; } - *user=(SAM_USER_HANDLE *)talloc(mem_ctx, sizeof(SAM_USER_HANDLE)); + *account=(SAM_ACCOUNT_HANDLE *)talloc(mem_ctx, sizeof(SAM_ACCOUNT_HANDLE)); - if (*user==NULL) { - DEBUG(0,("sam_init_user_talloc: error while allocating memory\n")); + if (*account==NULL) { + DEBUG(0,("sam_init_account_talloc: error while allocating memory\n")); return NT_STATUS_NO_MEMORY; } - (*user)->mem_ctx = mem_ctx; + (*account)->mem_ctx = mem_ctx; - (*user)->free_fn = NULL; + (*account)->free_fn = NULL; - sam_fill_default_user(*user); + sam_fill_default_account(*account); return NT_STATUS_OK; } @@ -95,77 +100,78 @@ NTSTATUS sam_init_user_talloc(TALLOC_CTX *mem_ctx, SAM_USER_HANDLE **user) Alloc memory and initialises a struct sam_passwd. ************************************************************/ -NTSTATUS sam_init_user(SAM_USER_HANDLE **user) +NTSTATUS sam_init_account(SAM_ACCOUNT_HANDLE **account) { TALLOC_CTX *mem_ctx; NTSTATUS nt_status; - mem_ctx = talloc_init_named("passdb internal SAM_USER_HANDLE allocation"); + mem_ctx = talloc_init_named("passdb internal SAM_ACCOUNT_HANDLE allocation"); if (!mem_ctx) { - DEBUG(0,("sam_init_user: error while doing talloc_init()\n")); + DEBUG(0,("sam_init_account: error while doing talloc_init()\n")); return NT_STATUS_NO_MEMORY; } - if (!NT_STATUS_IS_OK(nt_status = sam_init_user_talloc(mem_ctx, user))) { + if (!NT_STATUS_IS_OK(nt_status = sam_init_account_talloc(mem_ctx, account))) { talloc_destroy(mem_ctx); return nt_status; } - (*user)->free_fn = destroy_sam_talloc; + (*account)->free_fn = destroy_sam_talloc; return NT_STATUS_OK; } /** - * Free the contents of the SAM_USER_HANDLE, but not the structure. + * Free the contents of the SAM_ACCOUNT_HANDLE, but not the structure. * * Also wipes the LM and NT hashes and plaintext password from * memory. * - * @param user SAM_USER_HANDLE to free members of. + * @param account SAM_ACCOUNT_HANDLE to free members of. **/ -static void sam_free_user_contents(SAM_USER_HANDLE *user) +static void sam_free_account_contents(SAM_ACCOUNT_HANDLE *account) { /* Kill off sensitive data. Free()ed by the talloc mechinism */ - data_blob_clear_free(&(user->private.lm_pw)); - data_blob_clear_free(&(user->private.nt_pw)); - data_blob_clear_free(&(user->private.plaintext_pw)); + data_blob_clear_free(&(account->private.lm_pw)); + data_blob_clear_free(&(account->private.nt_pw)); + if (account->private.plaintext_pw) + memset(account->private.plaintext_pw,'\0',strlen(account->private.plaintext_pw)); } /************************************************************ - Reset the SAM_USER_HANDLE and free the NT/LM hashes. + Reset the SAM_ACCOUNT_HANDLE and free the NT/LM hashes. ***********************************************************/ -NTSTATUS sam_reset_sam(SAM_USER_HANDLE *user) +NTSTATUS sam_reset_sam(SAM_ACCOUNT_HANDLE *account) { - SMB_ASSERT(user != NULL); + SMB_ASSERT(account != NULL); - sam_free_user_contents(user); + sam_free_account_contents(account); - sam_fill_default_user(user); + sam_fill_default_account(account); return NT_STATUS_OK; } /************************************************************ - Free the SAM_USER_HANDLE and the member pointers. + Free the SAM_ACCOUNT_HANDLE and the member pointers. ***********************************************************/ -NTSTATUS sam_free_user(SAM_USER_HANDLE **user) +NTSTATUS sam_free_account(SAM_ACCOUNT_HANDLE **account) { - SMB_ASSERT(*user != NULL); + SMB_ASSERT(*account != NULL); - sam_free_user_contents(*user); + sam_free_account_contents(*account); - if ((*user)->free_fn) { - (*user)->free_fn(user); + if ((*account)->free_fn) { + (*account)->free_fn(account); } return NT_STATUS_OK; |