* Set a user's data
*/
-static int net_sam_userset(int argc, const char **argv, const char *field,
+static int net_sam_userset(struct net_context *c, int argc, const char **argv,
+ const char *field,
bool (*fn)(struct samu *, const char *,
enum pdb_value_state))
{
const char *dom, *name;
NTSTATUS status;
- if (argc != 2) {
+ if (argc != 2 || c->display_usage) {
d_fprintf(stderr, "usage: net sam set %s <user> <value>\n",
field);
return -1;
return 0;
}
-static int net_sam_set_fullname(int argc, const char **argv)
+static int net_sam_set_fullname(struct net_context *c, int argc,
+ const char **argv)
{
- return net_sam_userset(argc, argv, "fullname",
+ return net_sam_userset(c, argc, argv, "fullname",
pdb_set_fullname);
}
-static int net_sam_set_logonscript(int argc, const char **argv)
+static int net_sam_set_logonscript(struct net_context *c, int argc,
+ const char **argv)
{
- return net_sam_userset(argc, argv, "logonscript",
+ return net_sam_userset(c, argc, argv, "logonscript",
pdb_set_logon_script);
}
-static int net_sam_set_profilepath(int argc, const char **argv)
+static int net_sam_set_profilepath(struct net_context *c, int argc,
+ const char **argv)
{
- return net_sam_userset(argc, argv, "profilepath",
+ return net_sam_userset(c, argc, argv, "profilepath",
pdb_set_profile_path);
}
-static int net_sam_set_homedrive(int argc, const char **argv)
+static int net_sam_set_homedrive(struct net_context *c, int argc,
+ const char **argv)
{
- return net_sam_userset(argc, argv, "homedrive",
+ return net_sam_userset(c, argc, argv, "homedrive",
pdb_set_dir_drive);
}
-static int net_sam_set_homedir(int argc, const char **argv)
+static int net_sam_set_homedir(struct net_context *c, int argc,
+ const char **argv)
{
- return net_sam_userset(argc, argv, "homedir",
+ return net_sam_userset(c, argc, argv, "homedir",
pdb_set_homedir);
}
-static int net_sam_set_workstations(int argc, const char **argv)
+static int net_sam_set_workstations(struct net_context *c, int argc,
+ const char **argv)
{
- return net_sam_userset(argc, argv, "workstations",
+ return net_sam_userset(c, argc, argv, "workstations",
pdb_set_workstations);
}
* Set account flags
*/
-static int net_sam_set_userflag(int argc, const char **argv, const char *field,
+static int net_sam_set_userflag(struct net_context *c, int argc,
+ const char **argv, const char *field,
uint16 flag)
{
struct samu *sam_acct = NULL;
NTSTATUS status;
uint16 acct_flags;
- if ((argc != 2) || (!strequal(argv[1], "yes") &&
- !strequal(argv[1], "no"))) {
+ if ((argc != 2) || c->display_usage ||
+ (!strequal(argv[1], "yes") &&
+ !strequal(argv[1], "no"))) {
d_fprintf(stderr, "usage: net sam set %s <user> [yes|no]\n",
field);
return -1;
return 0;
}
-static int net_sam_set_disabled(int argc, const char **argv)
+static int net_sam_set_disabled(struct net_context *c, int argc,
+ const char **argv)
{
- return net_sam_set_userflag(argc, argv, "disabled", ACB_DISABLED);
+ return net_sam_set_userflag(c, argc, argv, "disabled", ACB_DISABLED);
}
-static int net_sam_set_pwnotreq(int argc, const char **argv)
+static int net_sam_set_pwnotreq(struct net_context *c, int argc,
+ const char **argv)
{
- return net_sam_set_userflag(argc, argv, "pwnotreq", ACB_PWNOTREQ);
+ return net_sam_set_userflag(c, argc, argv, "pwnotreq", ACB_PWNOTREQ);
}
-static int net_sam_set_autolock(int argc, const char **argv)
+static int net_sam_set_autolock(struct net_context *c, int argc,
+ const char **argv)
{
- return net_sam_set_userflag(argc, argv, "autolock", ACB_AUTOLOCK);
+ return net_sam_set_userflag(c, argc, argv, "autolock", ACB_AUTOLOCK);
}
-static int net_sam_set_pwnoexp(int argc, const char **argv)
+static int net_sam_set_pwnoexp(struct net_context *c, int argc,
+ const char **argv)
{
- return net_sam_set_userflag(argc, argv, "pwnoexp", ACB_PWNOEXP);
+ return net_sam_set_userflag(c, argc, argv, "pwnoexp", ACB_PWNOEXP);
}
/*
* Set pass last change time, based on force pass change now
*/
-static int net_sam_set_pwdmustchangenow(int argc, const char **argv)
+static int net_sam_set_pwdmustchangenow(struct net_context *c, int argc,
+ const char **argv)
{
struct samu *sam_acct = NULL;
DOM_SID sid;
const char *dom, *name;
NTSTATUS status;
- if ((argc != 2) || (!strequal(argv[1], "yes") &&
- !strequal(argv[1], "no"))) {
+ if ((argc != 2) || c->display_usage ||
+ (!strequal(argv[1], "yes") &&
+ !strequal(argv[1], "no"))) {
d_fprintf(stderr, "usage: net sam set pwdmustchangenow <user> [yes|no]\n");
return -1;
}
* Set a user's or a group's comment
*/
-static int net_sam_set_comment(int argc, const char **argv)
+static int net_sam_set_comment(struct net_context *c, int argc,
+ const char **argv)
{
GROUP_MAP map;
DOM_SID sid;
const char *dom, *name;
NTSTATUS status;
- if (argc != 2) {
+ if (argc != 2 || c->display_usage) {
d_fprintf(stderr, "usage: net sam set comment <name> "
"<comment>\n");
return -1;
}
if (type == SID_NAME_USER) {
- return net_sam_userset(argc, argv, "comment",
+ return net_sam_userset(c, argc, argv, "comment",
pdb_set_acct_desc);
}
return 0;
}
-static int net_sam_set(int argc, const char **argv)
+static int net_sam_set(struct net_context *c, int argc, const char **argv)
{
- struct functable2 func[] = {
- { "homedir", net_sam_set_homedir,
- "Change a user's home directory" },
- { "profilepath", net_sam_set_profilepath,
- "Change a user's profile path" },
- { "comment", net_sam_set_comment,
- "Change a users or groups description" },
- { "fullname", net_sam_set_fullname,
- "Change a user's full name" },
- { "logonscript", net_sam_set_logonscript,
- "Change a user's logon script" },
- { "homedrive", net_sam_set_homedrive,
- "Change a user's home drive" },
- { "workstations", net_sam_set_workstations,
- "Change a user's allowed workstations" },
- { "disabled", net_sam_set_disabled,
- "Disable/Enable a user" },
- { "pwnotreq", net_sam_set_pwnotreq,
- "Disable/Enable the password not required flag" },
- { "autolock", net_sam_set_autolock,
- "Disable/Enable a user's lockout flag" },
- { "pwnoexp", net_sam_set_pwnoexp,
- "Disable/Enable whether a user's pw does not expire" },
- { "pwdmustchangenow", net_sam_set_pwdmustchangenow,
- "Force users password must change at next logon" },
- {NULL, NULL}
+ struct functable func[] = {
+ {
+ "homedir",
+ net_sam_set_homedir,
+ NET_TRANSPORT_LOCAL,
+ "Change a user's home directory",
+ "net sam set homedir\n"
+ " Change a user's home directory"
+ },
+ {
+ "profilepath",
+ net_sam_set_profilepath,
+ NET_TRANSPORT_LOCAL,
+ "Change a user's profile path",
+ "net sam set profilepath\n"
+ " Change a user's profile path"
+ },
+ {
+ "comment",
+ net_sam_set_comment,
+ NET_TRANSPORT_LOCAL,
+ "Change a users or groups description",
+ "net sam set comment\n"
+ " Change a users or groups description"
+ },
+ {
+ "fullname",
+ net_sam_set_fullname,
+ NET_TRANSPORT_LOCAL,
+ "Change a user's full name",
+ "net sam set fullname\n"
+ " Change a user's full name"
+ },
+ {
+ "logonscript",
+ net_sam_set_logonscript,
+ NET_TRANSPORT_LOCAL,
+ "Change a user's logon script",
+ "net sam set logonscript\n"
+ " Change a user's logon script"
+ },
+ {
+ "homedrive",
+ net_sam_set_homedrive,
+ NET_TRANSPORT_LOCAL,
+ "Change a user's home drive",
+ "net sam set homedrive\n"
+ " Change a user's home drive"
+ },
+ {
+ "workstations",
+ net_sam_set_workstations,
+ NET_TRANSPORT_LOCAL,
+ "Change a user's allowed workstations",
+ "net sam set workstations\n"
+ " Change a user's allowed workstations"
+ },
+ {
+ "disabled",
+ net_sam_set_disabled,
+ NET_TRANSPORT_LOCAL,
+ "Disable/Enable a user",
+ "net sam set disable\n"
+ " Disable/Enable a user"
+ },
+ {
+ "pwnotreq",
+ net_sam_set_pwnotreq,
+ NET_TRANSPORT_LOCAL,
+ "Disable/Enable the password not required flag",
+ "net sam set pwnotreq\n"
+ " Disable/Enable the password not required flag"
+ },
+ {
+ "autolock",
+ net_sam_set_autolock,
+ NET_TRANSPORT_LOCAL,
+ "Disable/Enable a user's lockout flag",
+ "net sam set autolock\n"
+ " Disable/Enable a user's lockout flag"
+ },
+ {
+ "pwnoexp",
+ net_sam_set_pwnoexp,
+ NET_TRANSPORT_LOCAL,
+ "Disable/Enable whether a user's pw does not expire",
+ "net sam set pwnoexp\n"
+ " Disable/Enable whether a user's pw does not expire"
+ },
+ {
+ "pwdmustchangenow",
+ net_sam_set_pwdmustchangenow,
+ NET_TRANSPORT_LOCAL,
+ "Force users password must change at next logon",
+ "net sam set pwdmustchangenow\n"
+ " Force users password must change at next logon"
+ },
+ {NULL, NULL, 0, NULL, NULL}
};
- return net_run_function2(argc, argv, "net sam set", func);
+ return net_run_function(c, argc, argv, "net sam set", func);
}
/*
* Manage account policies
*/
-static int net_sam_policy_set(int argc, const char **argv)
+static int net_sam_policy_set(struct net_context *c, int argc, const char **argv)
{
const char *account_policy = NULL;
uint32 value = 0;
int field;
char *endptr;
- if (argc != 2) {
+ if (argc != 2 || c->display_usage) {
d_fprintf(stderr, "usage: net sam policy set "
"\"<account policy>\" <value> \n");
return -1;
return 0;
}
-static int net_sam_policy_show(int argc, const char **argv)
+static int net_sam_policy_show(struct net_context *c, int argc, const char **argv)
{
const char *account_policy = NULL;
uint32 old_value;
int field;
- if (argc != 1) {
+ if (argc != 1 || c->display_usage) {
d_fprintf(stderr, "usage: net sam policy show"
" \"<account policy>\" \n");
return -1;
}
-
+
account_policy = argv[0];
field = account_policy_name_to_fieldnum(account_policy);
"fetch value!\n");
return -1;
}
-
+
printf("Account policy \"%s\" description: %s\n",
account_policy, account_policy_get_desc(field));
printf("Account policy \"%s\" value is: %d\n", account_policy,
return 0;
}
-static int net_sam_policy_list(int argc, const char **argv)
+static int net_sam_policy_list(struct net_context *c, int argc, const char **argv)
{
const char **names;
int count;
int i;
+
+ if (c->display_usage) {
+ d_printf("Usage:\n"
+ "net sam policy list\n"
+ " List account policies\n");
+ return 0;
+ }
+
account_policy_names_list(&names, &count);
if (count != 0) {
d_fprintf(stderr, "Valid account policies "
return -1;
}
-static int net_sam_policy(int argc, const char **argv)
+static int net_sam_policy(struct net_context *c, int argc, const char **argv)
{
- struct functable2 func[] = {
- { "list", net_sam_policy_list,
- "List account policies" },
- { "show", net_sam_policy_show,
- "Show account policies" },
- { "set", net_sam_policy_set,
- "Change account policies" },
- {NULL, NULL}
+ struct functable func[] = {
+ {
+ "list",
+ net_sam_policy_list,
+ NET_TRANSPORT_LOCAL,
+ "List account policies",
+ "net sam policy list\n"
+ " List account policies"
+ },
+ {
+ "show",
+ net_sam_policy_show,
+ NET_TRANSPORT_LOCAL,
+ "Show account policies",
+ "net sam policy show\n"
+ " Show account policies"
+ },
+ {
+ "set",
+ net_sam_policy_set,
+ NET_TRANSPORT_LOCAL,
+ "Change account policies",
+ "net sam policy set\n"
+ " Change account policies"
+ },
+ {NULL, NULL, 0, NULL, NULL}
};
- return net_run_function2(argc, argv, "net sam policy", func);
+ return net_run_function(c, argc, argv, "net sam policy", func);
}
extern PRIVS privs[];
-static int net_sam_rights_list(int argc, const char **argv)
+static int net_sam_rights_list(struct net_context *c, int argc,
+ const char **argv)
{
SE_PRIV mask;
- if (argc > 1) {
+ if (argc > 1 || c->display_usage) {
d_fprintf(stderr, "usage: net sam rights list [privilege name]\n");
return -1;
}
return -1;
}
-static int net_sam_rights_grant(int argc, const char **argv)
+static int net_sam_rights_grant(struct net_context *c, int argc,
+ const char **argv)
{
DOM_SID sid;
enum lsa_SidType type;
const char *dom, *name;
SE_PRIV mask;
- if (argc != 2) {
+ if (argc != 2 || c->display_usage) {
d_fprintf(stderr, "usage: net sam rights grant <name> "
"<right>\n");
return -1;
return 0;
}
-static int net_sam_rights_revoke(int argc, const char **argv)
+static int net_sam_rights_revoke(struct net_context *c, int argc, const char **argv)
{
DOM_SID sid;
enum lsa_SidType type;
const char *dom, *name;
SE_PRIV mask;
- if (argc != 2) {
+ if (argc != 2 || c->display_usage) {
d_fprintf(stderr, "usage: net sam rights revoke <name> "
"<right>\n");
return -1;
return 0;
}
-static int net_sam_rights(int argc, const char **argv)
+static int net_sam_rights(struct net_context *c, int argc, const char **argv)
{
- struct functable2 func[] = {
- { "list", net_sam_rights_list,
- "List possible user rights" },
- { "grant", net_sam_rights_grant,
- "Grant a right" },
- { "revoke", net_sam_rights_revoke,
- "Revoke a right" },
- { NULL }
+ struct functable func[] = {
+ {
+ "list",
+ net_sam_rights_list,
+ NET_TRANSPORT_LOCAL,
+ "List possible user rights",
+ "net sam rights list\n"
+ " List possible user rights"
+ },
+ {
+ "grant",
+ net_sam_rights_grant,
+ NET_TRANSPORT_LOCAL,
+ "Grant a right",
+ "net sam rights grant\n"
+ " Grant a right"
+ },
+ {
+ "revoke",
+ net_sam_rights_revoke,
+ NET_TRANSPORT_LOCAL,
+ "Revoke a right",
+ "net sam rights revoke\n"
+ " Revoke a right"
+ },
+ {NULL, NULL, 0, NULL, NULL}
};
- return net_run_function2(argc, argv, "net sam rights", func);
+ return net_run_function(c, argc, argv, "net sam rights", func);
}
/*
return status;
}
-static int net_sam_mapunixgroup(int argc, const char **argv)
+static int net_sam_mapunixgroup(struct net_context *c, int argc, const char **argv)
{
NTSTATUS status;
GROUP_MAP map;
struct group *grp;
- if (argc != 1) {
+ if (argc != 1 || c->display_usage) {
d_fprintf(stderr, "usage: net sam mapunixgroup <name>\n");
return -1;
}
return status;
}
-static int net_sam_unmapunixgroup(int argc, const char **argv)
+static int net_sam_unmapunixgroup(struct net_context *c, int argc, const char **argv)
{
NTSTATUS status;
GROUP_MAP map;
struct group *grp;
- if (argc != 1) {
+ if (argc != 1 || c->display_usage) {
d_fprintf(stderr, "usage: net sam unmapunixgroup <name>\n");
return -1;
}
* Create a local group
*/
-static int net_sam_createlocalgroup(int argc, const char **argv)
+static int net_sam_createlocalgroup(struct net_context *c, int argc, const char **argv)
{
NTSTATUS status;
uint32 rid;
- if (argc != 1) {
+ if (argc != 1 || c->display_usage) {
d_fprintf(stderr, "usage: net sam createlocalgroup <name>\n");
return -1;
}
* Delete a local group
*/
-static int net_sam_deletelocalgroup(int argc, const char **argv)
+static int net_sam_deletelocalgroup(struct net_context *c, int argc, const char **argv)
{
DOM_SID sid;
enum lsa_SidType type;
const char *dom, *name;
NTSTATUS status;
- if (argc != 1) {
+ if (argc != 1 || c->display_usage) {
d_fprintf(stderr, "usage: net sam deletelocalgroup <name>\n");
return -1;
}
}
/*
- * Create a local group
+ * Create a builtin group
*/
-static int net_sam_createbuiltingroup(int argc, const char **argv)
+static int net_sam_createbuiltingroup(struct net_context *c, int argc, const char **argv)
{
NTSTATUS status;
uint32 rid;
fstring groupname;
DOM_SID sid;
- if (argc != 1) {
+ if (argc != 1 || c->display_usage) {
d_fprintf(stderr, "usage: net sam createbuiltingroup <name>\n");
return -1;
}
if (!winbind_ping()) {
- d_fprintf(stderr, "winbind seems not to run. createlocalgroup "
+ d_fprintf(stderr, "winbind seems not to run. createbuiltingroup "
"only works when winbind runs.\n");
return -1;
}
/* validate the name and get the group */
-
+
fstrcpy( groupname, "BUILTIN\\" );
fstrcat( groupname, argv[0] );
-
+
if ( !lookup_name(talloc_tos(), groupname, LOOKUP_NAME_ALL, NULL,
NULL, &sid, &type)) {
d_fprintf(stderr, "%s is not a BUILTIN group\n", argv[0]);
return -1;
}
-
+
if ( !sid_peek_rid( &sid, &rid ) ) {
d_fprintf(stderr, "Failed to get RID for %s\n", argv[0]);
return -1;
* Add a group member
*/
-static int net_sam_addmem(int argc, const char **argv)
+static int net_sam_addmem(struct net_context *c, int argc, const char **argv)
{
const char *groupdomain, *groupname, *memberdomain, *membername;
DOM_SID group, member;
enum lsa_SidType grouptype, membertype;
NTSTATUS status;
- if (argc != 2) {
+ if (argc != 2 || c->display_usage) {
d_fprintf(stderr, "usage: net sam addmem <group> <member>\n");
return -1;
}
}
if ( !lookup_sid(talloc_tos(), &member, &memberdomain,
- &membername, &membertype) )
+ &membername, &membertype) )
{
d_fprintf(stderr, "Could not resolve SID %s\n", argv[1]);
return -1;
return -1;
}
- d_printf("Added %s\\%s to %s\\%s\n", memberdomain, membername,
+ d_printf("Added %s\\%s to %s\\%s\n", memberdomain, membername,
groupdomain, groupname);
return 0;
* Delete a group member
*/
-static int net_sam_delmem(int argc, const char **argv)
+static int net_sam_delmem(struct net_context *c, int argc, const char **argv)
{
const char *groupdomain, *groupname;
const char *memberdomain = NULL;
enum lsa_SidType grouptype;
NTSTATUS status;
- if (argc != 2) {
+ if (argc != 2 || c->display_usage) {
d_fprintf(stderr, "usage: net sam delmem <group> <member>\n");
return -1;
}
* List group members
*/
-static int net_sam_listmem(int argc, const char **argv)
+static int net_sam_listmem(struct net_context *c, int argc, const char **argv)
{
const char *groupdomain, *groupname;
DOM_SID group;
enum lsa_SidType grouptype;
NTSTATUS status;
- if (argc != 1) {
+ if (argc != 1 || c->display_usage) {
d_fprintf(stderr, "usage: net sam listmem <group>\n");
return -1;
}
(grouptype == SID_NAME_WKN_GRP)) {
DOM_SID *members = NULL;
size_t i, num_members = 0;
-
+
status = pdb_enum_aliasmem(&group, &members, &num_members);
if (!NT_STATUS_IS_OK(status)) {
/*
* Do the listing
*/
-static int net_sam_do_list(int argc, const char **argv,
+static int net_sam_do_list(struct net_context *c, int argc, const char **argv,
struct pdb_search *search, const char *what)
{
bool verbose = (argc == 1);
- if ((argc > 1) ||
+ if ((argc > 1) || c->display_usage ||
((argc == 1) && !strequal(argv[0], "verbose"))) {
d_fprintf(stderr, "usage: net sam list %s [verbose]\n", what);
return -1;
return -1;
}
- while (True) {
+ while (true) {
struct samr_displayentry entry;
if (!search->next_entry(search, &entry)) {
break;
}
}
- pdb_search_destroy(search);
+ TALLOC_FREE(search);
return 0;
}
-static int net_sam_list_users(int argc, const char **argv)
+static int net_sam_list_users(struct net_context *c, int argc,
+ const char **argv)
{
- return net_sam_do_list(argc, argv, pdb_search_users(ACB_NORMAL),
+ return net_sam_do_list(c, argc, argv,
+ pdb_search_users(talloc_tos(), ACB_NORMAL),
"users");
}
-static int net_sam_list_groups(int argc, const char **argv)
+static int net_sam_list_groups(struct net_context *c, int argc,
+ const char **argv)
{
- return net_sam_do_list(argc, argv, pdb_search_groups(), "groups");
+ return net_sam_do_list(c, argc, argv, pdb_search_groups(talloc_tos()),
+ "groups");
}
-static int net_sam_list_localgroups(int argc, const char **argv)
+static int net_sam_list_localgroups(struct net_context *c, int argc,
+ const char **argv)
{
- return net_sam_do_list(argc, argv,
- pdb_search_aliases(get_global_sam_sid()),
+ return net_sam_do_list(c, argc, argv,
+ pdb_search_aliases(talloc_tos(),
+ get_global_sam_sid()),
"localgroups");
}
-static int net_sam_list_builtin(int argc, const char **argv)
+static int net_sam_list_builtin(struct net_context *c, int argc,
+ const char **argv)
{
- return net_sam_do_list(argc, argv,
- pdb_search_aliases(&global_sid_Builtin),
+ return net_sam_do_list(c, argc, argv,
+ pdb_search_aliases(talloc_tos(),
+ &global_sid_Builtin),
"builtin");
}
-static int net_sam_list_workstations(int argc, const char **argv)
+static int net_sam_list_workstations(struct net_context *c, int argc,
+ const char **argv)
{
- return net_sam_do_list(argc, argv,
- pdb_search_users(ACB_WSTRUST),
+ return net_sam_do_list(c, argc, argv,
+ pdb_search_users(talloc_tos(), ACB_WSTRUST),
"workstations");
}
* List stuff
*/
-static int net_sam_list(int argc, const char **argv)
+static int net_sam_list(struct net_context *c, int argc, const char **argv)
{
- struct functable2 func[] = {
- { "users", net_sam_list_users,
- "List SAM users" },
- { "groups", net_sam_list_groups,
- "List SAM groups" },
- { "localgroups", net_sam_list_localgroups,
- "List SAM local groups" },
- { "builtin", net_sam_list_builtin,
- "List builtin groups" },
- { "workstations", net_sam_list_workstations,
- "List domain member workstations" },
- {NULL, NULL}
+ struct functable func[] = {
+ {
+ "users",
+ net_sam_list_users,
+ NET_TRANSPORT_LOCAL,
+ "List SAM users",
+ "net sam list users\n"
+ " List SAM users"
+ },
+ {
+ "groups",
+ net_sam_list_groups,
+ NET_TRANSPORT_LOCAL,
+ "List SAM groups",
+ "net sam list groups\n"
+ " List SAM groups"
+ },
+ {
+ "localgroups",
+ net_sam_list_localgroups,
+ NET_TRANSPORT_LOCAL,
+ "List SAM local groups",
+ "net sam list localgroups\n"
+ " List SAM local groups"
+ },
+ {
+ "builtin",
+ net_sam_list_builtin,
+ NET_TRANSPORT_LOCAL,
+ "List builtin groups",
+ "net sam list builtin\n"
+ " List builtin groups"
+ },
+ {
+ "workstations",
+ net_sam_list_workstations,
+ NET_TRANSPORT_LOCAL,
+ "List domain member workstations",
+ "net sam list workstations\n"
+ " List domain member workstations"
+ },
+ {NULL, NULL, 0, NULL, NULL}
};
- return net_run_function2(argc, argv, "net sam list", func);
+ return net_run_function(c, argc, argv, "net sam list", func);
}
/*
* Show details of SAM entries
*/
-static int net_sam_show(int argc, const char **argv)
+static int net_sam_show(struct net_context *c, int argc, const char **argv)
{
DOM_SID sid;
enum lsa_SidType type;
const char *dom, *name;
- if (argc != 1) {
+ if (argc != 1 || c->display_usage) {
d_fprintf(stderr, "usage: net sam show <name>\n");
return -1;
}
* if ldapsam:editposix is enabled
*/
-static int net_sam_provision(int argc, const char **argv)
+static int net_sam_provision(struct net_context *c, int argc, const char **argv)
{
TALLOC_CTX *tc;
char *ldap_bk;
struct samu *samuser;
struct passwd *pwd;
+ if (c->display_usage) {
+ d_printf("Usage:\n"
+ "net sam provision\n"
+ " Init an LDAP tree with default users/groups\n");
+ return 0;
+ }
+
tc = talloc_new(NULL);
if (!tc) {
d_fprintf(stderr, "Out of Memory!\n");
goto failed;
}
- if (!lp_parm_bool(-1, "ldapsam", "trusted", False) ||
- !lp_parm_bool(-1, "ldapsam", "editposix", False)) {
+ if (!lp_parm_bool(-1, "ldapsam", "trusted", false) ||
+ !lp_parm_bool(-1, "ldapsam", "editposix", false)) {
d_fprintf(stderr, "Provisioning works only if ldapsam:trusted"
" and ldapsam:editposix are enabled.\n");
uname = talloc_strdup(tc, "domusers");
wname = talloc_strdup(tc, "Domain Users");
dn = talloc_asprintf(tc, "cn=%s,%s", "domusers", lp_ldap_group_suffix());
- gidstr = talloc_asprintf(tc, "%d", domusers_gid);
+ gidstr = talloc_asprintf(tc, "%u", (unsigned int)domusers_gid);
gtype = talloc_asprintf(tc, "%d", SID_NAME_DOM_GRP);
if (!uname || !wname || !dn || !gidstr || !gtype) {
goto failed;
}
- smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectclass", LDAP_OBJ_POSIXGROUP);
+ smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_POSIXGROUP);
smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_GROUPMAP);
smbldap_set_mod(&mods, LDAP_MOD_ADD, "cn", uname);
smbldap_set_mod(&mods, LDAP_MOD_ADD, "displayName", wname);
uname = talloc_strdup(tc, "domadmins");
wname = talloc_strdup(tc, "Domain Admins");
dn = talloc_asprintf(tc, "cn=%s,%s", "domadmins", lp_ldap_group_suffix());
- gidstr = talloc_asprintf(tc, "%d", domadmins_gid);
+ gidstr = talloc_asprintf(tc, "%u", (unsigned int)domadmins_gid);
gtype = talloc_asprintf(tc, "%d", SID_NAME_DOM_GRP);
if (!uname || !wname || !dn || !gidstr || !gtype) {
goto failed;
}
- smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectclass", LDAP_OBJ_POSIXGROUP);
+ smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_POSIXGROUP);
smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_GROUPMAP);
smbldap_set_mod(&mods, LDAP_MOD_ADD, "cn", uname);
smbldap_set_mod(&mods, LDAP_MOD_ADD, "displayName", wname);
}
name = talloc_strdup(tc, "Administrator");
dn = talloc_asprintf(tc, "uid=Administrator,%s", lp_ldap_user_suffix());
- uidstr = talloc_asprintf(tc, "%d", uid);
- gidstr = talloc_asprintf(tc, "%d", domadmins_gid);
+ uidstr = talloc_asprintf(tc, "%u", (unsigned int)uid);
+ gidstr = talloc_asprintf(tc, "%u", (unsigned int)domadmins_gid);
dir = talloc_sub_specified(tc, lp_template_homedir(),
"Administrator",
get_global_sam_name(),
sid_compose(&sid, get_global_sam_sid(), DOMAIN_USER_RID_GUEST);
dn = talloc_asprintf(tc, "uid=%s,%s", pwd->pw_name, lp_ldap_user_suffix ());
- uidstr = talloc_asprintf(tc, "%d", pwd->pw_uid);
- gidstr = talloc_asprintf(tc, "%d", pwd->pw_gid);
+ uidstr = talloc_asprintf(tc, "%u", (unsigned int)pwd->pw_uid);
+ gidstr = talloc_asprintf(tc, "%u", (unsigned int)pwd->pw_gid);
if (!dn || !uidstr || !gidstr) {
d_fprintf(stderr, "Out of Memory!\n");
goto failed;
d_printf("Checking Guest's group.\n");
- pwd = getpwnam_alloc(NULL, lp_guestaccount());
+ pwd = getpwnam_alloc(talloc_autofree_context(), lp_guestaccount());
if (!pwd) {
d_fprintf(stderr, "Failed to find just created Guest account!\n"
" Is nss properly configured?!\n");
uname = talloc_strdup(tc, "domguests");
wname = talloc_strdup(tc, "Domain Guests");
dn = talloc_asprintf(tc, "cn=%s,%s", "domguests", lp_ldap_group_suffix());
- gidstr = talloc_asprintf(tc, "%d", pwd->pw_gid);
+ gidstr = talloc_asprintf(tc, "%u", (unsigned int)pwd->pw_gid);
gtype = talloc_asprintf(tc, "%d", SID_NAME_DOM_GRP);
if (!uname || !wname || !dn || !gidstr || !gtype) {
sid_compose(&gsid, get_global_sam_sid(), DOMAIN_GROUP_RID_GUESTS);
- smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectclass", LDAP_OBJ_POSIXGROUP);
+ smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_POSIXGROUP);
smbldap_set_mod(&mods, LDAP_MOD_ADD, "objectClass", LDAP_OBJ_GROUPMAP);
smbldap_set_mod(&mods, LDAP_MOD_ADD, "cn", uname);
smbldap_set_mod(&mods, LDAP_MOD_ADD, "displayName", wname);
/***********************************************************
migrated functionality from smbgroupedit
**********************************************************/
-int net_sam(int argc, const char **argv)
+int net_sam(struct net_context *c, int argc, const char **argv)
{
- struct functable2 func[] = {
- { "createbuiltingroup", net_sam_createbuiltingroup,
- "Create a new BUILTIN group" },
- { "createlocalgroup", net_sam_createlocalgroup,
- "Create a new local group" },
- { "deletelocalgroup", net_sam_deletelocalgroup,
- "Delete an existing local group" },
- { "mapunixgroup", net_sam_mapunixgroup,
- "Map a unix group to a domain group" },
- { "unmapunixgroup", net_sam_unmapunixgroup,
- "Remove a group mapping of an unix group to a domain group" },
- { "addmem", net_sam_addmem,
- "Add a member to a group" },
- { "delmem", net_sam_delmem,
- "Delete a member from a group" },
- { "listmem", net_sam_listmem,
- "List group members" },
- { "list", net_sam_list,
- "List users, groups and local groups" },
- { "show", net_sam_show,
- "Show details of a SAM entry" },
- { "set", net_sam_set,
- "Set details of a SAM account" },
- { "policy", net_sam_policy,
- "Set account policies" },
- { "rights", net_sam_rights,
- "Manipulate user privileges" },
+ struct functable func[] = {
+ {
+ "createbuiltingroup",
+ net_sam_createbuiltingroup,
+ NET_TRANSPORT_LOCAL,
+ "Create a new BUILTIN group",
+ "net sam createbuiltingroup\n"
+ " Create a new BUILTIN group"
+ },
+ {
+ "createlocalgroup",
+ net_sam_createlocalgroup,
+ NET_TRANSPORT_LOCAL,
+ "Create a new local group",
+ "net sam createlocalgroup\n"
+ " Create a new local group"
+ },
+ {
+ "deletelocalgroup",
+ net_sam_deletelocalgroup,
+ NET_TRANSPORT_LOCAL,
+ "Delete an existing local group",
+ "net sam deletelocalgroup\n"
+ " Delete an existing local group"
+ },
+ {
+ "mapunixgroup",
+ net_sam_mapunixgroup,
+ NET_TRANSPORT_LOCAL,
+ "Map a unix group to a domain group",
+ "net sam mapunixgroup\n"
+ " Map a unix group to a domain group"
+ },
+ {
+ "unmapunixgroup",
+ net_sam_unmapunixgroup,
+ NET_TRANSPORT_LOCAL,
+ "Remove a group mapping of an unix group to a domain "
+ "group",
+ "net sam unmapunixgroup\n"
+ " Remove a group mapping of an unix group to a "
+ "domain group"
+ },
+ {
+ "addmem",
+ net_sam_addmem,
+ NET_TRANSPORT_LOCAL,
+ "Add a member to a group",
+ "net sam addmem\n"
+ " Add a member to a group"
+ },
+ {
+ "delmem",
+ net_sam_delmem,
+ NET_TRANSPORT_LOCAL,
+ "Delete a member from a group",
+ "net sam delmem\n"
+ " Delete a member from a group"
+ },
+ {
+ "listmem",
+ net_sam_listmem,
+ NET_TRANSPORT_LOCAL,
+ "List group members",
+ "net sam listmem\n"
+ " List group members"
+ },
+ {
+ "list",
+ net_sam_list,
+ NET_TRANSPORT_LOCAL,
+ "List users, groups and local groups",
+ "net sam list\n"
+ " List users, groups and local groups"
+ },
+ {
+ "show",
+ net_sam_show,
+ NET_TRANSPORT_LOCAL,
+ "Show details of a SAM entry",
+ "net sam show\n"
+ " Show details of a SAM entry"
+ },
+ {
+ "set",
+ net_sam_set,
+ NET_TRANSPORT_LOCAL,
+ "Set details of a SAM account",
+ "net sam set\n"
+ " Set details of a SAM account"
+ },
+ {
+ "policy",
+ net_sam_policy,
+ NET_TRANSPORT_LOCAL,
+ "Set account policies",
+ "net sam policy\n"
+ " Set account policies"
+ },
+ {
+ "rights",
+ net_sam_rights,
+ NET_TRANSPORT_LOCAL,
+ "Manipulate user privileges",
+ "net sam rights\n"
+ " Manipulate user privileges"
+ },
#ifdef HAVE_LDAP
- { "provision", net_sam_provision,
- "Provision a clean User Database" },
+ {
+ "provision",
+ net_sam_provision,
+ NET_TRANSPORT_LOCAL,
+ "Provision a clean user database",
+ "net sam privison\n"
+ " Provision a clear user database"
+ },
#endif
- { NULL, NULL, NULL }
+ {NULL, NULL, 0, NULL, NULL}
};
if (getuid() != 0) {
d_fprintf(stderr, "You are not root, most things won't "
"work\n");
}
-
- return net_run_function2(argc, argv, "net sam", func);
+
+ return net_run_function(c, argc, argv, "net sam", func);
}