summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/cmd/iscsi/iscsitadm/main.c4
-rw-r--r--usr/src/cmd/iscsi/iscsitgtd/isns_client.c10
-rw-r--r--usr/src/cmd/iscsi/iscsitgtd/mgmt_modify.c13
-rw-r--r--usr/src/cmd/iscsi/iscsitgtd/mgmt_remove.c14
-rw-r--r--usr/src/lib/libiscsitgt/common/iscsitgt_impl.h3
5 files changed, 31 insertions, 13 deletions
diff --git a/usr/src/cmd/iscsi/iscsitadm/main.c b/usr/src/cmd/iscsi/iscsitadm/main.c
index f279a0a1ea..a9fde81567 100644
--- a/usr/src/cmd/iscsi/iscsitadm/main.c
+++ b/usr/src/cmd/iscsi/iscsitadm/main.c
@@ -24,8 +24,6 @@
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
-
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
@@ -1332,7 +1330,7 @@ listTpgt(int operandLen, char *operand[], cmdOptions_t *options)
(void) printf("%s: %s\n", gettext("TPGT"), n1->x_value);
n2 = NULL;
addrs = 0;
- while (n2 = tgt_node_next_child(n1, XML_ELEMENT_IPADDR, n2)) {
+ while (n2 = tgt_node_next(n1, XML_ELEMENT_IPADDR, n2)) {
if (verbose == True)
(void) printf("%s%s: %s\n", dospace(1),
gettext("IP Address"),
diff --git a/usr/src/cmd/iscsi/iscsitgtd/isns_client.c b/usr/src/cmd/iscsi/iscsitgtd/isns_client.c
index 6be8ff4074..1e5e3c6596 100644
--- a/usr/src/cmd/iscsi/iscsitgtd/isns_client.c
+++ b/usr/src/cmd/iscsi/iscsitgtd/isns_client.c
@@ -144,7 +144,7 @@ append_tpgt(tgt_node_t *tgt, isns_pdu_t *cmd)
{
tgt_node_t *t, *x;
tgt_node_t *pgt = NULL;
- tgt_node_t *ip = NULL;
+ tgt_node_t *iplist = NULL;
tgt_node_t *tpgt = NULL;
ip_t eid;
@@ -172,11 +172,11 @@ append_tpgt(tgt_node_t *tgt, isns_pdu_t *cmd)
XML_ELEMENT_TPGT, tpgt)) != NULL) {
if (strcmp(pgt->x_value, tpgt->x_value) != 0)
continue;
- if ((ip = tgt_node_next(tpgt,
- XML_ELEMENT_IPADDR, NULL)) != NULL)
+ if ((iplist = tgt_node_next(tpgt,
+ XML_ELEMENT_IPADDRLIST, NULL)) != NULL)
break;
}
- if (tpgt == NULL || ip == NULL)
+ if (tpgt == NULL || iplist == NULL)
continue;
if (isns_append_attr(cmd, ISNS_PG_TAG_ATTR_ID,
ISNS_PG_TAG_SZ, NULL,
@@ -185,7 +185,7 @@ append_tpgt(tgt_node_t *tgt, isns_pdu_t *cmd)
}
/* get ip-addr & port */
- for (x = tpgt->x_child; x; x = x->x_sibling) {
+ for (x = iplist->x_child; x; x = x->x_sibling) {
if (get_ip_addr(x->x_value, &eid) < 0)
continue;
if (isns_append_attr(cmd,
diff --git a/usr/src/cmd/iscsi/iscsitgtd/mgmt_modify.c b/usr/src/cmd/iscsi/iscsitgtd/mgmt_modify.c
index c2d4bb6edb..13705daba9 100644
--- a/usr/src/cmd/iscsi/iscsitgtd/mgmt_modify.c
+++ b/usr/src/cmd/iscsi/iscsitgtd/mgmt_modify.c
@@ -679,6 +679,7 @@ modify_tpgt(tgt_node_t *x)
char *name = NULL;
char *ip_str = NULL;
tgt_node_t *tnode = NULL;
+ tgt_node_t *list = NULL;
(void) pthread_rwlock_wrlock(&targ_config_mutex);
if (tgt_find_value_str(x, XML_ELEMENT_NAME, &name) == False) {
@@ -702,7 +703,17 @@ modify_tpgt(tgt_node_t *x)
xml_rtn_msg(&msg, ERR_TPGT_NOT_FOUND);
goto error;
}
- if (modify_element(XML_ELEMENT_IPADDR, ip_str, tnode, MatchBoth) ==
+
+ if ((list = tgt_node_next(tnode, XML_ELEMENT_IPADDRLIST, NULL))
+ == NULL) {
+ list = tgt_node_alloc(XML_ELEMENT_IPADDRLIST, String, "");
+ if (list == NULL) {
+ xml_rtn_msg(&msg, ERR_NO_MEM);
+ goto error;
+ }
+ tgt_node_add(tnode, list);
+ }
+ if (modify_element(XML_ELEMENT_IPADDR, ip_str, list, MatchBoth) ==
False) {
xml_rtn_msg(&msg, ERR_NO_MEM);
goto error;
diff --git a/usr/src/cmd/iscsi/iscsitgtd/mgmt_remove.c b/usr/src/cmd/iscsi/iscsitgtd/mgmt_remove.c
index 6454e91581..4f223ae00d 100644
--- a/usr/src/cmd/iscsi/iscsitgtd/mgmt_remove.c
+++ b/usr/src/cmd/iscsi/iscsitgtd/mgmt_remove.c
@@ -332,7 +332,7 @@ remove_target(tgt_node_t *x, ucred_t *cred)
}
if ((list = tgt_node_next(targ, XML_ELEMENT_TPGTLIST, NULL)) ==
NULL) {
- xml_rtn_msg(&msg, ERR_ACL_NOT_FOUND);
+ xml_rtn_msg(&msg, ERR_TPGT_NOT_FOUND);
goto error;
}
c = tgt_node_alloc(XML_ELEMENT_TPGT, String, prop);
@@ -448,6 +448,7 @@ remove_initiator(tgt_node_t *x)
xml_rtn_msg(&msg, ERR_INTERNAL_ERROR);
}
+ free(name);
(void) pthread_rwlock_unlock(&targ_config_mutex);
return (msg);
}
@@ -462,6 +463,7 @@ remove_tpgt(tgt_node_t *x)
tgt_node_t *lnp = NULL;
tgt_node_t *node = NULL;
tgt_node_t *c = NULL;
+ tgt_node_t *list = NULL;
Boolean_t change_made = False;
(void) pthread_rwlock_wrlock(&targ_config_mutex);
@@ -504,19 +506,27 @@ remove_tpgt(tgt_node_t *x)
(void) pthread_rwlock_unlock(&targ_config_mutex);
return (msg);
}
+ if ((list = tgt_node_next(node, XML_ELEMENT_IPADDRLIST, NULL))
+ == NULL) {
+ xml_rtn_msg(&msg, ERR_TPGT_NO_IPADDR);
+ goto error;
+ }
c = tgt_node_alloc(XML_ELEMENT_IPADDR, String, prop);
- if (tgt_node_remove(node, c, MatchBoth) == False) {
+ if (tgt_node_remove(list, c, MatchBoth) == False) {
xml_rtn_msg(&msg, ERR_INVALID_IP);
goto error;
}
tgt_node_free(c);
free(prop);
+ if (list->x_child == NULL)
+ (void) tgt_node_remove(node, list, MatchName);
change_made = True;
}
if ((change_made != True) &&
(tgt_find_value_str(x, XML_ELEMENT_ALL, &prop) == True)) {
tgt_node_remove(main_config, node, MatchBoth);
change_made = True;
+ free(prop);
}
if (change_made == True) {
diff --git a/usr/src/lib/libiscsitgt/common/iscsitgt_impl.h b/usr/src/lib/libiscsitgt/common/iscsitgt_impl.h
index 8c221b8a9e..32ac928189 100644
--- a/usr/src/lib/libiscsitgt/common/iscsitgt_impl.h
+++ b/usr/src/lib/libiscsitgt/common/iscsitgt_impl.h
@@ -27,8 +27,6 @@
#ifndef _ISCSITGT_IMPL_H
#define _ISCSITGT_IMPL_H
-#pragma ident "%Z%%M% %I% %E% SMI"
-
/*
* Block comment which describes the contents of this file.
*/
@@ -106,6 +104,7 @@ typedef enum {
#define XML_ELEMENT_INAME "iscsi-name"
#define XML_ELEMENT_MAXRECV "maxrecv"
#define XML_ELEMENT_IPADDR "ip-address"
+#define XML_ELEMENT_IPADDRLIST "ip-address-list"
#define XML_ELEMENT_ALL "all"
#define XML_ELEMENT_VERBOSE "verbose"
#define XML_ELEMENT_LIST "list"