summaryrefslogtreecommitdiff
path: root/kerberosV
diff options
context:
space:
mode:
authorBob Beck <beck@cvs.openbsd.org>2005-04-20 20:26:41 +0000
committerBob Beck <beck@cvs.openbsd.org>2005-04-20 20:26:41 +0000
commit0133950253919ad3f20cba87a9b2c82dcfaf2692 (patch)
treeac6af446a45af128dac3190c48835c38de71dd9a /kerberosV
parent93a672b926f8391fac5fdb8b5b52c02a4185a888 (diff)
fix snprintf abuse and strlcpy abuse, return the string length, which
is at least safe for the pointer arithmatic case ok cloder@
Diffstat (limited to 'kerberosV')
-rw-r--r--kerberosV/src/lib/roken/parse_units.c46
-rw-r--r--kerberosV/src/lib/roken/snprintf-test.h52
-rw-r--r--kerberosV/src/lib/roken/snprintf.c622
-rw-r--r--kerberosV/src/lib/roken/strerror.c57
-rw-r--r--kerberosV/src/lib/roken/strftime.c396
5 files changed, 30 insertions, 1143 deletions
diff --git a/kerberosV/src/lib/roken/parse_units.c b/kerberosV/src/lib/roken/parse_units.c
index e8db7b96f91..7955f01dd92 100644
--- a/kerberosV/src/lib/roken/parse_units.c
+++ b/kerberosV/src/lib/roken/parse_units.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 1998, 1999 Kungliga Tekniska Högskolan
+ * Copyright (c) 1997 - 2001 Kungliga Tekniska Högskolan
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
@@ -33,7 +33,7 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
-RCSID("$KTH: parse_units.c,v 1.12 1999/12/02 16:58:51 joda Exp $");
+RCSID("$KTH: parse_units.c,v 1.14 2001/09/04 09:56:00 assar Exp $");
#endif
#include <stdio.h>
@@ -84,7 +84,8 @@ parse_something (const char *s, const struct units *units,
++p;
val = strtod (p, &next); /* strtol(p, &next, 0); */
- if (val == 0 && p == next) {
+ if (p == next) {
+ val = 0;
if(!accept_no_val_p)
return -1;
no_val_p = 1;
@@ -186,10 +187,11 @@ parse_flags (const char *s, const struct units *units,
/*
* Return a string representation according to `units' of `num' in `s'
- * with maximum length `len'. The actual length is the function value.
+ * with maximum length `len'. The actual length of the returned string
+ * is the returned value.
*/
-static size_t
+static int
unparse_something (int num, const struct units *units, char *s, size_t len,
int (*print) (char *s, size_t len, int div,
const char *name, int rem),
@@ -197,10 +199,16 @@ unparse_something (int num, const struct units *units, char *s, size_t len,
const char *zero_string)
{
const struct units *u;
- size_t ret = 0, tmp;
+ int ret = 0, tmp;
+
+ /* snprintf doesn't nul terminate on 0 length */
+ if (len == 0)
+ return(0);
- if (num == 0)
- return snprintf (s, len, "%s", zero_string);
+ if (num == 0) {
+ (void) snprintf (s, len, "%s", zero_string);
+ return(strlen(s));
+ }
for (u = units; num > 0 && u->name; ++u) {
int div;
@@ -209,6 +217,8 @@ unparse_something (int num, const struct units *units, char *s, size_t len,
if (div) {
num = (*update) (num, u->mult);
tmp = (*print) (s, len, div, u->name, num);
+ if (tmp < 0)
+ return tmp;
len -= tmp;
s += tmp;
@@ -221,10 +231,11 @@ unparse_something (int num, const struct units *units, char *s, size_t len,
static int
print_unit (char *s, size_t len, int div, const char *name, int rem)
{
- return snprintf (s, len, "%u %s%s%s",
- div, name,
- div == 1 ? "" : "s",
- rem > 0 ? " " : "");
+ if (len == 0)
+ return(0);
+ (void) snprintf (s, len, "%u %s%s%s",
+ div, name, div == 1 ? "" : "s", rem > 0 ? " " : "");
+ return(strlen(s));
}
static int
@@ -242,7 +253,7 @@ update_unit_approx (int in, unsigned mult)
return update_unit (in, mult);
}
-size_t
+int
unparse_units (int num, const struct units *units, char *s, size_t len)
{
return unparse_something (num, units, s, len,
@@ -251,7 +262,7 @@ unparse_units (int num, const struct units *units, char *s, size_t len)
"0");
}
-size_t
+int
unparse_units_approx (int num, const struct units *units, char *s, size_t len)
{
return unparse_something (num, units, s, len,
@@ -296,7 +307,10 @@ print_units_table (const struct units *units, FILE *f)
static int
print_flag (char *s, size_t len, int div, const char *name, int rem)
{
- return snprintf (s, len, "%s%s", name, rem > 0 ? ", " : "");
+ if (len == 0)
+ return(0);
+ (void) snprintf (s, len, "%s%s", name, rem > 0 ? ", " : "");
+ return(strlen(s));
}
static int
@@ -305,7 +319,7 @@ update_flag (int in, unsigned mult)
return in - mult;
}
-size_t
+int
unparse_flags (int num, const struct units *units, char *s, size_t len)
{
return unparse_something (num, units, s, len,
diff --git a/kerberosV/src/lib/roken/snprintf-test.h b/kerberosV/src/lib/roken/snprintf-test.h
deleted file mode 100644
index fa75691cc22..00000000000
--- a/kerberosV/src/lib/roken/snprintf-test.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (c) 2001 Kungliga Tekniska Högskolan
- * (Royal Institute of Technology, Stockholm, Sweden).
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of KTH nor the names of its contributors may be
- * used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/* $KTH: snprintf-test.h,v 1.2 2001/07/19 18:39:14 assar Exp $ */
-
-#ifndef __SNPRINTF_TEST_H__
-#define __SNPRINTF_TEST_H__
-
-/*
- * we cannot use the real names of the functions when testing, since
- * they might have different prototypes as the system functions, hence
- * these evil hacks
- */
-
-#define snprintf test_snprintf
-#define asprintf test_asprintf
-#define asnprintf test_asnprintf
-#define vasprintf test_vasprintf
-#define vasnprintf test_vasnprintf
-#define vsnprintf test_vsnprintf
-
-#endif /* __SNPRINTF_TEST_H__ */
diff --git a/kerberosV/src/lib/roken/snprintf.c b/kerberosV/src/lib/roken/snprintf.c
deleted file mode 100644
index 7620d924cab..00000000000
--- a/kerberosV/src/lib/roken/snprintf.c
+++ /dev/null
@@ -1,622 +0,0 @@
-/*
- * Copyright (c) 1995-2000 Kungliga Tekniska Högskolan
- * (Royal Institute of Technology, Stockholm, Sweden).
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of the Institute nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-RCSID("$KTH: snprintf.c,v 1.28 2000/12/15 14:04:42 joda Exp $");
-#endif
-#include <stdio.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <roken.h>
-
-enum format_flags {
- minus_flag = 1,
- plus_flag = 2,
- space_flag = 4,
- alternate_flag = 8,
- zero_flag = 16
-};
-
-/*
- * Common state
- */
-
-struct state {
- unsigned char *str;
- unsigned char *s;
- unsigned char *theend;
- size_t sz;
- size_t max_sz;
- int (*append_char)(struct state *, unsigned char);
- int (*reserve)(struct state *, size_t);
- /* XXX - methods */
-};
-
-#ifndef HAVE_VSNPRINTF
-static int
-sn_reserve (struct state *state, size_t n)
-{
- return state->s + n > state->theend;
-}
-
-static int
-sn_append_char (struct state *state, unsigned char c)
-{
- if (sn_reserve (state, 1)) {
- return 1;
- } else {
- *state->s++ = c;
- return 0;
- }
-}
-#endif
-
-static int
-as_reserve (struct state *state, size_t n)
-{
- if (state->s + n > state->theend) {
- int off = state->s - state->str;
- unsigned char *tmp;
-
- if (state->max_sz && state->sz >= state->max_sz)
- return 1;
-
- state->sz = max(state->sz * 2, state->sz + n);
- if (state->max_sz)
- state->sz = min(state->sz, state->max_sz);
- tmp = realloc (state->str, state->sz);
- if (tmp == NULL)
- return 1;
- state->str = tmp;
- state->s = state->str + off;
- state->theend = state->str + state->sz - 1;
- }
- return 0;
-}
-
-static int
-as_append_char (struct state *state, unsigned char c)
-{
- if(as_reserve (state, 1))
- return 1;
- else {
- *state->s++ = c;
- return 0;
- }
-}
-
-static int
-append_number(struct state *state,
- unsigned long num, unsigned base, char *rep,
- int width, int prec, int flags, int minusp)
-{
- int len = 0;
- int i;
-
- /* given precision, ignore zero flag */
- if(prec != -1)
- flags &= ~zero_flag;
- else
- prec = 1;
- /* zero value with zero precision -> "" */
- if(prec == 0 && num == 0)
- return 0;
- do{
- if((*state->append_char)(state, rep[num % base]))
- return 1;
- len++;
- num /= base;
- }while(num);
- prec -= len;
- /* pad with prec zeros */
- while(prec-- > 0){
- if((*state->append_char)(state, '0'))
- return 1;
- len++;
- }
- /* add length of alternate prefix (added later) to len */
- if(flags & alternate_flag && (base == 16 || base == 8))
- len += base / 8;
- /* pad with zeros */
- if(flags & zero_flag){
- width -= len;
- if(minusp || (flags & space_flag) || (flags & plus_flag))
- width--;
- while(width-- > 0){
- if((*state->append_char)(state, '0'))
- return 1;
- len++;
- }
- }
- /* add alternate prefix */
- if(flags & alternate_flag && (base == 16 || base == 8)){
- if(base == 16)
- if((*state->append_char)(state, rep[10] + 23)) /* XXX */
- return 1;
- if((*state->append_char)(state, '0'))
- return 1;
- }
- /* add sign */
- if(minusp){
- if((*state->append_char)(state, '-'))
- return 1;
- len++;
- } else if(flags & plus_flag) {
- if((*state->append_char)(state, '+'))
- return 1;
- len++;
- } else if(flags & space_flag) {
- if((*state->append_char)(state, ' '))
- return 1;
- len++;
- }
- if(flags & minus_flag)
- /* swap before padding with spaces */
- for(i = 0; i < len / 2; i++){
- char c = state->s[-i-1];
- state->s[-i-1] = state->s[-len+i];
- state->s[-len+i] = c;
- }
- width -= len;
- while(width-- > 0){
- if((*state->append_char)(state, ' '))
- return 1;
- len++;
- }
- if(!(flags & minus_flag))
- /* swap after padding with spaces */
- for(i = 0; i < len / 2; i++){
- char c = state->s[-i-1];
- state->s[-i-1] = state->s[-len+i];
- state->s[-len+i] = c;
- }
-
- return 0;
-}
-
-static int
-append_string (struct state *state,
- unsigned char *arg,
- int width,
- int prec,
- int flags)
-{
- if(arg == NULL)
- arg = (unsigned char*)"(null)";
-
- if(prec != -1)
- width -= prec;
- else
- width -= strlen((char *)arg);
- if(!(flags & minus_flag))
- while(width-- > 0)
- if((*state->append_char) (state, ' '))
- return 1;
- if (prec != -1) {
- while (*arg && prec--)
- if ((*state->append_char) (state, *arg++))
- return 1;
- } else {
- while (*arg)
- if ((*state->append_char) (state, *arg++))
- return 1;
- }
- if(flags & minus_flag)
- while(width-- > 0)
- if((*state->append_char) (state, ' '))
- return 1;
- return 0;
-}
-
-static int
-append_char(struct state *state,
- unsigned char arg,
- int width,
- int flags)
-{
- while(!(flags & minus_flag) && --width > 0)
- if((*state->append_char) (state, ' '))
- return 1;
-
- if((*state->append_char) (state, arg))
- return 1;
- while((flags & minus_flag) && --width > 0)
- if((*state->append_char) (state, ' '))
- return 1;
-
- return 0;
-}
-
-/*
- * This can't be made into a function...
- */
-
-#define PARSE_INT_FORMAT(res, arg, unsig) \
-if (long_flag) \
- res = (unsig long)va_arg(arg, unsig long); \
-else if (short_flag) \
- res = (unsig short)va_arg(arg, unsig int); \
-else \
- res = (unsig int)va_arg(arg, unsig int)
-
-/*
- * zyxprintf - return 0 or -1
- */
-
-static int
-xyzprintf (struct state *state, const char *char_format, va_list ap)
-{
- const unsigned char *format = (const unsigned char *)char_format;
- unsigned char c;
-
- while((c = *format++)) {
- if (c == '%') {
- int flags = 0;
- int width = 0;
- int prec = -1;
- int long_flag = 0;
- int short_flag = 0;
-
- /* flags */
- while((c = *format++)){
- if(c == '-')
- flags |= minus_flag;
- else if(c == '+')
- flags |= plus_flag;
- else if(c == ' ')
- flags |= space_flag;
- else if(c == '#')
- flags |= alternate_flag;
- else if(c == '0')
- flags |= zero_flag;
- else
- break;
- }
-
- if((flags & space_flag) && (flags & plus_flag))
- flags ^= space_flag;
-
- if((flags & minus_flag) && (flags & zero_flag))
- flags ^= zero_flag;
-
- /* width */
- if (isdigit(c))
- do {
- width = width * 10 + c - '0';
- c = *format++;
- } while(isdigit(c));
- else if(c == '*') {
- width = va_arg(ap, int);
- c = *format++;
- }
-
- /* precision */
- if (c == '.') {
- prec = 0;
- c = *format++;
- if (isdigit(c))
- do {
- prec = prec * 10 + c - '0';
- c = *format++;
- } while(isdigit(c));
- else if (c == '*') {
- prec = va_arg(ap, int);
- c = *format++;
- }
- }
-
- /* size */
-
- if (c == 'h') {
- short_flag = 1;
- c = *format++;
- } else if (c == 'l') {
- long_flag = 1;
- c = *format++;
- }
-
- switch (c) {
- case 'c' :
- if(append_char(state, va_arg(ap, int), width, flags))
- return -1;
- break;
- case 's' :
- if (append_string(state,
- va_arg(ap, unsigned char*),
- width,
- prec,
- flags))
- return -1;
- break;
- case 'd' :
- case 'i' : {
- long arg;
- unsigned long num;
- int minusp = 0;
-
- PARSE_INT_FORMAT(arg, ap, signed);
-
- if (arg < 0) {
- minusp = 1;
- num = -arg;
- } else
- num = arg;
-
- if (append_number (state, num, 10, "0123456789",
- width, prec, flags, minusp))
- return -1;
- break;
- }
- case 'u' : {
- unsigned long arg;
-
- PARSE_INT_FORMAT(arg, ap, unsigned);
-
- if (append_number (state, arg, 10, "0123456789",
- width, prec, flags, 0))
- return -1;
- break;
- }
- case 'o' : {
- unsigned long arg;
-
- PARSE_INT_FORMAT(arg, ap, unsigned);
-
- if (append_number (state, arg, 010, "01234567",
- width, prec, flags, 0))
- return -1;
- break;
- }
- case 'x' : {
- unsigned long arg;
-
- PARSE_INT_FORMAT(arg, ap, unsigned);
-
- if (append_number (state, arg, 0x10, "0123456789abcdef",
- width, prec, flags, 0))
- return -1;
- break;
- }
- case 'X' :{
- unsigned long arg;
-
- PARSE_INT_FORMAT(arg, ap, unsigned);
-
- if (append_number (state, arg, 0x10, "0123456789ABCDEF",
- width, prec, flags, 0))
- return -1;
- break;
- }
- case 'p' : {
- unsigned long arg = (unsigned long)va_arg(ap, void*);
-
- if (append_number (state, arg, 0x10, "0123456789ABCDEF",
- width, prec, flags, 0))
- return -1;
- break;
- }
- case 'n' : {
- int *arg = va_arg(ap, int*);
- *arg = state->s - state->str;
- break;
- }
- case '\0' :
- --format;
- /* FALLTHROUGH */
- case '%' :
- if ((*state->append_char)(state, c))
- return -1;
- break;
- default :
- if ( (*state->append_char)(state, '%')
- || (*state->append_char)(state, c))
- return -1;
- break;
- }
- } else
- if ((*state->append_char) (state, c))
- return -1;
- }
- return 0;
-}
-
-#ifndef HAVE_SNPRINTF
-int
-snprintf (char *str, size_t sz, const char *format, ...)
-{
- va_list args;
- int ret;
-
- va_start(args, format);
- ret = vsnprintf (str, sz, format, args);
-
-#ifdef PARANOIA
- {
- int ret2;
- char *tmp;
-
- tmp = malloc (sz);
- if (tmp == NULL)
- abort ();
-
- ret2 = vsprintf (tmp, format, args);
- if (ret != ret2 || strcmp(str, tmp))
- abort ();
- free (tmp);
- }
-#endif
-
- va_end(args);
- return ret;
-}
-#endif
-
-#ifndef HAVE_ASPRINTF
-int
-asprintf (char **ret, const char *format, ...)
-{
- va_list args;
- int val;
-
- va_start(args, format);
- val = vasprintf (ret, format, args);
-
-#ifdef PARANOIA
- {
- int ret2;
- char *tmp;
- tmp = malloc (val + 1);
- if (tmp == NULL)
- abort ();
-
- ret2 = vsprintf (tmp, format, args);
- if (val != ret2 || strcmp(*ret, tmp))
- abort ();
- free (tmp);
- }
-#endif
-
- va_end(args);
- return val;
-}
-#endif
-
-#ifndef HAVE_ASNPRINTF
-int
-asnprintf (char **ret, size_t max_sz, const char *format, ...)
-{
- va_list args;
- int val;
-
- va_start(args, format);
- val = vasnprintf (ret, max_sz, format, args);
-
-#ifdef PARANOIA
- {
- int ret2;
- char *tmp;
- tmp = malloc (val + 1);
- if (tmp == NULL)
- abort ();
-
- ret2 = vsprintf (tmp, format, args);
- if (val != ret2 || strcmp(*ret, tmp))
- abort ();
- free (tmp);
- }
-#endif
-
- va_end(args);
- return val;
-}
-#endif
-
-#ifndef HAVE_VASPRINTF
-int
-vasprintf (char **ret, const char *format, va_list args)
-{
- return vasnprintf (ret, 0, format, args);
-}
-#endif
-
-
-#ifndef HAVE_VASNPRINTF
-int
-vasnprintf (char **ret, size_t max_sz, const char *format, va_list args)
-{
- int st;
- size_t len;
- struct state state;
-
- state.max_sz = max_sz;
- state.sz = 1;
- state.str = malloc(state.sz);
- if (state.str == NULL) {
- *ret = NULL;
- return -1;
- }
- state.s = state.str;
- state.theend = state.s + state.sz - 1;
- state.append_char = as_append_char;
- state.reserve = as_reserve;
-
- st = xyzprintf (&state, format, args);
- if (st) {
- free (state.str);
- *ret = NULL;
- return -1;
- } else {
- char *tmp;
-
- *state.s = '\0';
- len = state.s - state.str;
- tmp = realloc (state.str, len+1);
- if (tmp == NULL) {
- free (state.str);
- *ret = NULL;
- return -1;
- }
- *ret = tmp;
- return len;
- }
-}
-#endif
-
-#ifndef HAVE_VSNPRINTF
-int
-vsnprintf (char *str, size_t sz, const char *format, va_list args)
-{
- struct state state;
- int ret;
- unsigned char *ustr = (unsigned char *)str;
-
- state.max_sz = 0;
- state.sz = sz;
- state.str = ustr;
- state.s = ustr;
- state.theend = ustr + sz - 1;
- state.append_char = sn_append_char;
- state.reserve = sn_reserve;
-
- ret = xyzprintf (&state, format, args);
- *state.s = '\0';
- if (ret)
- return sz;
- else
- return state.s - state.str;
-}
-#endif
-
diff --git a/kerberosV/src/lib/roken/strerror.c b/kerberosV/src/lib/roken/strerror.c
deleted file mode 100644
index 50ab9e4b154..00000000000
--- a/kerberosV/src/lib/roken/strerror.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 1995, 1996, 1997, 1998 Kungliga Tekniska Högskolan
- * (Royal Institute of Technology, Stockholm, Sweden).
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of the Institute nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-RCSID("$KTH: strerror.c,v 1.10 1999/12/02 16:58:53 joda Exp $");
-#endif
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-extern int sys_nerr;
-extern char *sys_errlist[];
-
-char*
-strerror(int eno)
-{
- static char emsg[1024];
-
- if(eno < 0 || eno >= sys_nerr)
- snprintf(emsg, sizeof(emsg), "Error %d occurred.", eno);
- else
- snprintf(emsg, sizeof(emsg), "%s", sys_errlist[eno]);
-
- return emsg;
-}
diff --git a/kerberosV/src/lib/roken/strftime.c b/kerberosV/src/lib/roken/strftime.c
deleted file mode 100644
index 1fcdd3cfd0f..00000000000
--- a/kerberosV/src/lib/roken/strftime.c
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
- * Copyright (c) 1999 - 2000 Kungliga Tekniska Högskolan
- * (Royal Institute of Technology, Stockholm, Sweden).
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of KTH nor the names of its contributors may be
- * used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
- * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-#include "roken.h"
-
-RCSID("$KTH: strftime.c,v 1.11 2000/07/08 14:22:12 assar Exp $");
-
-static const char *abb_weekdays[] = {
- "Sun",
- "Mon",
- "Tue",
- "Wed",
- "Thu",
- "Fri",
- "Sat",
-};
-
-static const char *full_weekdays[] = {
- "Sunday",
- "Monday",
- "Tuesday",
- "Wednesday",
- "Thursday",
- "Friday",
- "Saturday",
-};
-
-static const char *abb_month[] = {
- "Jan",
- "Feb",
- "Mar",
- "Apr",
- "May",
- "Jun",
- "Jul",
- "Aug",
- "Sep",
- "Oct",
- "Nov",
- "Dec"
-};
-
-static const char *full_month[] = {
- "January",
- "February",
- "Mars",
- "April",
- "May",
- "June",
- "July",
- "August",
- "September",
- "October",
- "November",
- "December"
-};
-
-static const char *ampm[] = {
- "AM",
- "PM"
-};
-
-/*
- * Convert hour in [0, 24] to [12 1 - 11 12 1 - 11 12]
- */
-
-static int
-hour_24to12 (int hour)
-{
- int ret = hour % 12;
-
- if (ret == 0)
- ret = 12;
- return ret;
-}
-
-/*
- * Return AM or PM for `hour'
- */
-
-static const char *
-hour_to_ampm (int hour)
-{
- return ampm[hour / 12];
-}
-
-/*
- * Return the week number of `tm' (Sunday being the first day of the week)
- * as [0, 53]
- */
-
-static int
-week_number_sun (const struct tm *tm)
-{
- return (tm->tm_yday + 7 - (tm->tm_yday % 7 - tm->tm_wday + 7) % 7) / 7;
-}
-
-/*
- * Return the week number of `tm' (Monday being the first day of the week)
- * as [0, 53]
- */
-
-static int
-week_number_mon (const struct tm *tm)
-{
- int wday = (tm->tm_wday + 6) % 7;
-
- return (tm->tm_yday + 7 - (tm->tm_yday % 7 - wday + 7) % 7) / 7;
-}
-
-/*
- * Return the week number of `tm' (Monday being the first day of the
- * week) as [01, 53]. Week number one is the one that has four or more
- * days in that year.
- */
-
-static int
-week_number_mon4 (const struct tm *tm)
-{
- int wday = (tm->tm_wday + 6) % 7;
- int w1day = (wday - tm->tm_yday % 7 + 7) % 7;
- int ret;
-
- ret = (tm->tm_yday + w1day) / 7;
- if (w1day >= 4)
- --ret;
- if (ret == -1)
- ret = 53;
- else
- ++ret;
- return ret;
-}
-
-/*
- *
- */
-
-size_t
-strftime (char *buf, size_t maxsize, const char *format,
- const struct tm *tm)
-{
- size_t n = 0;
- size_t ret;
-
- while (*format != '\0' && n < maxsize) {
- if (*format == '%') {
- ++format;
- if(*format == 'E' || *format == 'O')
- ++format;
- switch (*format) {
- case 'a' :
- ret = snprintf (buf, maxsize - n,
- "%s", abb_weekdays[tm->tm_wday]);
- break;
- case 'A' :
- ret = snprintf (buf, maxsize - n,
- "%s", full_weekdays[tm->tm_wday]);
- break;
- case 'h' :
- case 'b' :
- ret = snprintf (buf, maxsize - n,
- "%s", abb_month[tm->tm_mon]);
- break;
- case 'B' :
- ret = snprintf (buf, maxsize - n,
- "%s", full_month[tm->tm_mon]);
- break;
- case 'c' :
- ret = snprintf (buf, maxsize - n,
- "%d:%02d:%02d %02d:%02d:%02d",
- tm->tm_year,
- tm->tm_mon + 1,
- tm->tm_mday,
- tm->tm_hour,
- tm->tm_min,
- tm->tm_sec);
- break;
- case 'C' :
- ret = snprintf (buf, maxsize - n,
- "%02d", (tm->tm_year + 1900) / 100);
- break;
- case 'd' :
- ret = snprintf (buf, maxsize - n,
- "%02d", tm->tm_mday);
- break;
- case 'D' :
- ret = snprintf (buf, maxsize - n,
- "%02d/%02d/%02d",
- tm->tm_mon + 1,
- tm->tm_mday,
- (tm->tm_year + 1900) % 100);
- break;
- case 'e' :
- ret = snprintf (buf, maxsize - n,
- "%2d", tm->tm_mday);
- break;
- case 'F':
- ret = snprintf (buf, maxsize - n,
- "%04d-%02d-%02d", tm->tm_year + 1900,
- tm->tm_mon + 1, tm->tm_mday);
- break;
- case 'g':
- /* last two digits of week-based year */
- abort();
- case 'G':
- /* week-based year */
- abort();
- case 'H' :
- ret = snprintf (buf, maxsize - n,
- "%02d", tm->tm_hour);
- break;
- case 'I' :
- ret = snprintf (buf, maxsize - n,
- "%02d",
- hour_24to12 (tm->tm_hour));
- break;
- case 'j' :
- ret = snprintf (buf, maxsize - n,
- "%03d", tm->tm_yday + 1);
- break;
- case 'k' :
- ret = snprintf (buf, maxsize - n,
- "%2d", tm->tm_hour);
- break;
- case 'l' :
- ret = snprintf (buf, maxsize - n,
- "%2d",
- hour_24to12 (tm->tm_hour));
- break;
- case 'm' :
- ret = snprintf (buf, maxsize - n,
- "%02d", tm->tm_mon + 1);
- break;
- case 'M' :
- ret = snprintf (buf, maxsize - n,
- "%02d", tm->tm_min);
- break;
- case 'n' :
- ret = snprintf (buf, maxsize - n, "\n");
- break;
- case 'p' :
- ret = snprintf (buf, maxsize - n, "%s",
- hour_to_ampm (tm->tm_hour));
- break;
- case 'r' :
- ret = snprintf (buf, maxsize - n,
- "%02d:%02d:%02d %s",
- hour_24to12 (tm->tm_hour),
- tm->tm_min,
- tm->tm_sec,
- hour_to_ampm (tm->tm_hour));
- break;
- case 'R' :
- ret = snprintf (buf, maxsize - n,
- "%02d:%02d",
- tm->tm_hour,
- tm->tm_min);
-
- case 's' :
- ret = snprintf (buf, maxsize - n,
- "%d", (int)mktime((struct tm *)tm));
- break;
- case 'S' :
- ret = snprintf (buf, maxsize - n,
- "%02d", tm->tm_sec);
- break;
- case 't' :
- ret = snprintf (buf, maxsize - n, "\t");
- break;
- case 'T' :
- case 'X' :
- ret = snprintf (buf, maxsize - n,
- "%02d:%02d:%02d",
- tm->tm_hour,
- tm->tm_min,
- tm->tm_sec);
- break;
- case 'u' :
- ret = snprintf (buf, maxsize - n,
- "%d", (tm->tm_wday == 0) ? 7 : tm->tm_wday);
- break;
- case 'U' :
- ret = snprintf (buf, maxsize - n,
- "%02d", week_number_sun (tm));
- break;
- case 'V' :
- ret = snprintf (buf, maxsize - n,
- "%02d", week_number_mon4 (tm));
- break;
- case 'w' :
- ret = snprintf (buf, maxsize - n,
- "%d", tm->tm_wday);
- break;
- case 'W' :
- ret = snprintf (buf, maxsize - n,
- "%02d", week_number_mon (tm));
- break;
- case 'x' :
- ret = snprintf (buf, maxsize - n,
- "%d:%02d:%02d",
- tm->tm_year,
- tm->tm_mon + 1,
- tm->tm_mday);
- break;
- case 'y' :
- ret = snprintf (buf, maxsize - n,
- "%02d", (tm->tm_year + 1900) % 100);
- break;
- case 'Y' :
- ret = snprintf (buf, maxsize - n,
- "%d", tm->tm_year + 1900);
- break;
- case 'z':
- ret = snprintf (buf, maxsize - n,
- "%ld",
-#if defined(HAVE_STRUCT_TM_TM_GMTOFF)
- (long)tm->tm_gmtoff
-#elif defined(HAVE_TIMEZONE)
- tm->tm_isdst ?
- (long)altzone :
- (long)timezone
-#else
-#error Where in timezone chaos are you?
-#endif
- );
- break;
- case 'Z' :
- ret = snprintf (buf, maxsize - n,
- "%s",
-
-#if defined(HAVE_STRUCT_TM_TM_ZONE)
- tm->tm_zone
-#elif defined(HAVE_TIMEZONE)
- tzname[tm->tm_isdst]
-#else
-#error what?
-#endif
- );
- break;
- case '\0' :
- --format;
- /* FALLTHROUGH */
- case '%' :
- ret = snprintf (buf, maxsize - n,
- "%%");
- break;
- default :
- ret = snprintf (buf, maxsize - n,
- "%%%c", *format);
- break;
- }
- if (ret >= maxsize - n)
- return 0;
- n += ret;
- buf += ret;
- ++format;
- } else {
- *buf++ = *format++;
- ++n;
- }
- }
- *buf++ = '\0';
- return n;
-}