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.
This commit is contained in:
Zdenek Styblik 2014-10-17 19:33:37 +02:00
parent 58837647c2
commit deb9a4ed5d
6 changed files with 26 additions and 33 deletions

View File

@ -63,7 +63,7 @@ enum LANPLUS_SESSION_STATE {
#define IPMI_KG_BUFFER_SIZE 21 /* key plus null byte */ #define IPMI_KG_BUFFER_SIZE 21 /* key plus null byte */
struct ipmi_session { 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 username[17];
uint8_t authcode[IPMI_AUTHCODE_BUFFER_SIZE + 1]; uint8_t authcode[IPMI_AUTHCODE_BUFFER_SIZE + 1];
uint8_t challenge[16]; 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_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_timeout(struct ipmi_intf * intf, uint32_t timeout);
void ipmi_intf_session_set_retry(struct ipmi_intf * intf, int retry); 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); void ipmi_cleanup(struct ipmi_intf * intf);
#if defined(IPMI_INTF_LAN) || defined (IPMI_INTF_LANPLUS) #if defined(IPMI_INTF_LAN) || defined (IPMI_INTF_LANPLUS)

View File

@ -194,15 +194,14 @@ struct ipmi_intf * ipmi_intf_load(char * name)
void void
ipmi_intf_session_set_hostname(struct ipmi_intf * intf, char * hostname) ipmi_intf_session_set_hostname(struct ipmi_intf * intf, char * hostname)
{ {
if (intf->session == NULL) if (intf->session == NULL || hostname == NULL) {
return; 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 void
@ -330,6 +329,20 @@ ipmi_intf_session_set_retry(struct ipmi_intf * intf, int retry)
intf->session->retry = retry; intf->session->retry = 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 void
ipmi_cleanup(struct ipmi_intf * intf) ipmi_cleanup(struct ipmi_intf * intf)
{ {

View File

@ -2005,12 +2005,7 @@ ipmi_lan_close(struct ipmi_intf * intf)
close(intf->fd); close(intf->fd);
ipmi_req_clear_entries(); ipmi_req_clear_entries();
ipmi_intf_session_cleanup(intf);
if (intf->session != NULL) {
free(intf->session);
intf->session = NULL;
}
intf->opened = 0; intf->opened = 0;
intf->manufacturer_id = IPMI_OEM_UNKNOWN; intf->manufacturer_id = IPMI_OEM_UNKNOWN;
intf = NULL; intf = NULL;

View File

@ -3291,12 +3291,7 @@ ipmi_lanplus_close(struct ipmi_intf * intf)
close(intf->fd); close(intf->fd);
ipmi_req_clear_entries(); ipmi_req_clear_entries();
ipmi_intf_session_cleanup(intf);
if (intf->session) {
free(intf->session);
intf->session = NULL;
}
intf->session = NULL; intf->session = NULL;
intf->opened = 0; intf->opened = 0;
intf->manufacturer_id = IPMI_OEM_UNKNOWN; intf->manufacturer_id = IPMI_OEM_UNKNOWN;
@ -3367,7 +3362,6 @@ ipmi_lanplus_open(struct ipmi_intf * intf)
return -1; return -1;
session = intf->session; session = intf->session;
if (!session->port) if (!session->port)
session->port = IPMI_LANPLUS_PORT; session->port = IPMI_LANPLUS_PORT;
if (!session->privlvl) if (!session->privlvl)

View File

@ -305,12 +305,7 @@ serial_bm_close(struct ipmi_intf * intf)
close(intf->fd); close(intf->fd);
intf->fd = -1; intf->fd = -1;
} }
ipmi_intf_session_cleanup(intf);
if (intf->session) {
free(intf->session);
intf->session = NULL;
}
intf->opened = 0; intf->opened = 0;
} }

View File

@ -242,12 +242,7 @@ ipmi_serial_term_close(struct ipmi_intf * intf)
close(intf->fd); close(intf->fd);
intf->fd = -1; intf->fd = -1;
} }
ipmi_intf_session_cleanup(intf);
if (intf->session) {
free(intf->session);
intf->session = NULL;
}
intf->opened = 0; intf->opened = 0;
} }