diff options
author | Greg Hudson <ghudson@mit.edu> | 2013-03-21 01:48:22 -0400 |
---|---|---|
committer | Greg Hudson <ghudson@mit.edu> | 2013-03-21 01:59:46 -0400 |
commit | 093704b74884dca424ffe5a88765e3c513f71ecb (patch) | |
tree | dcae4848eaca9addbb11ff4765052445b695e926 /src/kadmin | |
parent | 48e750799dff48239a044c6a732f41ded25cc624 (diff) | |
download | krb5-093704b74884dca424ffe5a88765e3c513f71ecb.tar.gz krb5-093704b74884dca424ffe5a88765e3c513f71ecb.tar.xz krb5-093704b74884dca424ffe5a88765e3c513f71ecb.zip |
Clean up getclhoststr in ipropd_svc.c
Based on a patch from Xi Wang <xi@mit.edu>.
Diffstat (limited to 'src/kadmin')
-rw-r--r-- | src/kadmin/server/ipropd_svc.c | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/src/kadmin/server/ipropd_svc.c b/src/kadmin/server/ipropd_svc.c index ca96295c46..008bff01eb 100644 --- a/src/kadmin/server/ipropd_svc.c +++ b/src/kadmin/server/ipropd_svc.c @@ -239,24 +239,16 @@ out: * Return arg cl str ptr on success, else NULL. */ static char * -getclhoststr(char *clprinc, char *cl, size_t len) +getclhoststr(const char *clprinc, char *cl, size_t len) { - char *s; - if ((s = strchr(clprinc, '/')) != NULL) { - /* XXX "!++s"? */ - if (!++s) - return NULL; - if (strlcpy(cl, s, len) >= len) - return NULL; - /* XXX Copy with @REALM first, with bounds check, then - chop off the realm?? */ - if ((s = strchr(cl, '@')) != NULL) { - *s = '\0'; - return (cl); /* success */ - } - } - - return (NULL); + const char *s, *e; + + if ((s = strchr(clprinc, '/')) == NULL || (e = strchr(++s, '@')) == NULL || + (size_t)(e - s) >= len) + return NULL; + memcpy(cl, s, e - s); + cl[e - s] = '\0'; + return (cl); } static kdb_fullresync_result_t * |