diff options
author | green <green@FreeBSD.org> | 2000-10-27 01:19:02 +0000 |
---|---|---|
committer | green <green@FreeBSD.org> | 2000-10-27 01:19:02 +0000 |
commit | 4873d87d0313bcc3d9a31353fd591030e246cf2f (patch) | |
tree | adf27c85608039ef2dd105e501755589c140febc /lib/libutil | |
parent | f05284397ec89629b21217f6251a1d84737169f8 (diff) | |
download | FreeBSD-src-4873d87d0313bcc3d9a31353fd591030e246cf2f.zip FreeBSD-src-4873d87d0313bcc3d9a31353fd591030e246cf2f.tar.gz |
Fix problems people were having with large -O levels with GCC and
getting libutil/libcrypt to work properly. I've determined that GCC
thinks it can inline all functions, including weak-symboled ones, if
it feels like it.
Create a new stub.c and move any stubs there to prevent inlining.
Thanks to jdp and William S. Duncanson for helping me finally find the
problem.
Diffstat (limited to 'lib/libutil')
-rw-r--r-- | lib/libutil/Makefile | 2 | ||||
-rw-r--r-- | lib/libutil/login_crypt.c | 13 | ||||
-rw-r--r-- | lib/libutil/stub.c | 43 |
3 files changed, 50 insertions, 8 deletions
diff --git a/lib/libutil/Makefile b/lib/libutil/Makefile index 70fd9d2..97a3e59 100644 --- a/lib/libutil/Makefile +++ b/lib/libutil/Makefile @@ -9,7 +9,7 @@ CFLAGS+=-DINET6 SRCS= login.c login_tty.c logout.c logwtmp.c pty.c \ login_cap.c login_class.c login_auth.c login_times.c login_ok.c \ login_crypt.c _secure_path.c uucplock.c property.c auth.c \ - realhostname.c fparseln.c + realhostname.c fparseln.c stub.c INCS= libutil.h login_cap.h MAN3+= login.3 login_auth.3 login_tty.3 logout.3 logwtmp.3 pty.3 \ diff --git a/lib/libutil/login_crypt.c b/lib/libutil/login_crypt.c index b291100..e080ba9 100644 --- a/lib/libutil/login_crypt.c +++ b/lib/libutil/login_crypt.c @@ -29,19 +29,18 @@ #include <sys/types.h> #include <login_cap.h> +#include <stdio.h> +#include <stdlib.h> #include <unistd.h> -#pragma weak crypt_set_format -int -crypt_set_format(const char *f) { - return (0); -} - const char * login_setcryptfmt(login_cap_t *lc, const char *def, const char *error) { const char *cipher; - cipher = login_getcapstr(lc, "passwd_format", def, NULL); + cipher = login_getcapstr(lc, "passwd_format", (char *)def, NULL); + if (getenv("CRYPT_DEBUG") != NULL) + fprintf(stderr, "login_setcryptfmt: " + "passwd_format = %s\n", cipher); if (cipher == NULL) return (error); if (!crypt_set_format(cipher)) diff --git a/lib/libutil/stub.c b/lib/libutil/stub.c new file mode 100644 index 0000000..e8ffa19 --- /dev/null +++ b/lib/libutil/stub.c @@ -0,0 +1,43 @@ +/*- + * Copyright (c) 2000 Brian Fundakowski Feldman + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $FreeBSD$ + */ + +#include <stdio.h> +#include <stdlib.h> + +/* + * Stub out what's in -lcrypt. + */ + +#pragma weak crypt_set_format +int +crypt_set_format(const char *f) { + + if (getenv("CRYPT_DEBUG") != NULL) + fprintf(stderr, "crypt_set_format: eek, stub called!\n"); + return (0); +} |