Import of code from heimdal
authorHeimdal Developers <heimdal-discuss@sics.se>
Mon, 15 Nov 2010 20:35:31 +0000 (15:35 -0500)
committerDerrick Brashear <shadow@dementia.org>
Tue, 16 Nov 2010 18:23:19 +0000 (10:23 -0800)
This commit updates the code imported from heimdal to
387b0fa7baf724cc260559ff8774c04e0e8f7487 (switch-from-svn-to-git-1676-g387b0fa)

Upstream changes are:

Andrew Tridgell (1):
      heimdal: fixed a shadowed variable warning for error_message

Change-Id: I515500ae3c79b3f87393c5fd4f7640d64104ca53
Reviewed-on: http://gerrit.openafs.org/3311
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>

src/external/heimdal-last
src/external/heimdal/krb5/config_file.c
src/external/heimdal/roken/vsyslog.c [new file with mode: 0644]

index 409609c..ce45b85 100644 (file)
@@ -1 +1 @@
-a3afa695ee3eb1ff5ad8de3e80c20d5049fce934
+387b0fa7baf724cc260559ff8774c04e0e8f7487
index adad9c1..8728076 100644 (file)
@@ -75,14 +75,14 @@ config_fgets(char *str, size_t len, struct fileptr *ptr)
 
 static krb5_error_code parse_section(char *p, krb5_config_section **s,
                                     krb5_config_section **res,
-                                    const char **error_message);
+                                    const char **err_message);
 static krb5_error_code parse_binding(struct fileptr *f, unsigned *lineno, char *p,
                                     krb5_config_binding **b,
                                     krb5_config_binding **parent,
-                                    const char **error_message);
+                                    const char **err_message);
 static krb5_error_code parse_list(struct fileptr *f, unsigned *lineno,
                                  krb5_config_binding **parent,
-                                 const char **error_message);
+                                 const char **err_message);
 
 static krb5_config_section *
 get_entry(krb5_config_section **parent, const char *name, int type)
@@ -119,25 +119,25 @@ get_entry(krb5_config_section **parent, const char *name, int type)
  *
  * starting at the line in `p', storing the resulting structure in
  * `s' and hooking it into `parent'.
- * Store the error message in `error_message'.
+ * Store the error message in `err_message'.
  */
 
 static krb5_error_code
 parse_section(char *p, krb5_config_section **s, krb5_config_section **parent,
-             const char **error_message)
+             const char **err_message)
 {
     char *p1;
     krb5_config_section *tmp;
 
     p1 = strchr (p + 1, ']');
     if (p1 == NULL) {
-       *error_message = "missing ]";
+       *err_message = "missing ]";
        return KRB5_CONFIG_BADFORMAT;
     }
     *p1 = '\0';
     tmp = get_entry(parent, p + 1, krb5_config_list);
     if(tmp == NULL) {
-       *error_message = "out of memory";
+       *err_message = "out of memory";
        return KRB5_CONFIG_BADFORMAT;
     }
     *s = tmp;
@@ -147,12 +147,12 @@ parse_section(char *p, krb5_config_section **s, krb5_config_section **parent,
 /*
  * Parse a brace-enclosed list from `f', hooking in the structure at
  * `parent'.
- * Store the error message in `error_message'.
+ * Store the error message in `err_message'.
  */
 
 static krb5_error_code
 parse_list(struct fileptr *f, unsigned *lineno, krb5_config_binding **parent,
-          const char **error_message)
+          const char **err_message)
 {
     char buf[BUFSIZ];
     krb5_error_code ret;
@@ -175,12 +175,12 @@ parse_list(struct fileptr *f, unsigned *lineno, krb5_config_binding **parent,
            return 0;
        if (*p == '\0')
            continue;
-       ret = parse_binding (f, lineno, p, &b, parent, error_message);
+       ret = parse_binding (f, lineno, p, &b, parent, err_message);
        if (ret)
            return ret;
     }
     *lineno = beg_lineno;
-    *error_message = "unclosed {";
+    *err_message = "unclosed {";
     return KRB5_CONFIG_BADFORMAT;
 }
 
@@ -191,7 +191,7 @@ parse_list(struct fileptr *f, unsigned *lineno, krb5_config_binding **parent,
 static krb5_error_code
 parse_binding(struct fileptr *f, unsigned *lineno, char *p,
              krb5_config_binding **b, krb5_config_binding **parent,
-             const char **error_message)
+             const char **err_message)
 {
     krb5_config_binding *tmp;
     char *p1, *p2;
@@ -201,14 +201,14 @@ parse_binding(struct fileptr *f, unsigned *lineno, char *p,
     while (*p && *p != '=' && !isspace((unsigned char)*p))
        ++p;
     if (*p == '\0') {
-       *error_message = "missing =";
+       *err_message = "missing =";
        return KRB5_CONFIG_BADFORMAT;
     }
     p2 = p;
     while (isspace((unsigned char)*p))
        ++p;
     if (*p != '=') {
-       *error_message = "missing =";
+       *err_message = "missing =";
        return KRB5_CONFIG_BADFORMAT;
     }
     ++p;
@@ -218,14 +218,14 @@ parse_binding(struct fileptr *f, unsigned *lineno, char *p,
     if (*p == '{') {
        tmp = get_entry(parent, p1, krb5_config_list);
        if (tmp == NULL) {
-           *error_message = "out of memory";
+           *err_message = "out of memory";
            return KRB5_CONFIG_BADFORMAT;
        }
-       ret = parse_list (f, lineno, &tmp->u.list, error_message);
+       ret = parse_list (f, lineno, &tmp->u.list, err_message);
     } else {
        tmp = get_entry(parent, p1, krb5_config_string);
        if (tmp == NULL) {
-           *error_message = "out of memory";
+           *err_message = "out of memory";
            return KRB5_CONFIG_BADFORMAT;
        }
        p1 = p;
@@ -341,14 +341,14 @@ parse_plist_config(krb5_context context, const char *path, krb5_config_section *
 
 /*
  * Parse the config file `fname', generating the structures into `res'
- * returning error messages in `error_message'
+ * returning error messages in `err_message'
  */
 
 static krb5_error_code
 krb5_config_parse_debug (struct fileptr *f,
                         krb5_config_section **res,
                         unsigned *lineno,
-                        const char **error_message)
+                        const char **err_message)
 {
     krb5_config_section *s = NULL;
     krb5_config_binding *b = NULL;
@@ -366,19 +366,19 @@ krb5_config_parse_debug (struct fileptr *f,
        if (*p == '#' || *p == ';')
            continue;
        if (*p == '[') {
-           ret = parse_section(p, &s, res, error_message);
+           ret = parse_section(p, &s, res, err_message);
            if (ret)
                return ret;
            b = NULL;
        } else if (*p == '}') {
-           *error_message = "unmatched }";
+           *err_message = "unmatched }";
            return EINVAL;      /* XXX */
        } else if(*p != '\0') {
            if (s == NULL) {
-               *error_message = "binding before section";
+               *err_message = "binding before section";
                return EINVAL;
            }
-           ret = parse_binding(f, lineno, p, &b, &s->u.list, error_message);
+           ret = parse_binding(f, lineno, p, &b, &s->u.list, err_message);
            if (ret)
                return ret;
        }
diff --git a/src/external/heimdal/roken/vsyslog.c b/src/external/heimdal/roken/vsyslog.c
new file mode 100644 (file)
index 0000000..aea7086
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * 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.
+ */
+
+#include <config.h>
+
+#ifndef HAVE_VSYSLOG
+
+#include <stdio.h>
+#include <syslog.h>
+#include <stdarg.h>
+
+#include "roken.h"
+
+/*
+ * the theory behind this is that we might be trying to call vsyslog
+ * when there's no memory left, and we should try to be as useful as
+ * possible.  And the format string should say something about what's
+ * failing.
+ */
+
+static void
+simple_vsyslog(int pri, const char *fmt, va_list ap)
+{
+    syslog (pri, "%s", fmt);
+}
+
+/*
+ * do like syslog but with a `va_list'
+ */
+
+ROKEN_LIB_FUNCTION void ROKEN_LIB_CALL
+vsyslog(int pri, const char *fmt, va_list ap)
+{
+    char *fmt2;
+    const char *p;
+    char *p2;
+    int ret;
+    int saved_errno = errno;
+    int fmt_len  = strlen (fmt);
+    int fmt2_len = fmt_len;
+    char *buf;
+
+    fmt2 = malloc (fmt_len + 1);
+    if (fmt2 == NULL) {
+       simple_vsyslog (pri, fmt, ap);
+       return;
+    }
+
+    for (p = fmt, p2 = fmt2; *p != '\0'; ++p) {
+       if (p[0] == '%' && p[1] == 'm') {
+           const char *e = strerror (saved_errno);
+           int e_len = strlen (e);
+           char *tmp;
+           int pos;
+
+           pos = p2 - fmt2;
+           fmt2_len += e_len - 2;
+           tmp = realloc (fmt2, fmt2_len + 1);
+           if (tmp == NULL) {
+               free (fmt2);
+               simple_vsyslog (pri, fmt, ap);
+               return;
+           }
+           fmt2 = tmp;
+           p2   = fmt2 + pos;
+           memmove (p2, e, e_len);
+           p2 += e_len;
+           ++p;
+       } else
+           *p2++ = *p;
+    }
+    *p2 = '\0';
+
+    ret = vasprintf (&buf, fmt2, ap);
+    free (fmt2);
+    if (ret < 0 || buf == NULL) {
+       simple_vsyslog (pri, fmt, ap);
+       return;
+    }
+    syslog (pri, "%s", buf);
+    free (buf);
+}
+#endif