diff options
author | Zdenek Styblik <stybla@turnovfree.net> | 2015-03-11 19:41:34 +0100 |
---|---|---|
committer | Zdenek Styblik <stybla@turnovfree.net> | 2015-03-11 19:41:34 +0100 |
commit | eb54136775f63a6a159f3c55ee4772d7aa363cc4 (patch) | |
tree | da4c45775bbf5143e5e1e9ec093b826c152ad557 /lib/ipmi_tsol.c | |
parent | 9caa78be38f2bdf1f3c03571f0c7310a1cb486b7 (diff) | |
download | ipmitool-eb54136775f63a6a159f3c55ee4772d7aa363cc4.tar.gz |
ID:319 - Interface safe re-open
Currently, interface-management code in the ipmitool does not allow safe
interface re-opening (i.e. closing and opening again). It is because the session
is allocated in the interface setup callback while is freed in the close
callback. So, normal re-opening of the interface, which can be required for
example durng the HPM.1 upgrade, leads to segmentation fault. That's why in the
ipmi_hpmfwupg.c instead of normal closing interface, directly access the
interface data for subsequent re-opening.
Commit for Dmitry Bazhenov
Diffstat (limited to 'lib/ipmi_tsol.c')
-rw-r--r-- | lib/ipmi_tsol.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/lib/ipmi_tsol.c b/lib/ipmi_tsol.c index d7460bd..70d7357 100644 --- a/lib/ipmi_tsol.c +++ b/lib/ipmi_tsol.c @@ -185,12 +185,12 @@ print_escape_seq(struct ipmi_intf *intf) " %c? - this message\n" " %c%c - send the escape character by typing it twice\n" " (Note that escapes are only recognized immediately after newline.)", - intf->session->sol_escape_char, - intf->session->sol_escape_char, - intf->session->sol_escape_char, - intf->session->sol_escape_char, - intf->session->sol_escape_char, - intf->session->sol_escape_char); + intf->ssn_params.sol_escape_char, + intf->ssn_params.sol_escape_char, + intf->ssn_params.sol_escape_char, + intf->ssn_params.sol_escape_char, + intf->ssn_params.sol_escape_char, + intf->ssn_params.sol_escape_char); } static int @@ -264,7 +264,7 @@ do_inbuf_actions(struct ipmi_intf *intf, char *in_buff, int len) for(i = 0; i < len ;) { if (!in_esc) { if (last_was_cr && - (in_buff[i] == intf->session->sol_escape_char)) { + (in_buff[i] == intf->ssn_params.sol_escape_char)) { in_esc = 1; memmove(in_buff, in_buff + 1, len - i - 1); len--; @@ -272,7 +272,7 @@ do_inbuf_actions(struct ipmi_intf *intf, char *in_buff, int len) } } if (in_esc) { - if (in_buff[i] == intf->session->sol_escape_char) { + if (in_buff[i] == intf->ssn_params.sol_escape_char) { in_esc = 0; i++; continue; @@ -281,23 +281,23 @@ do_inbuf_actions(struct ipmi_intf *intf, char *in_buff, int len) switch (in_buff[i]) { case '.': printf("%c. [terminated ipmitool]\n", - intf->session->sol_escape_char); + intf->ssn_params.sol_escape_char); return -1; case 'Z' - 64: printf("%c^Z [suspend ipmitool]\n", - intf->session->sol_escape_char); + intf->ssn_params.sol_escape_char); /* Restore tty back to raw */ suspend_self(1); break; case 'X' - 64: printf("%c^X [suspend ipmitool]\n", - intf->session->sol_escape_char); + intf->ssn_params.sol_escape_char); /* Don't restore to raw mode */ suspend_self(0); break; case '?': printf("%c? [ipmitool help]\n", - intf->session->sol_escape_char); + intf->ssn_params.sol_escape_char); print_escape_seq(intf); break; } @@ -425,20 +425,20 @@ ipmi_tsol_main(struct ipmi_intf *intf, int argc, char **argv) sin.sin_port = htons(port); sa_in = (struct sockaddr_in *)&intf->session->addr; - result = inet_pton(AF_INET, (const char *)intf->session->hostname, + result = inet_pton(AF_INET, (const char *)intf->ssn_params.hostname, &sa_in->sin_addr); if (result <= 0) { - struct hostent *host = gethostbyname((const char *)intf->session->hostname); + struct hostent *host = gethostbyname((const char *)intf->ssn_params.hostname); if (host == NULL ) { lprintf(LOG_ERR, "Address lookup for %s failed", - intf->session->hostname); + intf->ssn_params.hostname); return -1; } if (host->h_addrtype != AF_INET) { lprintf(LOG_ERR, "Address lookup for %s failed. Got %s, expected IPv4 address.", - intf->session->hostname, + intf->ssn_params.hostname, (host->h_addrtype == AF_INET6) ? "IPv6" : "Unknown"); return (-1); } @@ -501,7 +501,7 @@ ipmi_tsol_main(struct ipmi_intf *intf, int argc, char **argv) } printf("[SOL Session operational. Use %c? for help]\n", - intf->session->sol_escape_char); + intf->ssn_params.sol_escape_char); gettimeofday(&_start_keepalive, 0); |