diff options
| author | Matt Barden <matt.barden@nexenta.com> | 2017-10-18 06:58:24 -0400 |
|---|---|---|
| committer | Gordon Ross <gwr@nexenta.com> | 2019-08-10 10:06:00 -0400 |
| commit | ef4cfbfda6599ba454267385722705117460a9c8 (patch) | |
| tree | 36f88aafc7de3926eb62d17ac67af5a6b1ae87d3 /usr/src | |
| parent | 33fc94dcd110f095f791299c5a5fe822e267972e (diff) | |
| download | illumos-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.c | 36 | ||||
| -rw-r--r-- | usr/src/lib/smbsrv/libsmb/common/libsmb.h | 1 | ||||
| -rw-r--r-- | usr/src/lib/smbsrv/libsmb/common/smb_pwdutil.c | 6 |
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; |
