aboutsummaryrefslogtreecommitdiff
path: root/src/lib/rpc
diff options
context:
space:
mode:
authorKen Raeburn <raeburn@mit.edu>2007-07-12 23:33:25 +0000
committerKen Raeburn <raeburn@mit.edu>2007-07-12 23:33:25 +0000
commit52571d9201c7bef4dc5ebdf14a41db1f7baddc8e (patch)
tree9f108e05e8881ea19954b4959fdca96d47daa615 /src/lib/rpc
parent57913ccc175061dd41e98914d50eda56dd9685c0 (diff)
downloadkrb5-52571d9201c7bef4dc5ebdf14a41db1f7baddc8e.zip
krb5-52571d9201c7bef4dc5ebdf14a41db1f7baddc8e.tar.gz
krb5-52571d9201c7bef4dc5ebdf14a41db1f7baddc8e.tar.bz2
Avoid use of unchecked sprintf in libraries. Use asprintf if the
output buffer is allocated according to the size of data to be written, or snprintf otherwise. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@19703 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/rpc')
-rw-r--r--src/lib/rpc/clnt_perror.c55
1 files changed, 30 insertions, 25 deletions
diff --git a/src/lib/rpc/clnt_perror.c b/src/lib/rpc/clnt_perror.c
index 85935a8..0a52885 100644
--- a/src/lib/rpc/clnt_perror.c
+++ b/src/lib/rpc/clnt_perror.c
@@ -81,9 +81,11 @@ clnt_sperror(CLIENT *rpch, char *s)
char *bufstart = get_buf();
char *str = bufstart;
char *strstart = str;
+ char *strend;
if (str == 0)
return (0);
+ strend = str + BUFSIZ;
CLNT_GETERR(rpch, &e);
strncpy (str, s, BUFSIZ - 1);
@@ -113,19 +115,19 @@ clnt_sperror(CLIENT *rpch, char *s)
case RPC_CANTSEND:
case RPC_CANTRECV:
/* 10 for the string */
- if(str - bufstart + 10 + strlen(strerror(e.re_errno)) < BUFSIZ)
- (void) sprintf(str, "; errno = %s",
- strerror(e.re_errno));
+ if (str - bufstart + 10 + strlen(strerror(e.re_errno)) < BUFSIZ)
+ (void) snprintf(str, strend-str, "; errno = %s",
+ strerror(e.re_errno));
str += strlen(str);
break;
case RPC_VERSMISMATCH:
/* 33 for the string, 22 for the numbers */
if(str - bufstart + 33 + 22 < BUFSIZ)
- (void) sprintf(str,
- "; low version = %lu, high version = %lu",
- (u_long) e.re_vers.low,
- (u_long) e.re_vers.high);
+ (void) snprintf(str, strend-str,
+ "; low version = %lu, high version = %lu",
+ (u_long) e.re_vers.low,
+ (u_long) e.re_vers.high);
str += strlen(str);
break;
@@ -133,17 +135,17 @@ clnt_sperror(CLIENT *rpch, char *s)
err = auth_errmsg(e.re_why);
/* 8 for the string */
if(str - bufstart + 8 < BUFSIZ)
- (void) sprintf(str,"; why = ");
+ (void) snprintf(str, strend-str, "; why = ");
str += strlen(str);
if (err != NULL) {
if(str - bufstart + strlen(err) < BUFSIZ)
- (void) sprintf(str, "%s",err);
+ (void) snprintf(str, strend-str, "%s",err);
} else {
/* 33 for the string, 11 for the number */
if(str - bufstart + 33 + 11 < BUFSIZ)
- (void) sprintf(str,
- "(unknown authentication error - %d)",
- (int) e.re_why);
+ (void) snprintf(str, strend-str,
+ "(unknown authentication error - %d)",
+ (int) e.re_why);
}
str += strlen(str);
break;
@@ -151,25 +153,25 @@ clnt_sperror(CLIENT *rpch, char *s)
case RPC_PROGVERSMISMATCH:
/* 33 for the string, 22 for the numbers */
if(str - bufstart + 33 + 22 < BUFSIZ)
- (void) sprintf(str,
- "; low version = %lu, high version = %lu",
- (u_long) e.re_vers.low,
- (u_long) e.re_vers.high);
+ (void) snprintf(str, strend-str,
+ "; low version = %lu, high version = %lu",
+ (u_long) e.re_vers.low,
+ (u_long) e.re_vers.high);
str += strlen(str);
break;
default: /* unknown */
/* 14 for the string, 22 for the numbers */
if(str - bufstart + 14 + 22 < BUFSIZ)
- (void) sprintf(str,
- "; s1 = %lu, s2 = %lu",
- (u_long) e.re_lb.s1,
- (u_long) e.re_lb.s2);
+ (void) snprintf(str, strend-str,
+ "; s1 = %lu, s2 = %lu",
+ (u_long) e.re_lb.s1,
+ (u_long) e.re_lb.s2);
str += strlen(str);
break;
}
- if(str - bufstart + 1 < BUFSIZ)
- (void) sprintf(str, "\n");
+ if (str - bufstart + 1 < BUFSIZ)
+ (void) snprintf(str, strend-str, "\n");
return(strstart) ;
}
@@ -252,10 +254,12 @@ char *
clnt_spcreateerror(char *s)
{
char *str = get_buf();
+ char *strend;
if (str == 0)
return(0);
- (void) sprintf(str, "%s: ", s);
+ strend = str+BUFSIZ;
+ (void) snprintf(str, strend-str, "%s: ", s);
str[BUFSIZ - 1] = '\0';
(void) strncat(str, clnt_sperrno(rpc_createerr.cf_stat), BUFSIZ - 1);
switch (rpc_createerr.cf_stat) {
@@ -273,8 +277,9 @@ clnt_spcreateerror(char *s)
if (m)
(void) strncat(str, m, BUFSIZ - 1 - strlen(str));
else
- (void) sprintf(&str[strlen(str)], "Error %d",
- rpc_createerr.cf_error.re_errno);
+ (void) snprintf(&str[strlen(str)], BUFSIZ - strlen(str),
+ "Error %d",
+ rpc_createerr.cf_error.re_errno);
}
break;