summaryrefslogtreecommitdiff
path: root/source3/passdb/pdb_get_set.c
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2002-01-15 01:02:13 +0000
committerAndrew Bartlett <abartlet@samba.org>2002-01-15 01:02:13 +0000
commitdbee612f7150ee2921c37fa331b38b86d2d63937 (patch)
tree3877bad9cca5ed6d1473c0ed15eb430d91fbc428 /source3/passdb/pdb_get_set.c
parent22e7da0a3d7b71ac188d5093ff5f48a5eb6e6478 (diff)
downloadsamba-dbee612f7150ee2921c37fa331b38b86d2d63937.tar.gz
samba-dbee612f7150ee2921c37fa331b38b86d2d63937.tar.bz2
samba-dbee612f7150ee2921c37fa331b38b86d2d63937.zip
Change the passdb interface to use allocated strings.
These strings are allocated using talloc(), either using its own memory context stored on the SAM_ACCOUNT or one supplied by the caller. The pdb_init_sam() and pdb_free_sam() function have been modifed so that a call to pdb_free_sam() will either clean up (remove hashes from memory) and destroy the TALLOC_CTX or just clean up depending on who supplied it. The pdb_init_sam and pdb_free_sam functions now also return an NTSTATUS, and I have modified the 3 places that actually checked these returns. The only nasty thing about this patch is the small measure needed to maintin interface compatability - strings set to NULL are actually set to "". This is becouse there are too many places in Samba that do strlen() on these strings without checking if they are NULL pointers. A supp patch will follow to set all strings to "" in pdb_default_sam(). Andrew Bartlett (This used to be commit 144345b41d39a6f68d01f62b7aee64ca0d328085)
Diffstat (limited to 'source3/passdb/pdb_get_set.c')
-rw-r--r--source3/passdb/pdb_get_set.c148
1 files changed, 85 insertions, 63 deletions
diff --git a/source3/passdb/pdb_get_set.c b/source3/passdb/pdb_get_set.c
index 9abc3b5a28..0dd0f21c37 100644
--- a/source3/passdb/pdb_get_set.c
+++ b/source3/passdb/pdb_get_set.c
@@ -24,6 +24,14 @@
#include "includes.h"
+/**
+ * @todo Redefine this to NULL, but this changes the API becouse
+ * much of samba assumes that the pdb_get...() funtions
+ * return pstrings. (ie not null-pointers).
+ */
+
+#define PDB_NOT_QUITE_NULL ""
+
/*********************************************************************
Collection of get...() functions for SAM_ACCOUNT_INFO.
********************************************************************/
@@ -464,14 +472,15 @@ BOOL pdb_set_username(SAM_ACCOUNT *sampass, const char *username)
{
if (!sampass)
return False;
-
- *sampass->private.username = '\0';
+
DEBUG(10, ("pdb_set_username: setting username %s, was %s\n",
username, sampass->private.username));
- if (!username)
- return False;
- StrnCpy (sampass->private.username, username, sizeof(pstring) - 1);
+ if (username) {
+ sampass->private.username = talloc_strdup(sampass->mem_ctx, username);
+ } else {
+ sampass->private.username = PDB_NOT_QUITE_NULL;
+ }
return True;
}
@@ -484,11 +493,15 @@ BOOL pdb_set_domain(SAM_ACCOUNT *sampass, const char *domain)
{
if (!sampass)
return False;
- *sampass->private.domain = '\0';
- if (!domain)
- return False;
- StrnCpy (sampass->private.domain, domain, sizeof(pstring) - 1);
+ DEBUG(10, ("pdb_set_domain: setting domain %s, was %s\n",
+ domain, sampass->private.domain));
+
+ if (domain) {
+ sampass->private.domain = talloc_strdup(sampass->mem_ctx, domain);
+ } else {
+ sampass->private.domain = PDB_NOT_QUITE_NULL;
+ }
return True;
}
@@ -501,11 +514,15 @@ BOOL pdb_set_nt_username(SAM_ACCOUNT *sampass, const char *nt_username)
{
if (!sampass)
return False;
- *sampass->private.nt_username = '\0';
- if (!nt_username)
- return False;
- StrnCpy (sampass->private.nt_username, nt_username, sizeof(pstring) - 1);
+ DEBUG(10, ("pdb_set_nt_username: setting nt username %s, was %s\n",
+ nt_username, sampass->private.nt_username));
+
+ if (nt_username) {
+ sampass->private.nt_username = talloc_strdup(sampass->mem_ctx, nt_username);
+ } else {
+ sampass->private.nt_username = PDB_NOT_QUITE_NULL;
+ }
return True;
}
@@ -514,19 +531,19 @@ BOOL pdb_set_nt_username(SAM_ACCOUNT *sampass, const char *nt_username)
Set the user's full name.
********************************************************************/
-BOOL pdb_set_fullname(SAM_ACCOUNT *sampass, const char *fullname)
+BOOL pdb_set_fullname(SAM_ACCOUNT *sampass, const char *full_name)
{
if (!sampass)
return False;
- DEBUG(10, ("pdb_set_fullname: setting full name %s, was %s\n",
- fullname, sampass->private.full_name));
-
- *sampass->private.full_name = '\0';
- if (!fullname)
- return False;
-
- StrnCpy (sampass->private.full_name, fullname, sizeof(pstring) - 1);
+ DEBUG(10, ("pdb_set_full_name: setting full name %s, was %s\n",
+ full_name, sampass->private.full_name));
+
+ if (full_name) {
+ sampass->private.full_name = talloc_strdup(sampass->mem_ctx, full_name);
+ } else {
+ sampass->private.full_name = PDB_NOT_QUITE_NULL;
+ }
return True;
}
@@ -543,12 +560,12 @@ BOOL pdb_set_logon_script(SAM_ACCOUNT *sampass, const char *logon_script, BOOL s
DEBUG(10, ("pdb_set_logon_script: setting logon script (store:%d) %s, was %s\n",
store, logon_script, sampass->private.logon_script));
- *sampass->private.logon_script = '\0';
- if (!logon_script)
- return False;
-
- StrnCpy (sampass->private.logon_script, logon_script, sizeof(pstring) - 1);
-
+ if (logon_script) {
+ sampass->private.logon_script = talloc_strdup(sampass->mem_ctx, logon_script);
+ } else {
+ sampass->private.logon_script = PDB_NOT_QUITE_NULL;
+ }
+
if (store)
pdb_set_init_flag(sampass, FLAG_SAM_LOGONSCRIPT);
@@ -567,15 +584,15 @@ BOOL pdb_set_profile_path (SAM_ACCOUNT *sampass, const char *profile_path, BOOL
DEBUG(10, ("pdb_set_profile_path: setting profile path (store:%d) %s, was %s\n",
store, profile_path, sampass->private.profile_path));
- *sampass->private.profile_path = '\0';
- if (!profile_path)
- return False;
-
- StrnCpy (sampass->private.profile_path, profile_path, sizeof(pstring) - 1);
+ if (profile_path) {
+ sampass->private.profile_path = talloc_strdup(sampass->mem_ctx, profile_path);
+ } else {
+ sampass->private.profile_path = PDB_NOT_QUITE_NULL;
+ }
if (store)
pdb_set_init_flag(sampass, FLAG_SAM_PROFILE);
-
+
return True;
}
@@ -587,12 +604,13 @@ BOOL pdb_set_dir_drive (SAM_ACCOUNT *sampass, const char *dir_drive, BOOL store)
{
if (!sampass)
return False;
- *sampass->private.dir_drive = '\0';
- if (!dir_drive)
- return False;
-
- StrnCpy (sampass->private.dir_drive, dir_drive, sizeof(pstring) - 1);
+ if (dir_drive) {
+ sampass->private.dir_drive = talloc_strdup(sampass->mem_ctx, dir_drive);
+ } else {
+ sampass->private.dir_drive = PDB_NOT_QUITE_NULL;
+ }
+
if (store)
pdb_set_init_flag(sampass, FLAG_SAM_DRIVE);
@@ -603,15 +621,16 @@ BOOL pdb_set_dir_drive (SAM_ACCOUNT *sampass, const char *dir_drive, BOOL store)
Set the user's home directory.
********************************************************************/
-BOOL pdb_set_homedir (SAM_ACCOUNT *sampass, const char *homedir, BOOL store)
+BOOL pdb_set_homedir (SAM_ACCOUNT *sampass, const char *home_dir, BOOL store)
{
if (!sampass)
return False;
- *sampass->private.home_dir = '\0';
- if (!homedir)
- return False;
-
- StrnCpy (sampass->private.home_dir, homedir, sizeof(pstring) - 1);
+
+ if (home_dir) {
+ sampass->private.home_dir = talloc_strdup(sampass->mem_ctx, home_dir);
+ } else {
+ sampass->private.home_dir = PDB_NOT_QUITE_NULL;
+ }
if (store)
pdb_set_init_flag(sampass, FLAG_SAM_SMBHOME);
@@ -627,11 +646,12 @@ BOOL pdb_set_acct_desc (SAM_ACCOUNT *sampass, const char *acct_desc)
{
if (!sampass)
return False;
- *sampass->private.acct_desc = '\0';
- if (!acct_desc)
- return False;
-
- StrnCpy (sampass->private.acct_desc, acct_desc, sizeof(pstring) - 1);
+
+ if (acct_desc) {
+ sampass->private.acct_desc = talloc_strdup(sampass->mem_ctx, acct_desc);
+ } else {
+ sampass->private.acct_desc = PDB_NOT_QUITE_NULL;
+ }
return True;
}
@@ -644,11 +664,12 @@ BOOL pdb_set_workstations (SAM_ACCOUNT *sampass, const char *workstations)
{
if (!sampass)
return False;
- *sampass->private.workstations = '\0';
- if (!workstations)
- return False;
- StrnCpy (sampass->private.workstations, workstations, sizeof(pstring) - 1);
+ if (workstations) {
+ sampass->private.workstations = talloc_strdup(sampass->mem_ctx, workstations);
+ } else {
+ sampass->private.workstations = PDB_NOT_QUITE_NULL;
+ }
return True;
}
@@ -661,11 +682,12 @@ BOOL pdb_set_unknown_str (SAM_ACCOUNT *sampass, const char *unknown_str)
{
if (!sampass)
return False;
- *sampass->private.unknown_str = '\0';
- if (!unknown_str)
- return False;
- StrnCpy (sampass->private.unknown_str, unknown_str, sizeof(pstring) - 1);
+ if (unknown_str) {
+ sampass->private.unknown_str = talloc_strdup(sampass->mem_ctx, unknown_str);
+ } else {
+ sampass->private.unknown_str = PDB_NOT_QUITE_NULL;
+ }
return True;
}
@@ -678,11 +700,11 @@ BOOL pdb_set_munged_dial (SAM_ACCOUNT *sampass, const char *munged_dial)
{
if (!sampass)
return False;
- *sampass->private.munged_dial = '\0';
- if (!munged_dial)
- return False;
-
- StrnCpy (sampass->private.munged_dial, munged_dial, sizeof(pstring) - 1);
+ if (munged_dial) {
+ sampass->private.munged_dial = talloc_strdup(sampass->mem_ctx, munged_dial);
+ } else {
+ sampass->private.munged_dial = PDB_NOT_QUITE_NULL;
+ }
return True;
}