diff options
Diffstat (limited to 'sysdeps/generic')
-rw-r--r-- | sysdeps/generic/crypt-entry.c | 68 | ||||
-rw-r--r-- | sysdeps/generic/crypt.h | 58 | ||||
-rw-r--r-- | sysdeps/generic/strtok.c | 5 | ||||
-rw-r--r-- | sysdeps/generic/strtok_r.c | 5 |
4 files changed, 128 insertions, 8 deletions
diff --git a/sysdeps/generic/crypt-entry.c b/sysdeps/generic/crypt-entry.c new file mode 100644 index 0000000000..84c6974697 --- /dev/null +++ b/sysdeps/generic/crypt-entry.c @@ -0,0 +1,68 @@ +/* crypt - wrapper aroung MD5 sum replacement for crypt function. +Copyright (C) 1996 Free Software Foundation, Inc. +This file is part of the GNU C Library. +Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. + +The GNU C Library is free software; you can redistribute it and/or +modify it under the terms of the GNU Library General Public License as +published by the Free Software Foundation; either version 2 of the +License, or (at your option) any later version. + +The GNU C Library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with the GNU C Library; see the file COPYING.LIB. If +not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include <crypt.h> +#include <errno.h> +#include <string.h> + + +/* Define our magic string to mark salt for MD5 encryption + replacement. This is meant to be the same as for other MD5 based + encryption implenentations. */ +static const char md5_salt_prefix[] = "$1$"; + + +/* Prototypes for the MD5 encryption replacement functions. */ +extern char *md5_crypt_r (const char *key, const char *salt, char *buffer, + int buflen); +extern char *md5_crpyt (const char *key, const char *salt); + + +/* We recognize an intended call of the MD5 crypt replacement function + by the first 3 characters of the salt string. If they match the + MD5 magic string we want MD5 encryption replacement. */ +char * +crypt_r (key, salt, data) + const char *key; + const char *salt; + struct crypt_data *data; +{ + if (strncmp (md5_salt_prefix, salt, sizeof (md5_salt_prefix) - 1) == 0) + return md5_crypt_r (key, salt, (char *) data, sizeof (struct crypt_data)); + + /* We don't have DES encryption. */ + errno = ENOSYS; + return NULL; +} + + +/* The same here, only we call the non-reentrant version. */ +char * +crypt (key, salt) + const char *key; + const char *salt; +{ + if (strncmp (md5_salt_prefix, salt, sizeof (md5_salt_prefix) - 1) == 0) + return md5_crypt (key, salt); + + /* We don't have DES encryption. */ + errno = ENOSYS; + return NULL; +} diff --git a/sysdeps/generic/crypt.h b/sysdeps/generic/crypt.h new file mode 100644 index 0000000000..c035e1e623 --- /dev/null +++ b/sysdeps/generic/crypt.h @@ -0,0 +1,58 @@ +/* + * UFC-crypt: ultra fast crypt(3) implementation + * + * Copyright (C) 1991, 1992, 1993, 1996 Free Software Foundation, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * @(#)crypt.h 1.3 16 Sep 1996 + * + */ + +#ifndef _CRYPT_H + +#define _CRYPT_H 1 +#include <features.h> + +__BEGIN_DECLS + +struct crypt_data +{ + char keysched[(16 * 8) / sizeof (char)]; + char sb0[32768 / sizeof (char)]; + char sb1[32768 / sizeof (char)]; + char sb2[32768 / sizeof (char)]; + char sb3[32768 / sizeof (char)]; + /* end-of-aligment-critical-data */ + char crypt_3_buf[14]; + char current_salt[2]; + long current_saltbits; + int direction, initialized; +}; + +/* Encrypt at most 8 characters from KEY using salt to perturb DES. */ +extern char *crypt __P ((__const char *__key, __const char *__salt)); + + +#ifdef __USE_REENTRANT +/* Reentrant versions of the functions above. The additional argument + points to a structure where the results are placed in. */ +extern char *crypt_r __P ((__const char *__key, __const char *__salt, + struct crypt_data *__data)); +#endif /* reentrant */ + +__END_DECLS + +#endif /* crypt.h */ diff --git a/sysdeps/generic/strtok.c b/sysdeps/generic/strtok.c index 4f89efa6f0..1e96fec01f 100644 --- a/sysdeps/generic/strtok.c +++ b/sysdeps/generic/strtok.c @@ -43,10 +43,7 @@ strtok (s, delim) /* Scan leading delimiters. */ s += strspn (s, delim); if (*s == '\0') - { - olds = NULL; - return NULL; - } + return NULL; /* Find the end of the token. */ token = s; diff --git a/sysdeps/generic/strtok_r.c b/sysdeps/generic/strtok_r.c index 870fb274eb..fb68ad8c98 100644 --- a/sysdeps/generic/strtok_r.c +++ b/sysdeps/generic/strtok_r.c @@ -44,10 +44,7 @@ strtok_r (s, delim, save_ptr) /* Scan leading delimiters. */ s += strspn (s, delim); if (*s == '\0') - { - *save_ptr = NULL; - return NULL; - } + return NULL; /* Find the end of the token. */ token = s; |