summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Styblik <stybla@turnovfree.net>2014-10-17 19:33:37 +0200
committerZdenek Styblik <stybla@turnovfree.net>2014-10-17 19:33:37 +0200
commitdeb9a4ed5d852c4e01c3811f30a521f52bbb2817 (patch)
tree54c0bf1ccd1aa14dec21cb7eeade5cd4112b9047
parent58837647c24d0d21d85094f8bc9863c466c40056 (diff)
downloadipmitool-deb9a4ed5d852c4e01c3811f30a521f52bbb2817.tar.gz
ID#277 - support for hostnames longer than 64 chars
ID#313 ipmitool doesn't support hostname long than 64 symbols ID#277 Minor issue with ipmi_intf_session_set_hostname() Commit adds support pretty much for FQDN not just up to the length of one label. This is achieved by change in in struct ipmi_session; and strdup() of user input. Of course, we have to free() this once we're done.
-rw-r--r--include/ipmitool/ipmi_intf.h3
-rw-r--r--src/plugins/ipmi_intf.c27
-rw-r--r--src/plugins/lan/lan.c7
-rw-r--r--src/plugins/lanplus/lanplus.c8
-rw-r--r--src/plugins/serial/serial_basic.c7
-rw-r--r--src/plugins/serial/serial_terminal.c7
6 files changed, 26 insertions, 33 deletions
diff --git a/include/ipmitool/ipmi_intf.h b/include/ipmitool/ipmi_intf.h
index 437a427..f9f6592 100644
--- a/include/ipmitool/ipmi_intf.h
+++ b/include/ipmitool/ipmi_intf.h
@@ -63,7 +63,7 @@ enum LANPLUS_SESSION_STATE {
#define IPMI_KG_BUFFER_SIZE 21 /* key plus null byte */
struct ipmi_session {
- uint8_t hostname[64];
+ char *hostname; /* Numeric IP adress or DNS name - see RFC 1034/RFC 1035 */
uint8_t username[17];
uint8_t authcode[IPMI_AUTHCODE_BUFFER_SIZE + 1];
uint8_t challenge[16];
@@ -213,6 +213,7 @@ void ipmi_intf_session_set_port(struct ipmi_intf * intf, int port);
void ipmi_intf_session_set_authtype(struct ipmi_intf * intf, uint8_t authtype);
void ipmi_intf_session_set_timeout(struct ipmi_intf * intf, uint32_t timeout);
void ipmi_intf_session_set_retry(struct ipmi_intf * intf, int retry);
+void ipmi_intf_session_cleanup(struct ipmi_intf *intf);
void ipmi_cleanup(struct ipmi_intf * intf);
#if defined(IPMI_INTF_LAN) || defined (IPMI_INTF_LANPLUS)
diff --git a/src/plugins/ipmi_intf.c b/src/plugins/ipmi_intf.c
index 0fa76be..a84237e 100644
--- a/src/plugins/ipmi_intf.c
+++ b/src/plugins/ipmi_intf.c
@@ -194,15 +194,14 @@ struct ipmi_intf * ipmi_intf_load(char * name)
void
ipmi_intf_session_set_hostname(struct ipmi_intf * intf, char * hostname)
{
- if (intf->session == NULL)
+ if (intf->session == NULL || hostname == NULL) {
return;
-
- memset(intf->session->hostname, 0, 16);
-
- if (hostname != NULL) {
- memcpy(intf->session->hostname, hostname,
- __min(strlen(hostname), 64));
}
+ if (intf->session->hostname != NULL) {
+ free(intf->session->hostname);
+ intf->session->hostname = NULL;
+ }
+ intf->session->hostname = strdup(hostname);
}
void
@@ -331,6 +330,20 @@ ipmi_intf_session_set_retry(struct ipmi_intf * intf, int retry)
}
void
+ipmi_intf_session_cleanup(struct ipmi_intf *intf)
+{
+ if (intf->session == NULL) {
+ return;
+ }
+ if (intf->session->hostname != NULL) {
+ free(intf->session->hostname);
+ intf->session->hostname = NULL;
+ }
+ free(intf->session);
+ intf->session = NULL;
+}
+
+void
ipmi_cleanup(struct ipmi_intf * intf)
{
ipmi_sdr_list_empty(intf);
diff --git a/src/plugins/lan/lan.c b/src/plugins/lan/lan.c
index fb1a633..dd90706 100644
--- a/src/plugins/lan/lan.c
+++ b/src/plugins/lan/lan.c
@@ -2005,12 +2005,7 @@ ipmi_lan_close(struct ipmi_intf * intf)
close(intf->fd);
ipmi_req_clear_entries();
-
- if (intf->session != NULL) {
- free(intf->session);
- intf->session = NULL;
- }
-
+ ipmi_intf_session_cleanup(intf);
intf->opened = 0;
intf->manufacturer_id = IPMI_OEM_UNKNOWN;
intf = NULL;
diff --git a/src/plugins/lanplus/lanplus.c b/src/plugins/lanplus/lanplus.c
index 27b9610..0bff5b2 100644
--- a/src/plugins/lanplus/lanplus.c
+++ b/src/plugins/lanplus/lanplus.c
@@ -3291,12 +3291,7 @@ ipmi_lanplus_close(struct ipmi_intf * intf)
close(intf->fd);
ipmi_req_clear_entries();
-
- if (intf->session) {
- free(intf->session);
- intf->session = NULL;
- }
-
+ ipmi_intf_session_cleanup(intf);
intf->session = NULL;
intf->opened = 0;
intf->manufacturer_id = IPMI_OEM_UNKNOWN;
@@ -3367,7 +3362,6 @@ ipmi_lanplus_open(struct ipmi_intf * intf)
return -1;
session = intf->session;
-
if (!session->port)
session->port = IPMI_LANPLUS_PORT;
if (!session->privlvl)
diff --git a/src/plugins/serial/serial_basic.c b/src/plugins/serial/serial_basic.c
index 5f4b926..871593f 100644
--- a/src/plugins/serial/serial_basic.c
+++ b/src/plugins/serial/serial_basic.c
@@ -305,12 +305,7 @@ serial_bm_close(struct ipmi_intf * intf)
close(intf->fd);
intf->fd = -1;
}
-
- if (intf->session) {
- free(intf->session);
- intf->session = NULL;
- }
-
+ ipmi_intf_session_cleanup(intf);
intf->opened = 0;
}
diff --git a/src/plugins/serial/serial_terminal.c b/src/plugins/serial/serial_terminal.c
index 41d3753..34c6fc5 100644
--- a/src/plugins/serial/serial_terminal.c
+++ b/src/plugins/serial/serial_terminal.c
@@ -242,12 +242,7 @@ ipmi_serial_term_close(struct ipmi_intf * intf)
close(intf->fd);
intf->fd = -1;
}
-
- if (intf->session) {
- free(intf->session);
- intf->session = NULL;
- }
-
+ ipmi_intf_session_cleanup(intf);
intf->opened = 0;
}