summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorMatt Barden <matt.barden@nexenta.com>2017-10-18 06:58:24 -0400
committerGordon Ross <gwr@nexenta.com>2019-08-10 10:06:00 -0400
commitef4cfbfda6599ba454267385722705117460a9c8 (patch)
tree36f88aafc7de3926eb62d17ac67af5a6b1ae87d3 /usr/src
parent33fc94dcd110f095f791299c5a5fe822e267972e (diff)
downloadillumos-gate-ef4cfbfda6599ba454267385722705117460a9c8.tar.gz
11027 method to delete local SMB users
Reviewed by: Gordon Ross <gordon.ross@nexenta.com> Reviewed by: Evan Layton <evan.layton@nexenta.com> Approved by: Garrett D'Amore <garrett@damore.org>
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/cmd/smbsrv/smbadm/smbadm.c36
-rw-r--r--usr/src/lib/smbsrv/libsmb/common/libsmb.h1
-rw-r--r--usr/src/lib/smbsrv/libsmb/common/smb_pwdutil.c6
3 files changed, 38 insertions, 5 deletions
diff --git a/usr/src/cmd/smbsrv/smbadm/smbadm.c b/usr/src/cmd/smbsrv/smbadm/smbadm.c
index f1c1fa800f..0b4072c0e5 100644
--- a/usr/src/cmd/smbsrv/smbadm/smbadm.c
+++ b/usr/src/cmd/smbsrv/smbadm/smbadm.c
@@ -20,7 +20,7 @@
*/
/*
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2016 Nexenta Systems, Inc. All rights reserved.
+ * Copyright 2017 Nexenta Systems, Inc. All rights reserved.
*/
/*
@@ -65,7 +65,8 @@ typedef enum {
HELP_SET,
HELP_SHOW,
HELP_USER_DISABLE,
- HELP_USER_ENABLE
+ HELP_USER_ENABLE,
+ HELP_USER_DELETE
} smbadm_help_t;
#define SMBADM_CMDF_NONE 0x00
@@ -118,6 +119,7 @@ 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 **);
@@ -129,6 +131,8 @@ static smbadm_cmdinfo_t smbadm_cmdtable[] =
SMBADM_CMDF_GROUP, SMBADM_ACTION_AUTH },
{ "delete", smbadm_group_delete, HELP_DELETE,
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,
@@ -181,8 +185,8 @@ 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 },
+ {"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,
@@ -219,6 +223,7 @@ smbadm_cmdusage(FILE *fp, smbadm_cmdinfo_t *cmd)
(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 user\n"), cmd->name);
@@ -1394,7 +1399,7 @@ smbadm_group_delmember(int argc, char **argv)
static int
smbadm_group_add_del_member(char *gname, char *mname,
- smbadm_grp_action_t act)
+ smbadm_grp_action_t act)
{
lsa_account_t acct;
smb_gsid_t msid;
@@ -1459,6 +1464,27 @@ smbadm_group_add_del_member(char *gname, char *mname,
}
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;
diff --git a/usr/src/lib/smbsrv/libsmb/common/libsmb.h b/usr/src/lib/smbsrv/libsmb/common/libsmb.h
index 8d6eb04683..b9357d1e49 100644
--- a/usr/src/lib/smbsrv/libsmb/common/libsmb.h
+++ b/usr/src/lib/smbsrv/libsmb/common/libsmb.h
@@ -457,6 +457,7 @@ typedef struct smb_passwd {
#define SMB_PWC_DISABLE 0x01
#define SMB_PWC_ENABLE 0x02
#define SMB_PWC_NOLM 0x04
+#define SMB_PWC_DELETE 0x08
#define SMB_PWE_SUCCESS 0
#define SMB_PWE_USER_UNKNOWN 1
diff --git a/usr/src/lib/smbsrv/libsmb/common/smb_pwdutil.c b/usr/src/lib/smbsrv/libsmb/common/smb_pwdutil.c
index 9b9e06ccea..00abc51e4d 100644
--- a/usr/src/lib/smbsrv/libsmb/common/smb_pwdutil.c
+++ b/usr/src/lib/smbsrv/libsmb/common/smb_pwdutil.c
@@ -524,6 +524,12 @@ smb_pwd_update(const char *name, const char *password, int control)
*/
while (smb_pwd_fgetent(src, &pwbuf, SMB_PWD_GETF_ALL) != NULL) {
if (strcmp(smbpw.pw_name, name) == 0) {
+ if ((control & SMB_PWC_DELETE) != 0) {
+ /* exclude the entry from the new passwd file */
+ newent = B_FALSE;
+ err = SMB_PWE_SUCCESS;
+ continue;
+ }
err = smb_pwd_chgpwent(&smbpw, password, control);
if (err == SMB_PWE_USER_DISABLE)
user_disable = B_TRUE;