multipath: make reservation_key print out correctly
Benjamin Marzinski
maintainerPATCH v2 1/1 multipath: make reservation_key print out correctly
This patch fixes the reservation_key print functions, so they print it out like it was in the configuration file. Also, it keeps cli_getprstatus() from writing over random memory.
Signed-off-by Benjamin Marzinski <[email protected]>
--- libmultipath/dict.c | 31 +++++++++++++++++++++++++++++-- multipathd/cli_handlers.c | 2 +- 2 files changed, 30 insertions(+), 3 deletions(-)
libmultipath/dict.c +29 -2
@@ -2052,8 +2052,22 @@ snprint_mp_prio_args(char * buff, int lestatic int snprint_mp_reservation_key (char * buff,int len,void * data) { +int i; +unsigned char *keyp; +uint64_t prkey =0 ;struct mpentry * mpe = (struct mpentry *)data; -return snprintf (buff, len,"%s" , mpe->reservation_key); + +if (!mpe->reservation_key) +return 0 ; + keyp = (unsigned char *)mpe->reservation_key; +for (i =0 ; i <8 ; i++) { +if (i >0 ) + prkey <<=8 ; + prkey |= *keyp; + keyp++; + } + +return snprintf (buff, len,"0x%" PRIx64, prkey); } static int
@@ -2721,7 +2735,20 @@ snprint_def_wwids_file (char * buff, intstatic int snprint_def_reservation_key (char * buff,int len,void * data) { -return snprintf (buff, len,"%s" , conf->reservation_key); +int i; +unsigned char *keyp; +uint64_t prkey =0 ; + +if (!conf->reservation_key) +return 0 ; + keyp = (unsigned char *)conf->reservation_key; +for (i =0 ; i <8 ; i++) { +if (i >0 ) + prkey <<=8 ; + prkey |= *keyp; + keyp++; + } +return snprintf (buff, len,"0x%" PRIx64, prkey); } static int
multipathd/cli_handlers.c +1 -1
@@ -947,7 +947,7 @@ cli_getprstatus (void * v, char ** replysprintf (*reply,"%d" ,mpp->prflag); - *reply[1 ]='\0' ; + (*reply)[1 ]='\0' ;condlog (3 ,"%s: reply = %s" , param, *reply);