[PATCH] pdb_set_*
Stefan (metze) Metzmacher
metze at metzemix.de
Mon Oct 7 08:01:01 GMT 2002
Hi Andrew,
here're the first steps of my pdb_set_* patch (THIS is NOT ready!!!)
every pdb_set function gets a uint8 flag (DEFAULT | SET | CHANGED)
then the backends can decide to only store changed values...
metze
-----------------------------------------------------------------------------
Stefan "metze" Metzmacher <metze at metzemix.de>
-------------- next part --------------
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/include/smb.h HEAD-pdb/source/include/smb.h
--- HEAD/source/include/smb.h Mon Oct 7 06:58:17 2002
+++ HEAD-pdb/source/include/smb.h Mon Oct 7 09:55:35 2002
@@ -569,25 +569,67 @@ typedef struct {
/*
* bit flags representing initialized fields in SAM_ACCOUNT
*/
-#define FLAG_SAM_UNINIT 0x00000000
-#define FLAG_SAM_UID 0x00000001
-#define FLAG_SAM_GID 0x00000002
-#define FLAG_SAM_SMBHOME 0x00000004
-#define FLAG_SAM_PROFILE 0x00000008
-#define FLAG_SAM_DRIVE 0x00000010
-#define FLAG_SAM_LOGONSCRIPT 0x00000020
-#define FLAG_SAM_LOGONTIME 0x00000040
-#define FLAG_SAM_LOGOFFTIME 0x00000080
-#define FLAG_SAM_KICKOFFTIME 0x00000100
-#define FLAG_SAM_CANCHANGETIME 0x00000200
-#define FLAG_SAM_MUSTCHANGETIME 0x00000400
-#define FLAG_SAM_PLAINTEXT_PW 0x00000800
+#define FLAG_SAM_UNINIT 0x00000000
+#define FLAG_SAM_USERNAME_CHANGED 0x00000001
+#define FLAG_SAM_FULLNAME_CHANGED 0x00000002
+#define FLAG_SAM_DOMAIN_DEFAULT 0x00000003
+#define FLAG_SAM_DOMAIN_CHANGED 0x00000004
+#define FLAG_SAM_NTUSERNAME_CHANGED 0x00000005
+#define FLAG_SAM_ACCTDESC_CHANGED 0x00000006
+#define FLAG_SAM_UID_SET 0x00000007
+#define FLAG_SAM_UID_CHANGED 0x00000008
+#define FLAG_SAM_GID_SET 0x00000009
+#define FLAG_SAM_GID_CHANGED 0x0000000A
+#define FLAG_SAM_USERSID_SET 0x0000000B
+#define FLAG_SAM_USERSID_CHANGED 0x0000000C
+#define FLAG_SAM_GROUPSID_SET 0x0000000D
+#define FLAG_SAM_GROUPSID_CHANGED 0x0000000E
+#define FLAG_SAM_ACCTCTRL_CHANGED 0x0000000F
+#define FLAG_SAM_SMBHOME_DEFAULT 0x00000010
+#define FLAG_SAM_SMBHOME_CHANGED 0x00000011
+#define FLAG_SAM_PROFILE_DEFAULT 0x00000012
+#define FLAG_SAM_PROFILE_CHANGED 0x00000013
+#define FLAG_SAM_DRIVE_DEFAULT 0x00000014
+#define FLAG_SAM_DRIVE_CHANGED 0x00000015
+#define FLAG_SAM_LOGONSCRIPT_DEFAULT 0x00000016
+#define FLAG_SAM_LOGONSCRIPT_CHANGED 0x00000017
+#define FLAG_SAM_HOURS_CHANGED 0x00000018
+#define FLAG_SAM_HOURS_DEFAULT 0x00000019
+#define FLAG_SAM_HOURSLEN_CHANGED 0x0000001A
+#define FLAG_SAM_HOURSLEN_DEFAULT 0x0000001B
+#define FLAG_SAM_LOGONDIVS_CHANGED 0x0000001C
+#define FLAG_SAM_UNIXHOMEDIR_CHANGED 0x0000001D
+#define FLAG_SAM_WORKSTATIONS_CHANGED 0x0000001E
+#define FLAG_SAM_MUNGEDDIAL_CHANGED 0x0000001F
+#define FLAG_SAM_PLAINTEXT_PW_CHANGED 0x00000020
+#define FLAG_SAM_LMPASSWD_CHANGED 0x00000021
+#define FLAG_SAM_NTPASSWD_CHANGED 0x00000022
+#define FLAG_SAM_PASSLASTSET_CHANGED 0x00000023
+#define FLAG_SAM_CANCHANGETIME_DEFAULT 0x00000024
+#define FLAG_SAM_CANCHANGETIME_CHANGED 0x00000025
+#define FLAG_SAM_MUSTCHANGETIME_DEFAULT 0x00000026
+#define FLAG_SAM_MUSTCHANGETIME_CHANGED 0x00000027
+#define FLAG_SAM_LOGONTIME_DEFAULT 0x00000028
+#define FLAG_SAM_LOGONTIME_CHANGED 0x00000029
+#define FLAG_SAM_LOGOFFTIME_DEFAULT 0x0000002A
+#define FLAG_SAM_LOGOFFTIME_CHANGED 0x0000002B
+#define FLAG_SAM_KICKOFFTIME_DEFAULT 0x0000002C
+#define FLAG_SAM_KICKOFFTIME_CHANGED 0x0000002D
+#define FLAG_SAM_UNKNOWNSTR_CHANGED 0x0000002E
+#define FLAG_SAM_UNKNOWN3_CHANGED 0x0000002F
+#define FLAG_SAM_UNKNOWN5_CHANGED 0x00000030
+#define FLAG_SAM_UNKNOWN6_CHANGED 0x00000031
+
+/* if you add a flag increment FLAG_SAM_COUNT */
+#define FLAG_SAM_COUNT 0x00000031
+
+enum(DEFAULT,SET,CHANGED);
#define IS_SAM_UNIX_USER(x) \
- ((pdb_get_init_flag(x) & FLAG_SAM_UID) \
- && (pdb_get_init_flag(x) & FLAG_SAM_GID))
+ ((pdb_get_init_flag(x,FLAG_SAM_UID_SET) \
+ && (pdb_get_init_flag(x,FLAG_SAM_GID_SET)))
-#define IS_SAM_SET(x, flag) ((x)->private.init_flag & (flag))
+#define IS_SAM_SET(x, flag) pdb_get_init_flag(x, flag)
typedef struct sam_passwd
{
@@ -599,7 +641,7 @@ typedef struct sam_passwd
struct user_data {
/* initiailization flags */
- uint32 init_flag;
+ struct bitmap *init_flag;
time_t logon_time; /* logon time */
time_t logoff_time; /* logoff time */
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/include/stamp-h HEAD-pdb/source/include/stamp-h
--- HEAD/source/include/stamp-h Thu Jan 1 01:00:00 1970
+++ HEAD-pdb/source/include/stamp-h Thu Sep 19 08:33:52 2002
@@ -0,0 +1 @@
+Sun Jul 18 20:32:29 UTC 1999
diff -Npur --exclude=CVS --exclude=*.bak --exclude=*.o --exclude=*.po --exclude=.#* HEAD/source/passdb/pdb_get_set.c HEAD-pdb/source/passdb/pdb_get_set.c
--- HEAD/source/passdb/pdb_get_set.c Fri Sep 27 07:40:04 2002
+++ HEAD-pdb/source/passdb/pdb_get_set.c Mon Oct 7 09:22:01 2002
@@ -178,12 +178,12 @@ const DOM_SID *pdb_get_group_sid(const S
* @return the flags indicating the members initialised in the struct.
**/
-uint32 pdb_get_init_flag (const SAM_ACCOUNT *sampass)
+BOOL pdb_get_init_flag (const SAM_ACCOUNT *sampass, uint32 flag)
{
- if (sampass)
- return sampass->private.init_flag;
- else
- return FLAG_SAM_UNINIT;
+ if (!sampass || !sampass->private.init_flags)
+ return False;
+
+ return bitmap_query(sampass->private.init_flags, flag);
}
uid_t pdb_get_uid (const SAM_ACCOUNT *sampass)
@@ -334,109 +334,279 @@ uint32 pdb_get_unknown6 (const SAM_ACCOU
Collection of set...() functions for SAM_ACCOUNT_INFO.
********************************************************************/
-BOOL pdb_set_acct_ctrl (SAM_ACCOUNT *sampass, uint16 flags)
+BOOL pdb_set_acct_ctrl (SAM_ACCOUNT *sampass, uint16 acct_ctrl, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_ACCTCTRL_CHANGED;
+
if (!sampass)
return False;
- if (sampass) {
- sampass->private.acct_ctrl = flags;
- return True;
+ sampass->private.acct_ctrl = acct_ctrl;
+
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ break;
+ case DEFAULT:
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ break;
}
-
+
return False;
}
-BOOL pdb_set_logon_time (SAM_ACCOUNT *sampass, time_t mytime, BOOL store)
+BOOL pdb_set_logon_time (SAM_ACCOUNT *sampass, time_t mytime, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_LOGONTIME_CHANGED;
+ uint32 sam_flag_default = FLAG_SAM_LOGONTIME_DEFAULT;
+
if (!sampass)
return False;
sampass->private.logon_time = mytime;
- if (store)
- pdb_set_init_flag(sampass, FLAG_SAM_LOGONTIME);
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case DEFAULT:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ }
return True;
}
-BOOL pdb_set_logoff_time (SAM_ACCOUNT *sampass, time_t mytime, BOOL store)
+BOOL pdb_set_logoff_time (SAM_ACCOUNT *sampass, time_t mytime, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_LOGOFFTIME_CHANGED;
+ uint32 sam_flag_default = FLAG_SAM_LOGOFFTIME_DEFAULT;
+
if (!sampass)
return False;
sampass->private.logoff_time = mytime;
- if (store)
- pdb_set_init_flag(sampass, FLAG_SAM_LOGOFFTIME);
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case DEFAULT:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ }
return True;
}
-BOOL pdb_set_kickoff_time (SAM_ACCOUNT *sampass, time_t mytime, BOOL store)
+BOOL pdb_set_kickoff_time (SAM_ACCOUNT *sampass, time_t mytime, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_KICKOFFTIME_CHANGED;
+ uint32 sam_flag_default = FLAG_SAM_KICKOFFTIME_DEFAULT;
+
if (!sampass)
return False;
sampass->private.kickoff_time = mytime;
- if (store)
- pdb_set_init_flag(sampass, FLAG_SAM_KICKOFFTIME);
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case DEFAULT:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ }
return True;
}
-BOOL pdb_set_pass_can_change_time (SAM_ACCOUNT *sampass, time_t mytime, BOOL store)
+BOOL pdb_set_pass_can_change_time (SAM_ACCOUNT *sampass, time_t mytime, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_CANCHANGETIME_CHANGED;
+ uint32 sam_flag_default = FLAG_SAM_CANCHANGETIME_DEFAULT;
+
if (!sampass)
return False;
sampass->private.pass_can_change_time = mytime;
- if (store)
- pdb_set_init_flag(sampass, FLAG_SAM_CANCHANGETIME);
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case DEFAULT:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ }
return True;
}
-BOOL pdb_set_pass_must_change_time (SAM_ACCOUNT *sampass, time_t mytime, BOOL store)
+BOOL pdb_set_pass_must_change_time (SAM_ACCOUNT *sampass, time_t mytime, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_MUSTCHANGETIME_CHANGED;
+ uint32 sam_flag_default = FLAG_SAM_MUSTCHANGETIME_DEFAULT;
+
if (!sampass)
return False;
sampass->private.pass_must_change_time = mytime;
- if (store)
- pdb_set_init_flag(sampass, FLAG_SAM_MUSTCHANGETIME);
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case DEFAULT:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ }
return True;
}
-BOOL pdb_set_pass_last_set_time (SAM_ACCOUNT *sampass, time_t mytime)
+BOOL pdb_set_pass_last_set_time (SAM_ACCOUNT *sampass, time_t mytime, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_PASSLASTSET_CHANGED;
+
if (!sampass)
return False;
sampass->private.pass_last_set_time = mytime;
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ break;
+ case DEFAULT:
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ break;
+ }
+
return True;
}
-BOOL pdb_set_hours_len (SAM_ACCOUNT *sampass, uint32 len)
+BOOL pdb_set_hours_len (SAM_ACCOUNT *sampass, uint32 len, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_HOURSLEN_CHANGED;
+ uint32 sam_flag_default = FLAG_SAM_HOURSLEN_DEFAULT;
+
if (!sampass)
return False;
sampass->private.hours_len = len;
+
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case DEFAULT:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ }
+
return True;
}
-BOOL pdb_set_logon_divs (SAM_ACCOUNT *sampass, uint16 hours)
+BOOL pdb_set_logon_divs (SAM_ACCOUNT *sampass, uint16 hours, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_LOGONDIVS_CHANGED;
+
if (!sampass)
return False;
sampass->private.logon_divs = hours;
+
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ break;
+ case DEFAULT:
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ break;
+ }
+
return True;
}
@@ -449,16 +619,53 @@ BOOL pdb_set_logon_divs (SAM_ACCOUNT *sa
BOOL pdb_set_init_flag (SAM_ACCOUNT *sampass, uint32 flag)
{
- if (!sampass)
+ if (!sampass || !sampass->mem_ctx)
+ return False;
+
+ if (!sampass->private.init_flags) {
+ if ((sampass->private.init_flags =
+ bitmap_talloc(sampass->mem_ctx,
+ FLAG_SAM_COUNT))==NULL) {
+ DEBUG(0,("bitmap_talloc failed\n"));
+ return False;
+ }
+ }
+
+ if (!bitmap_set(sampass->private.init_flags, flag)) {
+ DEBUG(0,("Can't set flag: %08X\n",flag));
+ return False;
+ }
+
+ return True;
+}
+
+BOOL pdb_unset_init_flag (SAM_ACCOUNT *sampass, uint32 flag)
+{
+ if (!sampass || !sampass->mem_ctx)
return False;
- sampass->private.init_flag |= flag;
+ if (!sampass->private.init_flags) {
+ if ((sampass->private.init_flags =
+ bitmap_talloc(sampass->mem_ctx,
+ FLAG_SAM_COUNT))==NULL) {
+ DEBUG(0,("bitmap_talloc failed\n"));
+ return False;
+ }
+ }
+
+ if (!bitmap_clear(sampass->private.init_flags, flag)) {
+ DEBUG(0,("Can't set flag: %08X\n",flag));
+ return False;
+ }
return True;
}
-BOOL pdb_set_uid (SAM_ACCOUNT *sampass, const uid_t uid)
+BOOL pdb_set_uid (SAM_ACCOUNT *sampass, const uid_t uid, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_UID_CHANGED;
+ uint32 sam_flag_set = FLAG_SAM_UID_SET;
+
if (!sampass)
return False;
@@ -466,14 +673,37 @@ BOOL pdb_set_uid (SAM_ACCOUNT *sampass,
(int)uid, (int)sampass->private.uid));
sampass->private.uid = uid;
- pdb_set_init_flag(sampass, FLAG_SAM_UID);
+
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_set)
+ return False;
+ break;
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_set)
+ return False;
+ break;
+ case DEFAULT:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_set)
+ return False;
+ break;
+ }
return True;
}
-BOOL pdb_set_gid (SAM_ACCOUNT *sampass, const gid_t gid)
+BOOL pdb_set_gid (SAM_ACCOUNT *sampass, const gid_t gid, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_GID_CHANGED;
+ uint32 sam_flag_set = FLAG_SAM_GID_SET;
+
if (!sampass)
return False;
@@ -481,14 +711,37 @@ BOOL pdb_set_gid (SAM_ACCOUNT *sampass,
(int)gid, (int)sampass->private.gid));
sampass->private.gid = gid;
- pdb_set_init_flag(sampass, FLAG_SAM_GID);
+
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_set)
+ return False;
+ break;
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_set)
+ return False;
+ break;
+ case DEFAULT:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_set)
+ return False;
+ break;
+ }
return True;
}
-BOOL pdb_set_user_sid (SAM_ACCOUNT *sampass, DOM_SID *u_sid)
+BOOL pdb_set_user_sid (SAM_ACCOUNT *sampass, DOM_SID *u_sid, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_USERSID_CHANGED;
+ uint32 sam_flag_set = FLAG_SAM_USERSID_SET;
+
if (!sampass || !u_sid)
return False;
@@ -496,13 +749,35 @@ BOOL pdb_set_user_sid (SAM_ACCOUNT *samp
DEBUG(10, ("pdb_set_user_sid: setting user sid %s\n",
sid_string_static(&sampass->private.user_sid)));
-
+
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_set)
+ return False;
+ break;
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_set)
+ return False;
+ break;
+ case DEFAULT:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_set)
+ return False;
+ break;
+ }
+
return True;
}
-BOOL pdb_set_user_sid_from_string (SAM_ACCOUNT *sampass, fstring u_sid)
+BOOL pdb_set_user_sid_from_string (SAM_ACCOUNT *sampass, fstring u_sid, uint8 flag)
{
DOM_SID new_sid;
+
if (!sampass || !u_sid)
return False;
@@ -514,7 +789,7 @@ BOOL pdb_set_user_sid_from_string (SAM_A
return False;
}
- if (!pdb_set_user_sid(sampass, &new_sid)) {
+ if (!pdb_set_user_sid(sampass, &new_sid, flag)) {
DEBUG(1, ("pdb_set_user_sid_from_string: could not set sid %s on SAM_ACCOUNT!\n", u_sid));
return False;
}
@@ -522,8 +797,11 @@ BOOL pdb_set_user_sid_from_string (SAM_A
return True;
}
-BOOL pdb_set_group_sid (SAM_ACCOUNT *sampass, DOM_SID *g_sid)
+BOOL pdb_set_group_sid (SAM_ACCOUNT *sampass, DOM_SID *g_sid, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_GROUPSID_CHANGED;
+ uint32 sam_flag_set = FLAG_SAM_GROUPSID_SET;
+
if (!sampass || !g_sid)
return False;
@@ -532,10 +810,31 @@ BOOL pdb_set_group_sid (SAM_ACCOUNT *sam
DEBUG(10, ("pdb_set_group_sid: setting group sid %s\n",
sid_string_static(&sampass->private.group_sid)));
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_set)
+ return False;
+ break;
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_set)
+ return False;
+ break;
+ case DEFAULT:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_set)
+ return False;
+ break;
+ }
+
return True;
}
-BOOL pdb_set_group_sid_from_string (SAM_ACCOUNT *sampass, fstring g_sid)
+BOOL pdb_set_group_sid_from_string (SAM_ACCOUNT *sampass, fstring g_sid, uint8 flag)
{
DOM_SID new_sid;
if (!sampass || !g_sid)
@@ -549,7 +848,7 @@ BOOL pdb_set_group_sid_from_string (SAM_
return False;
}
- if (!pdb_set_group_sid(sampass, &new_sid)) {
+ if (!pdb_set_group_sid(sampass, &new_sid, flag)) {
DEBUG(1, ("pdb_set_group_sid_from_string: could not set sid %s on SAM_ACCOUNT!\n", g_sid));
return False;
}
@@ -560,8 +859,9 @@ BOOL pdb_set_group_sid_from_string (SAM_
Set the user's UNIX name.
********************************************************************/
-BOOL pdb_set_username(SAM_ACCOUNT *sampass, const char *username)
-{
+BOOL pdb_set_username(SAM_ACCOUNT *sampass, const char *username, uint8 flag)
+{
+ uint32 sam_flag_changed = FLAG_SAM_USERNAME_CHANGED;
if (!sampass)
return False;
@@ -579,6 +879,18 @@ BOOL pdb_set_username(SAM_ACCOUNT *sampa
} else {
sampass->private.username = PDB_NOT_QUITE_NULL;
}
+
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ break;
+ case DEFAULT:
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ break;
+ }
return True;
}
@@ -587,8 +899,11 @@ BOOL pdb_set_username(SAM_ACCOUNT *sampa
Set the domain name.
********************************************************************/
-BOOL pdb_set_domain(SAM_ACCOUNT *sampass, const char *domain)
-{
+BOOL pdb_set_domain(SAM_ACCOUNT *sampass, const char *domain, uint8 flag)
+{
+ uint32 sam_flag_changed = FLAG_SAM_DOMAIN_CHANGED;
+ uint32 sam_flag_default = FLAG_SAM_DOMAIN_DEFAULT;
+
if (!sampass)
return False;
@@ -607,6 +922,27 @@ BOOL pdb_set_domain(SAM_ACCOUNT *sampass
sampass->private.domain = PDB_NOT_QUITE_NULL;
}
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case DEFAULT:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ }
+
return True;
}
@@ -616,6 +952,8 @@ BOOL pdb_set_domain(SAM_ACCOUNT *sampass
BOOL pdb_set_nt_username(SAM_ACCOUNT *sampass, const char *nt_username)
{
+ uint32 sam_flag_changed = FLAG_SAM_NTUSERNAME_CHANGED;
+
if (!sampass)
return False;
@@ -634,6 +972,18 @@ BOOL pdb_set_nt_username(SAM_ACCOUNT *sa
sampass->private.nt_username = PDB_NOT_QUITE_NULL;
}
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ break;
+ case DEFAULT:
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ break;
+ }
+
return True;
}
@@ -643,6 +993,8 @@ BOOL pdb_set_nt_username(SAM_ACCOUNT *sa
BOOL pdb_set_fullname(SAM_ACCOUNT *sampass, const char *full_name)
{
+ uint32 sam_flag_changed = FLAG_SAM_FULLNAME_CHANGED;
+
if (!sampass)
return False;
@@ -661,6 +1013,18 @@ BOOL pdb_set_fullname(SAM_ACCOUNT *sampa
sampass->private.full_name = PDB_NOT_QUITE_NULL;
}
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ break;
+ case DEFAULT:
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ break;
+ }
+
return True;
}
@@ -668,8 +1032,11 @@ BOOL pdb_set_fullname(SAM_ACCOUNT *sampa
Set the user's logon script.
********************************************************************/
-BOOL pdb_set_logon_script(SAM_ACCOUNT *sampass, const char *logon_script, BOOL store)
+BOOL pdb_set_logon_script(SAM_ACCOUNT *sampass, const char *logon_script, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_LOGONSCRIPT_CHANGED;
+ uint32 sam_flag_default = FLAG_SAM_LOGONSCRIPT_DEFAULT;
+
if (!sampass)
return False;
@@ -688,9 +1055,25 @@ BOOL pdb_set_logon_script(SAM_ACCOUNT *s
sampass->private.logon_script = PDB_NOT_QUITE_NULL;
}
- if (store) {
- DEBUG(10, ("pdb_set_logon_script: setting logon script sam flag!\n"));
- pdb_set_init_flag(sampass, FLAG_SAM_LOGONSCRIPT);
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case DEFAULT:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
}
return True;
@@ -700,8 +1083,11 @@ BOOL pdb_set_logon_script(SAM_ACCOUNT *s
Set the user's profile path.
********************************************************************/
-BOOL pdb_set_profile_path (SAM_ACCOUNT *sampass, const char *profile_path, BOOL store)
+BOOL pdb_set_profile_path (SAM_ACCOUNT *sampass, const char *profile_path, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_PROFILEPATH_CHANGED;
+ uint32 sam_flag_default = FLAG_SAM_PROFILEPATH_DEFAULT;
+
if (!sampass)
return False;
@@ -720,9 +1106,25 @@ BOOL pdb_set_profile_path (SAM_ACCOUNT *
sampass->private.profile_path = PDB_NOT_QUITE_NULL;
}
- if (store) {
- DEBUG(10, ("pdb_set_profile_path: setting profile path sam flag!\n"));
- pdb_set_init_flag(sampass, FLAG_SAM_PROFILE);
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case DEFAULT:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
}
return True;
@@ -732,8 +1134,11 @@ BOOL pdb_set_profile_path (SAM_ACCOUNT *
Set the user's directory drive.
********************************************************************/
-BOOL pdb_set_dir_drive (SAM_ACCOUNT *sampass, const char *dir_drive, BOOL store)
+BOOL pdb_set_dir_drive (SAM_ACCOUNT *sampass, const char *dir_drive, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_DIRDRIVE_CHANGED;
+ uint32 sam_flag_default = FLAG_SAM_DIRDRIVE_DEFAULT;
+
if (!sampass)
return False;
@@ -752,9 +1157,25 @@ BOOL pdb_set_dir_drive (SAM_ACCOUNT *sam
sampass->private.dir_drive = PDB_NOT_QUITE_NULL;
}
- if (store) {
- DEBUG(10, ("pdb_set_dir_drive: setting dir drive sam flag!\n"));
- pdb_set_init_flag(sampass, FLAG_SAM_DRIVE);
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case DEFAULT:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
}
return True;
@@ -764,8 +1185,11 @@ BOOL pdb_set_dir_drive (SAM_ACCOUNT *sam
Set the user's home directory.
********************************************************************/
-BOOL pdb_set_homedir (SAM_ACCOUNT *sampass, const char *home_dir, BOOL store)
+BOOL pdb_set_homedir (SAM_ACCOUNT *sampass, const char *home_dir, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_HOMEDIR_CHANGED;
+ uint32 sam_flag_default = FLAG_SAM_HOMEDIR_DEFAULT;
+
if (!sampass)
return False;
@@ -784,9 +1208,25 @@ BOOL pdb_set_homedir (SAM_ACCOUNT *sampa
sampass->private.home_dir = PDB_NOT_QUITE_NULL;
}
- if (store) {
- DEBUG(10, ("pdb_set_homedir: setting home dir sam flag!\n"));
- pdb_set_init_flag(sampass, FLAG_SAM_SMBHOME);
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case DEFAULT:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
}
return True;
@@ -796,8 +1236,10 @@ BOOL pdb_set_homedir (SAM_ACCOUNT *sampa
Set the user's unix home directory.
********************************************************************/
-BOOL pdb_set_unix_homedir (SAM_ACCOUNT *sampass, const char *unix_home_dir)
+BOOL pdb_set_unix_homedir (SAM_ACCOUNT *sampass, const char *unix_home_dir, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_UNIXHOMEDIR_CHANGED;
+
if (!sampass)
return False;
@@ -824,8 +1266,10 @@ BOOL pdb_set_unix_homedir (SAM_ACCOUNT *
Set the user's account description.
********************************************************************/
-BOOL pdb_set_acct_desc (SAM_ACCOUNT *sampass, const char *acct_desc)
+BOOL pdb_set_acct_desc (SAM_ACCOUNT *sampass, const char *acct_desc, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_ACCTDESC_CHANGED;
+
if (!sampass)
return False;
@@ -848,8 +1292,10 @@ BOOL pdb_set_acct_desc (SAM_ACCOUNT *sam
Set the user's workstation allowed list.
********************************************************************/
-BOOL pdb_set_workstations (SAM_ACCOUNT *sampass, const char *workstations)
+BOOL pdb_set_workstations (SAM_ACCOUNT *sampass, const char *workstations, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_WORKSTATIONS_CHANGED;
+
if (!sampass)
return False;
@@ -875,8 +1321,10 @@ BOOL pdb_set_workstations (SAM_ACCOUNT *
Set the user's 'unknown_str', whatever the heck this actually is...
********************************************************************/
-BOOL pdb_set_unknown_str (SAM_ACCOUNT *sampass, const char *unknown_str)
+BOOL pdb_set_unknown_str (SAM_ACCOUNT *sampass, const char *unknown_str, uint8)
{
+ uint32 sam_flag_changed = FLAG_SAM_UNKNOWNSTR_CHANGED;
+
if (!sampass)
return False;
@@ -899,8 +1347,10 @@ BOOL pdb_set_unknown_str (SAM_ACCOUNT *s
Set the user's dial string.
********************************************************************/
-BOOL pdb_set_munged_dial (SAM_ACCOUNT *sampass, const char *munged_dial)
+BOOL pdb_set_munged_dial (SAM_ACCOUNT *sampass, const char *munged_dial, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_MUNGEDDIAL_CHANGED;
+
if (!sampass)
return False;
@@ -923,8 +1373,10 @@ BOOL pdb_set_munged_dial (SAM_ACCOUNT *s
Set the user's NT hash.
********************************************************************/
-BOOL pdb_set_nt_passwd (SAM_ACCOUNT *sampass, const uint8 *pwd)
+BOOL pdb_set_nt_passwd (SAM_ACCOUNT *sampass, const uint8 pwd[NT_HASH_LEN], uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_NTPASSWD_CHANGED;
+
if (!sampass)
return False;
@@ -939,8 +1391,10 @@ BOOL pdb_set_nt_passwd (SAM_ACCOUNT *sam
Set the user's LM hash.
********************************************************************/
-BOOL pdb_set_lanman_passwd (SAM_ACCOUNT *sampass, const uint8 pwd[16])
+BOOL pdb_set_lanman_passwd (SAM_ACCOUNT *sampass, const uint8 pwd[LM_HASH_LEN], uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_LMPASSWD_CHANGED;
+
if (!sampass)
return False;
@@ -956,8 +1410,10 @@ BOOL pdb_set_lanman_passwd (SAM_ACCOUNT
below)
********************************************************************/
-BOOL pdb_set_plaintext_pw_only (SAM_ACCOUNT *sampass, const char *password)
+BOOL pdb_set_plaintext_pw_only (SAM_ACCOUNT *sampass, const char *password, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_PLAINTEXT_PW_CHANGED;
+
if (!sampass)
return False;
@@ -979,8 +1435,10 @@ BOOL pdb_set_plaintext_pw_only (SAM_ACCO
return True;
}
-BOOL pdb_set_unknown_3 (SAM_ACCOUNT *sampass, uint32 unkn)
+BOOL pdb_set_unknown_3 (SAM_ACCOUNT *sampass, uint32 unkn, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_UNKNOWN3_CHANGED;
+
if (!sampass)
return False;
@@ -988,8 +1446,10 @@ BOOL pdb_set_unknown_3 (SAM_ACCOUNT *sam
return True;
}
-BOOL pdb_set_unknown_5 (SAM_ACCOUNT *sampass, uint32 unkn)
+BOOL pdb_set_unknown_5 (SAM_ACCOUNT *sampass, uint32 unkn, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_UNKNOWN5_CHANGED;
+
if (!sampass)
return False;
@@ -997,8 +1457,10 @@ BOOL pdb_set_unknown_5 (SAM_ACCOUNT *sam
return True;
}
-BOOL pdb_set_unknown_6 (SAM_ACCOUNT *sampass, uint32 unkn)
+BOOL pdb_set_unknown_6 (SAM_ACCOUNT *sampass, uint32 unkn, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_UNKNOW6_CHANGED;
+
if (!sampass)
return False;
@@ -1006,8 +1468,11 @@ BOOL pdb_set_unknown_6 (SAM_ACCOUNT *sam
return True;
}
-BOOL pdb_set_hours (SAM_ACCOUNT *sampass, const uint8 *hours)
+BOOL pdb_set_hours (SAM_ACCOUNT *sampass, const uint8 *hours, uint8 flag)
{
+ uint32 sam_flag_changed = FLAG_SAM_HOURS_CHANGED;
+ uint32 sam_flag_default = FLAG_SAM_HOURS_DEFAULT;
+
if (!sampass)
return False;
@@ -1018,6 +1483,27 @@ BOOL pdb_set_hours (SAM_ACCOUNT *sampass
memcpy (sampass->private.hours, hours, MAX_HOURS_LEN);
+ switch(flag) {
+ case CHANGED:
+ if (!pdb_set_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case SET:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_unset_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ case DEFAULT:
+ if (!pdb_unset_init_flag(sampass, sam_flag_changed)
+ return False;
+ if (!pdb_set_init_flag(sampass, sam_flag_default)
+ return False;
+ break;
+ }
+
return True;
}
@@ -1041,12 +1527,12 @@ BOOL pdb_set_pass_changed_now (SAM_ACCOU
if (!account_policy_get(AP_MAX_PASSWORD_AGE, &expire)
|| (expire==(uint32)-1)) {
- if (!pdb_set_pass_must_change_time (sampass, get_time_t_max(), False))
+ if (!pdb_set_pass_must_change_time (sampass, get_time_t_max(), SET))
return False;
} else {
if (!pdb_set_pass_must_change_time (sampass,
pdb_get_pass_last_set_time(sampass)
- + expire, True))
+ + expire, CHANGED))
return False;
}
@@ -1068,13 +1554,13 @@ BOOL pdb_set_plaintext_passwd (SAM_ACCOU
nt_lm_owf_gen (plaintext, new_nt_p16, new_lanman_p16);
- if (!pdb_set_nt_passwd (sampass, new_nt_p16))
+ if (!pdb_set_nt_passwd (sampass, new_nt_p16, CHANGED))
return False;
- if (!pdb_set_lanman_passwd (sampass, new_lanman_p16))
+ if (!pdb_set_lanman_passwd (sampass, new_lanman_p16, CHANGED))
return False;
- if (!pdb_set_plaintext_pw_only (sampass, plaintext))
+ if (!pdb_set_plaintext_pw_only (sampass, plaintext, CHANGED))
return False;
if (!pdb_set_pass_changed_now (sampass))
More information about the samba-technical
mailing list