[SCM] Samba Shared Repository - branch v3-3-test updated - release-3-2-0pre2-3581-ga9c444a

Günther Deschner gd at samba.org
Mon Aug 11 17:17:31 GMT 2008


The branch, v3-3-test has been updated
       via  a9c444a342968b539918c082b78af8640f8c87cd (commit)
       via  bb345187b7c62e9ad214037120545addd87a666d (commit)
       via  7f7e6ca9091101aa7a3dc275c1d0258d97743f4b (commit)
       via  316575b412e19008ecb6729f97e93b6103d8ba56 (commit)
       via  b4c912bfbc62768ff4d7ecb39c02dc4a2a9825d2 (commit)
       via  5648145bec3bd24ecedea24a8834ac6768bfc640 (commit)
       via  36c5de4702c03bd71d689aaecea87168133021c2 (commit)
       via  2af33ceeb8bece347d67e27a662a7cd0a58f75f8 (commit)
      from  b62de0d1944de3dba55e182e0d8eb7c6ca5ec045 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-3-test


- Log -----------------------------------------------------------------
commit a9c444a342968b539918c082b78af8640f8c87cd
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jul 31 21:09:00 2008 +0200

    netapi: add NetUserModalsGet and NetUserModalsSet tests.
    
    Guenther

commit bb345187b7c62e9ad214037120545addd87a666d
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jul 31 21:08:31 2008 +0200

    netapi: implement NetUserModalsSet_r.
    
    Guenther

commit 7f7e6ca9091101aa7a3dc275c1d0258d97743f4b
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jul 31 19:26:29 2008 +0200

    netapi: implement NetUserModalsGet_r.
    
    Guenther

commit 316575b412e19008ecb6729f97e93b6103d8ba56
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jul 31 17:39:07 2008 +0200

    netapi: add example code for NetUserModalsGet and NetUserModalsSet.
    
    Guenther

commit b4c912bfbc62768ff4d7ecb39c02dc4a2a9825d2
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jul 31 16:47:15 2008 +0200

    netapi: add NetUserModalsGet and NetUserModalsSet to public headers.
    
    Guenther

commit 5648145bec3bd24ecedea24a8834ac6768bfc640
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jul 31 16:43:27 2008 +0200

    netapi: add skeleton for NetUserModalsGet and NetUserModalsSet.
    
    Guenther

commit 36c5de4702c03bd71d689aaecea87168133021c2
Author: Günther Deschner <gd at samba.org>
Date:   Mon Aug 11 19:07:51 2008 +0200

    re-run make idl.
    
    Guenther

commit 2af33ceeb8bece347d67e27a662a7cd0a58f75f8
Author: Günther Deschner <gd at samba.org>
Date:   Thu Jul 31 16:42:42 2008 +0200

    netapi: add NetUserModalsSet and NetUserModalsGet to IDL.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source/lib/netapi/examples/Makefile.in             |   12 +
 .../group_getinfo.c => user/user_modalsget.c}      |   80 +-
 .../group_setinfo.c => user/user_modalsset.c}      |  105 ++--
 source/lib/netapi/libnetapi.c                      |   90 ++
 source/lib/netapi/libnetapi.h                      |   15 +
 source/lib/netapi/netapi.h                         |   62 ++
 source/lib/netapi/tests/netuser.c                  |   55 ++
 source/lib/netapi/user.c                           |  869 ++++++++++++++++++++
 source/librpc/gen_ndr/libnetapi.h                  |   82 ++
 source/librpc/gen_ndr/ndr_libnetapi.c              |   63 ++
 source/librpc/gen_ndr/ndr_libnetapi.h              |   42 +-
 source/librpc/idl/libnetapi.idl                    |   75 ++
 12 files changed, 1443 insertions(+), 107 deletions(-)
 copy source/lib/netapi/examples/{group/group_getinfo.c => user/user_modalsget.c} (54%)
 copy source/lib/netapi/examples/{group/group_setinfo.c => user/user_modalsset.c} (53%)


Changeset truncated at 500 lines:

diff --git a/source/lib/netapi/examples/Makefile.in b/source/lib/netapi/examples/Makefile.in
index e7b61a1..5e577ed 100644
--- a/source/lib/netapi/examples/Makefile.in
+++ b/source/lib/netapi/examples/Makefile.in
@@ -29,6 +29,8 @@ PROGS = bin/getdc at EXEEXT@ \
 	bin/user_chgpwd at EXEEXT@ \
 	bin/user_getinfo at EXEEXT@ \
 	bin/user_setinfo at EXEEXT@ \
+	bin/user_modalsget at EXEEXT@ \
+	bin/user_modalsset at EXEEXT@ \
 	bin/group_add at EXEEXT@ \
 	bin/group_del at EXEEXT@ \
 	bin/group_enum at EXEEXT@ \
@@ -83,6 +85,8 @@ USERDISPINFO_OBJ = user/user_dispinfo.o $(CMDLINE_OBJ)
 USERCHGPWD_OBJ = user/user_chgpwd.o $(CMDLINE_OBJ)
 USERGETINFO_OBJ = user/user_getinfo.o $(CMDLINE_OBJ)
 USERSETINFO_OBJ = user/user_setinfo.o $(CMDLINE_OBJ)
+USERMODALSGET_OBJ = user/user_modalsget.o $(CMDLINE_OBJ)
+USERMODALSSET_OBJ = user/user_modalsset.o $(CMDLINE_OBJ)
 GROUPADD_OBJ = group/group_add.o $(CMDLINE_OBJ)
 GROUPDEL_OBJ = group/group_del.o $(CMDLINE_OBJ)
 GROUPENUM_OBJ = group/group_enum.o $(CMDLINE_OBJ)
@@ -146,6 +150,14 @@ bin/user_setinfo at EXEEXT@: $(BINARY_PREREQS) $(USERSETINFO_OBJ)
 	@echo Linking $@
 	@$(CC) $(FLAGS) -o $@ $(USERSETINFO_OBJ) $(LDFLAGS) $(DYNEXP) $(CMDLINE_LIBS)
 
+bin/user_modalsget at EXEEXT@: $(BINARY_PREREQS) $(USERMODALSGET_OBJ)
+	@echo Linking $@
+	@$(CC) $(FLAGS) -o $@ $(USERMODALSGET_OBJ) $(LDFLAGS) $(DYNEXP) $(CMDLINE_LIBS)
+
+bin/user_modalsset at EXEEXT@: $(BINARY_PREREQS) $(USERMODALSSET_OBJ)
+	@echo Linking $@
+	@$(CC) $(FLAGS) -o $@ $(USERMODALSSET_OBJ) $(LDFLAGS) $(DYNEXP) $(CMDLINE_LIBS)
+
 bin/group_add at EXEEXT@: $(BINARY_PREREQS) $(GROUPADD_OBJ)
 	@echo Linking $@
 	@$(CC) $(FLAGS) -o $@ $(GROUPADD_OBJ) $(LDFLAGS) $(DYNEXP) $(CMDLINE_LIBS)
diff --git a/source/lib/netapi/examples/group/group_getinfo.c b/source/lib/netapi/examples/user/user_modalsget.c
similarity index 54%
copy from source/lib/netapi/examples/group/group_getinfo.c
copy to source/lib/netapi/examples/user/user_modalsget.c
index 2e5b793..4dcb41b 100644
--- a/source/lib/netapi/examples/group/group_getinfo.c
+++ b/source/lib/netapi/examples/user/user_modalsget.c
@@ -1,6 +1,6 @@
 /*
  *  Unix SMB/CIFS implementation.
- *  NetGroupGetInfo query
+ *  NetUserModalsGet query
  *  Copyright (C) Guenther Deschner 2008
  *
  *  This program is free software; you can redistribute it and/or modify
@@ -32,15 +32,15 @@ int main(int argc, const char **argv)
 	NET_API_STATUS status;
 	struct libnetapi_ctx *ctx = NULL;
 	const char *hostname = NULL;
-	const char *groupname = NULL;
 	uint8_t *buffer = NULL;
 	uint32_t level = 0;
-	struct GROUP_INFO_0 *g0;
-	struct GROUP_INFO_1 *g1;
-	struct GROUP_INFO_2 *g2;
-	struct GROUP_INFO_3 *g3;
 	char *sid_str = NULL;
 
+	struct USER_MODALS_INFO_0 *u0;
+	struct USER_MODALS_INFO_1 *u1;
+	struct USER_MODALS_INFO_2 *u2;
+	struct USER_MODALS_INFO_3 *u3;
+
 	poptContext pc;
 	int opt;
 
@@ -55,9 +55,9 @@ int main(int argc, const char **argv)
 		return status;
 	}
 
-	pc = poptGetContext("group_getinfo", argc, argv, long_options, 0);
+	pc = poptGetContext("user_modalsget", argc, argv, long_options, 0);
 
-	poptSetOtherOptionHelp(pc, "hostname groupname level");
+	poptSetOtherOptionHelp(pc, "hostname level");
 	while((opt = poptGetNextOpt(pc)) != -1) {
 	}
 
@@ -67,55 +67,59 @@ int main(int argc, const char **argv)
 	}
 	hostname = poptGetArg(pc);
 
-	if (!poptPeekArg(pc)) {
-		poptPrintHelp(pc, stderr, 0);
-		goto out;
-	}
-	groupname = poptGetArg(pc);
-
 	if (poptPeekArg(pc)) {
 		level = atoi(poptGetArg(pc));
 	}
 
-	/* NetGroupGetInfo */
+	/* NetUserModalsGet */
 
-	status = NetGroupGetInfo(hostname,
-				 groupname,
-				 level,
-				 &buffer);
+	status = NetUserModalsGet(hostname,
+				  level,
+				  &buffer);
 	if (status != 0) {
-		printf("NetGroupGetInfo failed with: %s\n",
+		printf("NetUserModalsGet failed with: %s\n",
 			libnetapi_get_error_string(ctx, status));
 		goto out;
 	}
 
 	switch (level) {
 		case 0:
-			g0 = (struct GROUP_INFO_0 *)buffer;
-			printf("name: %s\n", g0->grpi0_name);
+			u0 = (struct USER_MODALS_INFO_0 *)buffer;
+			printf("min passwd len: %d character\n",
+				u0->usrmod0_min_passwd_len);
+			printf("max passwd age: %d (days)\n",
+				u0->usrmod0_max_passwd_age/86400);
+			printf("min passwd age: %d (days)\n",
+				u0->usrmod0_min_passwd_age/86400);
+			printf("force logoff: %d (seconds)\n",
+				u0->usrmod0_force_logoff);
+			printf("password history length: %d entries\n",
+				u0->usrmod0_password_hist_len);
 			break;
 		case 1:
-			g1 = (struct GROUP_INFO_1 *)buffer;
-			printf("name: %s\n", g1->grpi1_name);
-			printf("comment: %s\n", g1->grpi1_comment);
+			u1 = (struct USER_MODALS_INFO_1 *)buffer;
+			printf("role: %d\n", u1->usrmod1_role);
+			printf("primary: %s\n", u1->usrmod1_primary);
 			break;
 		case 2:
-			g2 = (struct GROUP_INFO_2 *)buffer;
-			printf("name: %s\n", g2->grpi2_name);
-			printf("comment: %s\n", g2->grpi2_comment);
-			printf("group_id: %d\n", g2->grpi2_group_id);
-			printf("attributes: %d\n", g2->grpi2_attributes);
-			break;
-		case 3:
-			g3 = (struct GROUP_INFO_3 *)buffer;
-			printf("name: %s\n", g3->grpi3_name);
-			printf("comment: %s\n", g3->grpi3_comment);
-			if (ConvertSidToStringSid(g3->grpi3_group_sid,
+			u2 = (struct USER_MODALS_INFO_2 *)buffer;
+			printf("domain name: %s\n", u2->usrmod2_domain_name);
+			if (ConvertSidToStringSid(u2->usrmod2_domain_id,
 						  &sid_str)) {
-				printf("group_sid: %s\n", sid_str);
+				printf("domain sid: %s\n", sid_str);
 				free(sid_str);
 			}
-			printf("attributes: %d\n", g3->grpi3_attributes);
+			break;
+		case 3:
+			u3 = (struct USER_MODALS_INFO_3 *)buffer;
+			printf("lockout duration: %d (seconds)\n",
+				u3->usrmod3_lockout_duration);
+			printf("lockout observation window: %d (seconds)\n",
+				u3->usrmod3_lockout_observation_window);
+			printf("lockout threshold: %d entries\n",
+				u3->usrmod3_lockout_threshold);
+			break;
+		default:
 			break;
 	}
 
diff --git a/source/lib/netapi/examples/group/group_setinfo.c b/source/lib/netapi/examples/user/user_modalsset.c
similarity index 53%
copy from source/lib/netapi/examples/group/group_setinfo.c
copy to source/lib/netapi/examples/user/user_modalsset.c
index cd30d8b..57e1ef7 100644
--- a/source/lib/netapi/examples/group/group_setinfo.c
+++ b/source/lib/netapi/examples/user/user_modalsset.c
@@ -1,6 +1,6 @@
 /*
  *  Unix SMB/CIFS implementation.
- *  NetGroupSetInfo query
+ *  NetUserModalsSet query
  *  Copyright (C) Guenther Deschner 2008
  *
  *  This program is free software; you can redistribute it and/or modify
@@ -32,17 +32,22 @@ int main(int argc, const char **argv)
 	NET_API_STATUS status;
 	struct libnetapi_ctx *ctx = NULL;
 	const char *hostname = NULL;
-	const char *groupname = NULL;
-	const char *option = NULL;
 	uint8_t *buffer = NULL;
 	uint32_t level = 0;
+	uint32_t value = 0;
 	uint32_t parm_err = 0;
-	struct GROUP_INFO_0 g0;
-	struct GROUP_INFO_1 g1;
-	struct GROUP_INFO_2 g2;
-	struct GROUP_INFO_3 g3;
-	struct GROUP_INFO_1002 g1002;
-	struct GROUP_INFO_1005 g1005;
+
+	struct USER_MODALS_INFO_0 u0;
+	struct USER_MODALS_INFO_1 u1;
+	struct USER_MODALS_INFO_2 u2;
+	struct USER_MODALS_INFO_3 u3;
+	struct USER_MODALS_INFO_1001 u1001;
+	struct USER_MODALS_INFO_1002 u1002;
+	struct USER_MODALS_INFO_1003 u1003;
+	struct USER_MODALS_INFO_1004 u1004;
+	struct USER_MODALS_INFO_1005 u1005;
+	struct USER_MODALS_INFO_1006 u1006;
+	struct USER_MODALS_INFO_1007 u1007;
 
 	poptContext pc;
 	int opt;
@@ -58,9 +63,9 @@ int main(int argc, const char **argv)
 		return status;
 	}
 
-	pc = poptGetContext("group_setinfo", argc, argv, long_options, 0);
+	pc = poptGetContext("user_modalsset", argc, argv, long_options, 0);
 
-	poptSetOtherOptionHelp(pc, "hostname groupname level option");
+	poptSetOtherOptionHelp(pc, "hostname level value");
 	while((opt = poptGetNextOpt(pc)) != -1) {
 	}
 
@@ -70,66 +75,60 @@ int main(int argc, const char **argv)
 	}
 	hostname = poptGetArg(pc);
 
-	if (!poptPeekArg(pc)) {
-		poptPrintHelp(pc, stderr, 0);
-		goto out;
+	if (poptPeekArg(pc)) {
+		level = atoi(poptGetArg(pc));
 	}
-	groupname = poptGetArg(pc);
 
-	if (!poptPeekArg(pc)) {
-		poptPrintHelp(pc, stderr, 0);
-		goto out;
+	if (poptPeekArg(pc)) {
+		value = atoi(poptGetArg(pc));
 	}
-	level = atoi(poptGetArg(pc));
-
-	if (!poptPeekArg(pc)) {
-		poptPrintHelp(pc, stderr, 0);
-		goto out;
-	}
-	option = poptGetArg(pc);
-
-	/* NetGroupSetInfo */
 
 	switch (level) {
 		case 0:
-			g0.grpi0_name = option;
-			buffer = (uint8_t *)&g0;
+			u0.usrmod0_min_passwd_len = 0;
+			u0.usrmod0_max_passwd_age = (86400 * 30); /* once a month */
+			u0.usrmod0_min_passwd_age = 0;
+			u0.usrmod0_force_logoff = TIMEQ_FOREVER;
+			u0.usrmod0_password_hist_len = 0;
+			buffer = (uint8_t *)&u0;
 			break;
 		case 1:
-			g1.grpi1_name = option; /* this one will be ignored */
-			g1.grpi1_comment = option;
-			buffer = (uint8_t *)&g1;
-			break;
 		case 2:
-			g2.grpi2_name = option; /* this one will be ignored */
-			g2.grpi2_comment = option;
-			g2.grpi2_group_id = 4711; /* this one will be ignored */
-			g2.grpi2_attributes = 7;
-			buffer = (uint8_t *)&g2;
-			break;
 		case 3:
-			g3.grpi3_name = option; /* this one will be ignored */
-			g3.grpi3_comment = option;
-			g2.grpi2_attributes = 7;
-			buffer = (uint8_t *)&g3;
+		case 1001:
+			u1001.usrmod1001_min_passwd_len = 0;
+			buffer = (uint8_t *)&u1001;
 			break;
 		case 1002:
-			g1002.grpi1002_comment = option;
-			buffer = (uint8_t *)&g1002;
+			u1002.usrmod1002_max_passwd_age = 0;
+			buffer = (uint8_t *)&u1002;
+			break;
+		case 1003:
+			u1003.usrmod1003_min_passwd_age = (86400 * 30); /* once a month */
+			buffer = (uint8_t *)&u1003;
+			break;
+		case 1004:
+			u1004.usrmod1004_force_logoff = TIMEQ_FOREVER;
+			buffer = (uint8_t *)&u1004;
 			break;
 		case 1005:
-			g1005.grpi1005_attributes = atoi(option);
-			buffer = (uint8_t *)&g1005;
+			u1005.usrmod1005_password_hist_len = 0;
+			buffer = (uint8_t *)&u1005;
+			break;
+		case 1006:
+		case 1007:
+		default:
 			break;
 	}
 
-	status = NetGroupSetInfo(hostname,
-				 groupname,
-				 level,
-				 buffer,
-				 &parm_err);
+	/* NetUserModalsSet */
+
+	status = NetUserModalsSet(hostname,
+				  level,
+				  buffer,
+				  &parm_err);
 	if (status != 0) {
-		printf("NetGroupSetInfo failed with: %s\n",
+		printf("NetUserModalsSet failed with: %s\n",
 			libnetapi_get_error_string(ctx, status));
 		goto out;
 	}
diff --git a/source/lib/netapi/libnetapi.c b/source/lib/netapi/libnetapi.c
index fe57238..adc875d 100644
--- a/source/lib/netapi/libnetapi.c
+++ b/source/lib/netapi/libnetapi.c
@@ -726,6 +726,96 @@ NET_API_STATUS NetUserSetInfo(const char * server_name /* [in] */,
 }
 
 /****************************************************************
+ NetUserModalsGet
+****************************************************************/
+
+NET_API_STATUS NetUserModalsGet(const char * server_name /* [in] */,
+				uint32_t level /* [in] */,
+				uint8_t **buffer /* [out] [ref] */)
+{
+	struct NetUserModalsGet r;
+	struct libnetapi_ctx *ctx = NULL;
+	NET_API_STATUS status;
+	WERROR werr;
+
+	status = libnetapi_getctx(&ctx);
+	if (status != 0) {
+		return status;
+	}
+
+	/* In parameters */
+	r.in.server_name = server_name;
+	r.in.level = level;
+
+	/* Out parameters */
+	r.out.buffer = buffer;
+
+	if (DEBUGLEVEL >= 10) {
+		NDR_PRINT_IN_DEBUG(NetUserModalsGet, &r);
+	}
+
+	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
+		werr = NetUserModalsGet_l(ctx, &r);
+	} else {
+		werr = NetUserModalsGet_r(ctx, &r);
+	}
+
+	r.out.result = W_ERROR_V(werr);
+
+	if (DEBUGLEVEL >= 10) {
+		NDR_PRINT_OUT_DEBUG(NetUserModalsGet, &r);
+	}
+
+	return r.out.result;
+}
+
+/****************************************************************
+ NetUserModalsSet
+****************************************************************/
+
+NET_API_STATUS NetUserModalsSet(const char * server_name /* [in] */,
+				uint32_t level /* [in] */,
+				uint8_t *buffer /* [in] [ref] */,
+				uint32_t *parm_err /* [out] [ref] */)
+{
+	struct NetUserModalsSet r;
+	struct libnetapi_ctx *ctx = NULL;
+	NET_API_STATUS status;
+	WERROR werr;
+
+	status = libnetapi_getctx(&ctx);
+	if (status != 0) {
+		return status;
+	}
+
+	/* In parameters */
+	r.in.server_name = server_name;
+	r.in.level = level;
+	r.in.buffer = buffer;
+
+	/* Out parameters */
+	r.out.parm_err = parm_err;
+
+	if (DEBUGLEVEL >= 10) {
+		NDR_PRINT_IN_DEBUG(NetUserModalsSet, &r);
+	}
+
+	if (LIBNETAPI_LOCAL_SERVER(server_name)) {
+		werr = NetUserModalsSet_l(ctx, &r);
+	} else {
+		werr = NetUserModalsSet_r(ctx, &r);
+	}
+
+	r.out.result = W_ERROR_V(werr);
+
+	if (DEBUGLEVEL >= 10) {
+		NDR_PRINT_OUT_DEBUG(NetUserModalsSet, &r);
+	}
+
+	return r.out.result;
+}
+
+/****************************************************************
  NetQueryDisplayInformation
 ****************************************************************/
 
diff --git a/source/lib/netapi/libnetapi.h b/source/lib/netapi/libnetapi.h
index 5c9e2e2..8e7a662 100644
--- a/source/lib/netapi/libnetapi.h
+++ b/source/lib/netapi/libnetapi.h
@@ -125,6 +125,21 @@ WERROR NetUserSetInfo_r(struct libnetapi_ctx *ctx,
 			struct NetUserSetInfo *r);
 WERROR NetUserSetInfo_l(struct libnetapi_ctx *ctx,
 			struct NetUserSetInfo *r);
+NET_API_STATUS NetUserModalsGet(const char * server_name /* [in] */,
+				uint32_t level /* [in] */,
+				uint8_t **buffer /* [out] [ref] */);
+WERROR NetUserModalsGet_r(struct libnetapi_ctx *ctx,
+			  struct NetUserModalsGet *r);
+WERROR NetUserModalsGet_l(struct libnetapi_ctx *ctx,
+			  struct NetUserModalsGet *r);
+NET_API_STATUS NetUserModalsSet(const char * server_name /* [in] */,
+				uint32_t level /* [in] */,
+				uint8_t *buffer /* [in] [ref] */,
+				uint32_t *parm_err /* [out] [ref] */);
+WERROR NetUserModalsSet_r(struct libnetapi_ctx *ctx,
+			  struct NetUserModalsSet *r);
+WERROR NetUserModalsSet_l(struct libnetapi_ctx *ctx,
+			  struct NetUserModalsSet *r);
 NET_API_STATUS NetQueryDisplayInformation(const char * server_name /* [in] [unique] */,
 					  uint32_t level /* [in] */,
 					  uint32_t idx /* [in] */,
diff --git a/source/lib/netapi/netapi.h b/source/lib/netapi/netapi.h
index 9cc8e9e..9b6288d 100644
--- a/source/lib/netapi/netapi.h
+++ b/source/lib/netapi/netapi.h
@@ -75,6 +75,8 @@ struct DOMAIN_CONTROLLER_INFO {
 #define FILTER_WORKSTATION_TRUST_ACCOUNT	( 0x0010 )
 #define FILTER_SERVER_TRUST_ACCOUNT	( 0x0020 )
 
+#define TIMEQ_FOREVER  ( (uint32_t)-1L )
+
 struct SERVER_INFO_1005 {
 	const char * sv1005_comment;
 };
@@ -234,6 +236,58 @@ struct USER_INFO_1007 {
 	const char * usri1007_comment;
 };
 
+struct USER_MODALS_INFO_0 {
+	uint32_t usrmod0_min_passwd_len;
+	uint32_t usrmod0_max_passwd_age;
+	uint32_t usrmod0_min_passwd_age;
+	uint32_t usrmod0_force_logoff;
+	uint32_t usrmod0_password_hist_len;
+};
+
+struct USER_MODALS_INFO_1 {
+	uint32_t usrmod1_role;
+	const char * usrmod1_primary;
+};
+
+struct USER_MODALS_INFO_2 {
+	const char * usrmod2_domain_name;
+	struct domsid *usrmod2_domain_id;/* [unique] */
+};
+
+struct USER_MODALS_INFO_3 {
+	uint32_t usrmod3_lockout_duration;


-- 
Samba Shared Repository


More information about the samba-cvs mailing list