Add argument passing to callback. Callback program is called with ipv4 or ipv6 address as unsigned int parameters. For ipv4, initiator address from sin_addr.s_addr is sent as an unsigned int argument. For example, when 10.0.0.1 is the initiator, the callback program "/usr/local/bin/redirect" is called as /usr/local/bin/redirect 16777226 For ipv6, sin6_addr->s6_addr32[0] thru sin6_addr->s6_addr32[3] are sent as four unisgned int arguments. Signed-Off-By: Chandra Seetharaman <sekharan at us.ibm.com> --- usr/iscsi/target.c | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) Index: tgt-1.0.8/usr/iscsi/target.c =================================================================== --- tgt-1.0.8.orig/usr/iscsi/target.c +++ tgt-1.0.8/usr/iscsi/target.c @@ -197,12 +197,28 @@ int target_redirected(struct iscsi_targe socklen_t len; int ret, rsn; char *p, *q, *str, *port, *addr; - char buffer[NI_MAXHOST + NI_MAXSERV + 4]; + char buffer[NI_MAXHOST + NI_MAXSERV + 4], in_buf[1024]; + + len = sizeof(from); + ret = conn->tp->ep_getpeername(conn, (struct sockaddr *)&from, &len); + if (ret < 0) + return 0; if (target->redirect_info.callback) { + p = in_buf; + p += sprintf(p, "%s ", target->redirect_info.callback); + if (((struct sockaddr *)&from)->sa_family == AF_INET) + sprintf(p, " %u", (((struct sockaddr_in *) + &from)->sin_addr.s_addr)); + else { + struct in6_addr *a1 = &((struct sockaddr_in6 *) + &from)->sin6_addr; + sprintf(p, " %u %u %u %u", a1->s6_addr32[0], + a1->s6_addr32[1], a1->s6_addr32[2], + a1->s6_addr32[3]); + } bzero(buffer, NI_MAXHOST + NI_MAXSERV + 4); - ret = call_program(target->redirect_info.callback, - buffer, NI_MAXHOST + NI_MAXSERV + 4); + ret = call_program(in_buf, buffer, NI_MAXHOST + NI_MAXSERV + 4); if (ret) goto predefined; @@ -241,11 +257,6 @@ process: rsn != ISCSI_LOGIN_STATUS_TGT_MOVED_PERM) return 0; - len = sizeof(from); - ret = conn->tp->ep_getpeername(conn, (struct sockaddr *)&from, &len); - if (ret < 0) - return 0; - p = strdup(addr); if (!p) return 0; -- 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 |