Print this page
NEX-15391 smbadm man page needs updating
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
NEX-15391 smbadm man page needs updating
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
NEX-15041 method to delete local SMB users
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-15041 method to delete local SMB users
Reviewed by: Gordon Ross <gordon.ross@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
SUP-549 Can't remove the Domain Admin from the local administrators group. (fix copyrights)
SUP-549 Can't remove the Domain Admin from the local administrators group.
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Matt Barden <matt.barden@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
NEX-2667 Wrong error when join domain with wrong password
Reviewed by: Kevin Crowe <kevin.crowe@nexenta.com>
Reviewed by: Bayard Bell <bayard.bell@nexenta.com>
NEX-2286 smbadm join error messages are uninformative
NEX-1852 re-enable Kerberos-style AD join (try 2)
SMB-106 Add '-y' flag to 'smbadm join' command
NEX-816 smbadm dumps core during first join attempt
SMB-65 SMB server in non-global zones (data structure changes)
Many things move to the smb_server_t object, and
many functions gain an sv arg (which server).
re #12435 rb3958 r10 is added 2 times to panic info
re #12393 rb3935 Kerberos and smbd disagree about who is our AD server

*** 18,28 **** * * CDDL HEADER END */ /* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. ! * Copyright 2015 Nexenta Systems, Inc. All rights reserved. */ /* * This module contains smbadm CLI which offers smb configuration * functionalities. --- 18,28 ---- * * CDDL HEADER END */ /* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. ! * Copyright 2017 Nexenta Systems, Inc. All rights reserved. */ /* * This module contains smbadm CLI which offers smb configuration * functionalities.
*** 63,73 **** HELP_LOOKUP, HELP_RENAME, HELP_SET, HELP_SHOW, HELP_USER_DISABLE, ! HELP_USER_ENABLE } smbadm_help_t; #define SMBADM_CMDF_NONE 0x00 #define SMBADM_CMDF_USER 0x01 #define SMBADM_CMDF_GROUP 0x02 --- 63,74 ---- HELP_LOOKUP, HELP_RENAME, HELP_SET, HELP_SHOW, HELP_USER_DISABLE, ! HELP_USER_ENABLE, ! HELP_USER_DELETE } smbadm_help_t; #define SMBADM_CMDF_NONE 0x00 #define SMBADM_CMDF_USER 0x01 #define SMBADM_CMDF_GROUP 0x02
*** 116,156 **** static int smbadm_group_setprop(int, char **); static int smbadm_group_addmember(int, char **); static int smbadm_group_delmember(int, char **); static int smbadm_group_add_del_member(char *, char *, smbadm_grp_action_t); static int smbadm_user_disable(int, char **); static int smbadm_user_enable(int, char **); static smbadm_cmdinfo_t smbadm_cmdtable[] = { - { "add-member", smbadm_group_addmember, HELP_ADD_MEMBER, - SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH }, { "create", smbadm_group_create, HELP_CREATE, SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH }, { "delete", smbadm_group_delete, HELP_DELETE, SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH }, { "disable-user", smbadm_user_disable, HELP_USER_DISABLE, SMBADM_CMDF_USER, SMBADM_ACTION_AUTH }, { "enable-user", smbadm_user_enable, HELP_USER_ENABLE, SMBADM_CMDF_USER, SMBADM_ACTION_AUTH }, - { "get", smbadm_group_getprop, HELP_GET, - SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH }, { "join", smbadm_join, HELP_JOIN, SMBADM_CMDF_NONE, SMBADM_VALUE_AUTH }, { "list", smbadm_list, HELP_LIST, SMBADM_CMDF_NONE, SMBADM_BASIC_AUTH }, { "lookup", smbadm_lookup, HELP_LOOKUP, SMBADM_CMDF_NONE, SMBADM_BASIC_AUTH }, - { "remove-member", smbadm_group_delmember, HELP_DEL_MEMBER, - SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH }, - { "rename", smbadm_group_rename, HELP_RENAME, - SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH }, - { "set", smbadm_group_setprop, HELP_SET, - SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH }, - { "show", smbadm_group_show, HELP_SHOW, - SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH }, }; #define SMBADM_NCMD (sizeof (smbadm_cmdtable) / sizeof (smbadm_cmdtable[0])) typedef struct smbadm_prop { --- 117,161 ---- static int smbadm_group_setprop(int, char **); static int smbadm_group_addmember(int, char **); static int smbadm_group_delmember(int, char **); static int smbadm_group_add_del_member(char *, char *, smbadm_grp_action_t); + static int smbadm_user_delete(int, char **); static int smbadm_user_disable(int, char **); static int smbadm_user_enable(int, char **); + /* Please keep the order consistent with smbadm(1M) man page */ static smbadm_cmdinfo_t smbadm_cmdtable[] = { { "create", smbadm_group_create, HELP_CREATE, SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH }, { "delete", smbadm_group_delete, HELP_DELETE, SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH }, + { "rename", smbadm_group_rename, HELP_RENAME, + SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH }, + { "show", smbadm_group_show, HELP_SHOW, + SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH }, + { "get", smbadm_group_getprop, HELP_GET, + SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH }, + { "set", smbadm_group_setprop, HELP_SET, + SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH }, + { "add-member", smbadm_group_addmember, HELP_ADD_MEMBER, + SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH }, + { "remove-member", smbadm_group_delmember, HELP_DEL_MEMBER, + SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH }, + { "delete-user", smbadm_user_delete, HELP_USER_DELETE, + SMBADM_CMDF_USER, SMBADM_ACTION_AUTH }, { "disable-user", smbadm_user_disable, HELP_USER_DISABLE, SMBADM_CMDF_USER, SMBADM_ACTION_AUTH }, { "enable-user", smbadm_user_enable, HELP_USER_ENABLE, SMBADM_CMDF_USER, SMBADM_ACTION_AUTH }, { "join", smbadm_join, HELP_JOIN, SMBADM_CMDF_NONE, SMBADM_VALUE_AUTH }, { "list", smbadm_list, HELP_LIST, SMBADM_CMDF_NONE, SMBADM_BASIC_AUTH }, { "lookup", smbadm_lookup, HELP_LOOKUP, SMBADM_CMDF_NONE, SMBADM_BASIC_AUTH }, }; #define SMBADM_NCMD (sizeof (smbadm_cmdtable) / sizeof (smbadm_cmdtable[0])) typedef struct smbadm_prop {
*** 179,193 **** static int smbadm_getprop_restore(char *gname, smbadm_prop_t *prop); static int smbadm_setprop_desc(char *gname, smbadm_prop_t *prop); static int smbadm_getprop_desc(char *gname, smbadm_prop_t *prop); static smbadm_prop_handle_t smbadm_ptable[] = { ! {"backup", "on | off", smbadm_setprop_backup, smbadm_getprop_backup, smbadm_chkprop_priv }, ! {"restore", "on | off", smbadm_setprop_restore, smbadm_getprop_restore, smbadm_chkprop_priv }, ! {"take-ownership", "on | off", smbadm_setprop_tkowner, smbadm_getprop_tkowner, smbadm_chkprop_priv }, {"description", "<string>", smbadm_setprop_desc, smbadm_getprop_desc, NULL }, }; --- 184,198 ---- static int smbadm_getprop_restore(char *gname, smbadm_prop_t *prop); static int smbadm_setprop_desc(char *gname, smbadm_prop_t *prop); static int smbadm_getprop_desc(char *gname, smbadm_prop_t *prop); static smbadm_prop_handle_t smbadm_ptable[] = { ! {"backup", "on|off", smbadm_setprop_backup, smbadm_getprop_backup, smbadm_chkprop_priv }, ! {"restore", "on|off", smbadm_setprop_restore, smbadm_getprop_restore, smbadm_chkprop_priv }, ! {"take-ownership", "on|off", smbadm_setprop_tkowner, smbadm_getprop_tkowner, smbadm_chkprop_priv }, {"description", "<string>", smbadm_setprop_desc, smbadm_getprop_desc, NULL }, };
*** 204,281 **** smbadm_cmdusage(FILE *fp, smbadm_cmdinfo_t *cmd) { switch (cmd->usage) { case HELP_ADD_MEMBER: (void) fprintf(fp, ! gettext("\t%s -m member [[-m member] ...] group\n"), cmd->name); return; case HELP_CREATE: ! (void) fprintf(fp, gettext("\t%s [-d description] group\n"), cmd->name); return; case HELP_DELETE: ! (void) fprintf(fp, gettext("\t%s group\n"), cmd->name); return; case HELP_USER_DISABLE: case HELP_USER_ENABLE: ! (void) fprintf(fp, gettext("\t%s user\n"), cmd->name); return; case HELP_GET: ! (void) fprintf(fp, gettext("\t%s [[-p property] ...] group\n"), cmd->name); return; case HELP_JOIN: ! #if 0 /* Don't document "-p" yet, still needs work (NX 11960) */ ! (void) fprintf(fp, gettext("\t%s [-y] -p domain\n" ! "\t%s [-y] -u username domain\n\t%s [-y] -w workgroup\n"), cmd->name, cmd->name, cmd->name); #else ! (void) fprintf(fp, gettext("\t%s [-y] -u username domain\n" ! "\t%s [-y] -w workgroup\n"), cmd->name, cmd->name); #endif return; case HELP_LIST: (void) fprintf(fp, gettext("\t%s\n"), cmd->name); - (void) fprintf(fp, - gettext("\t\t[*] primary domain\n")); - (void) fprintf(fp, gettext("\t\t[.] local domain\n")); - (void) fprintf(fp, gettext("\t\t[-] other domains\n")); - (void) fprintf(fp, - gettext("\t\t[+] selected domain controller\n")); return; case HELP_LOOKUP: (void) fprintf(fp, ! gettext("\t%s user-or-group-name\n"), cmd->name); return; case HELP_DEL_MEMBER: (void) fprintf(fp, ! gettext("\t%s -m member [[-m member] ...] group\n"), cmd->name); return; case HELP_RENAME: ! (void) fprintf(fp, gettext("\t%s group new-group\n"), cmd->name); return; case HELP_SET: ! (void) fprintf(fp, gettext("\t%s -p property=value " ! "[[-p property=value] ...] group\n"), cmd->name); return; case HELP_SHOW: ! (void) fprintf(fp, gettext("\t%s [-m] [-p] [group]\n"), cmd->name); return; default: break; --- 209,282 ---- smbadm_cmdusage(FILE *fp, smbadm_cmdinfo_t *cmd) { switch (cmd->usage) { case HELP_ADD_MEMBER: (void) fprintf(fp, ! gettext("\t%s -m <member> [-m <member>]... <group>\n"), cmd->name); return; case HELP_CREATE: ! (void) fprintf(fp, gettext("\t%s [-d <description>] <group>\n"), cmd->name); return; case HELP_DELETE: ! (void) fprintf(fp, gettext("\t%s <group>\n"), cmd->name); return; + case HELP_USER_DELETE: case HELP_USER_DISABLE: case HELP_USER_ENABLE: ! (void) fprintf(fp, gettext("\t%s <username>\n"), cmd->name); return; case HELP_GET: ! (void) fprintf(fp, gettext("\t%s [-p <property>]... <group>\n"), cmd->name); return; case HELP_JOIN: ! #if 0 /* Don't document "-p" yet, still needs work (NEX-11960) */ ! (void) fprintf(fp, gettext("\t%s [-y] -p <domain>\n" ! "\t%s [-y] -u <username domain>\n" ! "\t%s [-y] -w <workgroup>\n"), cmd->name, cmd->name, cmd->name); #else ! (void) fprintf(fp, gettext("\t%s [-y] -u <username> <domain>\n" ! "\t%s [-y] -w <workgroup>\n"), cmd->name, cmd->name); #endif return; case HELP_LIST: (void) fprintf(fp, gettext("\t%s\n"), cmd->name); return; case HELP_LOOKUP: (void) fprintf(fp, ! gettext("\t%s <account-name>\n"), cmd->name); return; case HELP_DEL_MEMBER: (void) fprintf(fp, ! gettext("\t%s -m <member> [-m <member>]... <group>\n"), cmd->name); return; case HELP_RENAME: ! (void) fprintf(fp, gettext("\t%s <group> <new-group>\n"), cmd->name); return; case HELP_SET: ! (void) fprintf(fp, gettext("\t%s -p <property>=<value> " ! "[-p <property>=<value>]... <group>\n"), cmd->name); return; case HELP_SHOW: ! (void) fprintf(fp, gettext("\t%s [-mp] [<group>]\n"), cmd->name); return; default: break;
*** 292,305 **** boolean_t show_props = B_FALSE; int i; if (curcmd == NULL) { (void) fprintf(fp, ! gettext("usage: %s [-h | <command> [options]]\n"), progname); - (void) fprintf(fp, - gettext("where 'command' is one of the following:\n\n")); for (i = 0; i < SMBADM_NCMD; i++) smbadm_cmdusage(fp, &smbadm_cmdtable[i]); (void) fprintf(fp, --- 293,304 ---- boolean_t show_props = B_FALSE; int i; if (curcmd == NULL) { (void) fprintf(fp, ! gettext("usage: %s <subcommand> <args> ...\n"), progname); for (i = 0; i < SMBADM_NCMD; i++) smbadm_cmdusage(fp, &smbadm_cmdtable[i]); (void) fprintf(fp,
*** 1406,1420 **** /* * We are given a SID. Just use it. * * We'e like the real account type if we can get it, * but don't want to error out if we can't get it. */ sidstr = mname; rc = smb_lookup_sid(sidstr, &acct); if ((rc != 0) || (acct.a_status != NT_STATUS_SUCCESS)) ! acct.a_sidtype = SidTypeUnknown; } else { rc = smb_lookup_name(mname, SidTypeUnknown, &acct); if ((rc != 0) || (acct.a_status != NT_STATUS_SUCCESS)) { (void) fprintf(stderr, gettext("%s: name lookup failed\n"), mname); --- 1405,1420 ---- /* * We are given a SID. Just use it. * * We'e like the real account type if we can get it, * but don't want to error out if we can't get it. + * Lacking other info, assume it's a group. */ sidstr = mname; rc = smb_lookup_sid(sidstr, &acct); if ((rc != 0) || (acct.a_status != NT_STATUS_SUCCESS)) ! acct.a_sidtype = SidTypeGroup; } else { rc = smb_lookup_name(mname, SidTypeUnknown, &acct); if ((rc != 0) || (acct.a_status != NT_STATUS_SUCCESS)) { (void) fprintf(stderr, gettext("%s: name lookup failed\n"), mname);
*** 1455,1464 **** --- 1455,1485 ---- return (1); } return (0); } + static int + smbadm_user_delete(int argc, char **argv) + { + int error; + char *user = NULL; + + user = argv[optind]; + if (optind >= argc || user == NULL || *user == '\0') { + (void) fprintf(stderr, gettext("missing user name\n")); + smbadm_usage(B_FALSE); + } + + error = smb_pwd_setcntl(user, SMB_PWC_DELETE); + if (error == SMB_PWE_SUCCESS) + (void) printf(gettext("%s has been deleted.\n"), user); + else + (void) fprintf(stderr, "%s\n", smbadm_pwd_strerror(error)); + + return (error); + } + static int smbadm_user_disable(int argc, char **argv) { int error; char *user = NULL;