[stgt] [PATCH] Unbinding a non-existent ACL returns success
Paul Ryan
pajryan at gmail.com
Wed Oct 5 11:52:33 CEST 2011
> Thanks! Looks good improvement.
>
> However, the patch seems to be malformed.
>
> fujita at rose:~/git/tgt$ patch -p1 < ~/1
> patching file usr/mgmt.c
> patch: **** malformed patch at line 64: mgmt_task *mtask)
>
>
> Can you resend the patch in the proper format?
>
Oh, that will teach me for using a different computer. Second try below;
Thanks,
--
This adds support so tgtadm can return an error code and error
message when a non-existent ACL is unbound from a target.
Signed-off-by: Paul Ryan <pajryan at gmail.com>
---
usr/mgmt.c | 6 ++----
usr/target.c | 14 ++++++++++----
usr/tgtadm.c | 1 +
usr/tgtadm_error.h | 1 +
usr/tgtd.h | 4 ++--
5 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/usr/mgmt.c b/usr/mgmt.c
index 82a70e1..af37480 100644
--- a/usr/mgmt.c
+++ b/usr/mgmt.c
@@ -109,14 +109,12 @@ static int target_mgmt(int lld_no, struct
mgmt_task *mtask)
p = strstr(mtask->buf, "initiator-address=");
if (p) {
- err = 0;
- acl_del(req->tid, p + strlen("initiator-address="));
+ err = acl_del(req->tid, p + strlen("initiator-address="));
}
p = strstr(mtask->buf, "initiator-name=");
if (p) {
- err = 0;
- iqn_acl_del(req->tid, p + strlen("initiator-name="));
+ err = iqn_acl_del(req->tid, p + strlen("initiator-name="));
}
}
break;
diff --git a/usr/target.c b/usr/target.c
index 5a8dfa6..83f572c 100644
--- a/usr/target.c
+++ b/usr/target.c
@@ -1482,23 +1482,26 @@ int acl_add(int tid, char *address)
return 0;
}
-void acl_del(int tid, char *address)
+int acl_del(int tid, char *address)
{
struct target *target;
struct acl_entry *acl, *tmp;
+ int err = TGTADM_ACL_NOEXIST;
target = target_lookup(tid);
if (!target)
- return;
+ return TGTADM_NO_TARGET;
list_for_each_entry_safe(acl, tmp, &target->acl_list, aclent_list) {
if (!strcmp(address, acl->address)) {
list_del(&acl->aclent_list);
free(acl->address);
free(acl);
+ err = 0;
break;
}
}
+ return err;
}
char *acl_get(int tid, int idx)
@@ -1549,23 +1552,26 @@ int iqn_acl_add(int tid, char *name)
return 0;
}
-void iqn_acl_del(int tid, char *name)
+int iqn_acl_del(int tid, char *name)
{
struct target *target;
struct iqn_acl_entry *iqn_acl, *tmp;
+ int err = TGTADM_ACL_NOEXIST;
target = target_lookup(tid);
if (!target)
- return;
+ return TGTADM_NO_TARGET;
list_for_each_entry_safe(iqn_acl, tmp, &target->iqn_acl_list,
iqn_aclent_list) {
if (!strcmp(name, iqn_acl->name)) {
list_del(&iqn_acl->iqn_aclent_list);
free(iqn_acl->name);
free(iqn_acl);
+ err = 0;
break;
}
}
+ return err;
}
char *iqn_acl_get(int tid, int idx)
diff --git a/usr/tgtadm.c b/usr/tgtadm.c
index 5e107a4..b2b1aa3 100644
--- a/usr/tgtadm.c
+++ b/usr/tgtadm.c
@@ -66,6 +66,7 @@ static const char * tgtadm_strerror(int err)
{ TGTADM_TARGET_EXIST, "this target already exists" },
{ TGTADM_LUN_EXIST, "this logical unit number already exists" },
{ TGTADM_ACL_EXIST, "this access control rule already exists" },
+ { TGTADM_ACL_NOEXIST, "this access control rule does not exist" },
{ TGTADM_USER_EXIST, "this account already exists" },
{ TGTADM_NO_USER, "can't find the account" },
{ TGTADM_TOO_MANY_USER, "too many accounts" },
diff --git a/usr/tgtadm_error.h b/usr/tgtadm_error.h
index 319a4ad..4cd8f81 100644
--- a/usr/tgtadm_error.h
+++ b/usr/tgtadm_error.h
@@ -15,6 +15,7 @@ enum tgtadm_errno {
TGTADM_LUN_EXIST,
TGTADM_ACL_EXIST,
+ TGTADM_ACL_NOEXIST,
TGTADM_USER_EXIST,
TGTADM_NO_USER,
TGTADM_TOO_MANY_USER,
diff --git a/usr/tgtd.h b/usr/tgtd.h
index 93e6049..86198c8 100644
--- a/usr/tgtd.h
+++ b/usr/tgtd.h
@@ -285,11 +285,11 @@ extern enum scsi_target_state
tgt_get_target_state(int tid);
extern int tgt_set_target_state(int tid, char *str);
extern int acl_add(int tid, char *address);
-extern void acl_del(int tid, char *address);
+extern int acl_del(int tid, char *address);
extern char *acl_get(int tid, int idx);
extern int iqn_acl_add(int tid, char *name);
-extern void iqn_acl_del(int tid, char *name);
+extern int iqn_acl_del(int tid, char *name);
extern char *iqn_acl_get(int tid, int idx);
extern int account_lookup(int tid, int type, char *user, int ulen,
char *password, int plen);
--
1.7.4.1
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
More information about the stgt
mailing list