/* * ---------------------------------------------------------------- * Night Light MKPasswd Crypt tool * ---------------------------------------------------------------- * Copyright (C) 1997-2003 Jonas Kvinge * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * Last modified by: * Jonas Kvinge (22.06.2003) * */ #define MKPASSWD_C #define _XOPEN_SOURCE 4 #define _XOPEN_VERSION 4 #define NEED_SYS_TYPES_H 1 /* Extra types */ #define NEED_SYS_PARAM_H 1 /* Some systems need this */ #define NEED_LIMITS_H 0 /* Kernel limits */ #define NEED_STDARG_H 0 /* va_list, etc */ #define NEED_ERRNO_H 0 /* errno */ #define NEED_CTYPE_H 0 /* isdigit(), etc */ #define NEED_NETINET_IN_H 0 /* in_addr, sockaddr_in, etc */ #define NEED_ARPA_INET_H 0 /* inet_ntoa(), inet_aton(), etc */ #define NEED_STDIO_H 1 /* Standard C UNIX functions */ #define NEED_STDLIB_H 1 /* malloc(), exit(), atoi(), etc */ #define NEED_TIME_H 0 /* time(), etc */ #define NEED_SYSCTL_H 0 /* sysctl(), etc */ #define NEED_SYS_STAT_H 0 /* chmod(), mkdir(), etc */ #define NEED_SYS_UIO_H 0 /* iovec, etc */ #define NEED_FCNTL_H 0 /* open(), creat(), fcntl(), etc */ #define NEED_SYS_IOCTL_H 0 /* ioctl(), etc */ #define NEED_SYS_FILIO_H 0 /* Solaris need this for ioctl(), etc */ #define NEED_UNISTD_H 1 /* Unix standard functions */ #define NEED_STRING_H 1 /* C string functions */ #define NEED_SIGNAL_H 0 /* Signal functions */ #define NEED_SYS_SOCKET_H 0 /* Socket functions */ #define NEED_NETDB_H 0 /* Network database functions */ #define NEED_ARPA_NAMESER_H 0 /* Nameserver definitions */ #define NEED_GETUSERPW_HEADERS 0 /* Functions to retrive system passwords */ #define NEED_CRYPT 1 /* Some systems declare crypt() here */ #include "includes.h" #include "nlcrypt.h" int main(int argc, char *argv[]); #if !HAVE_DECL_CRYPT char *crypt(const char *key, const char *salt); #endif int main(int argc, char *argv[]) { char Chars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./"; float Len = strlen(Chars); unsigned short int Index = 0; char Salt[3] = ""; char *CryptPT = NULL; char *PlainTextPT = NULL; printf("Password encryptor v%s.\n", VERSION); printf("Copyright (C) 2000-2003 Jonas Kvinge, all rights reserved.\n"); printf("\n"); srand(NOW); if (argc < 2) { Index = (unsigned int) (Len * rand() / (RAND_MAX + 1.0)); Salt[0] = Chars[Index]; Index = (unsigned int) (Len * rand() / (RAND_MAX + 1.0)); Salt[1] = Chars[Index]; Salt[2] = '\0'; printf("Using random salt: '%s'\n", Salt); } else { Salt[0] = argv[1][0]; Salt[1] = argv[1][1]; Salt[2] = '\0'; if ((strchr(Chars, Salt[0]) == NULL) || (strchr(Chars, Salt[1]) == NULL)) { fprintf(stderr, "Error: Illegal salt: '%s'\n", Salt); exit(0); } printf("Using salt: '%s'\n", Salt); } PlainTextPT = getpass("Enter password: "); if (PlainTextPT == NULL) { return(0); } if (strcmp(PlainTextPT, "") == 0) { printf("Error: Invalid password.\n"); exit(0); } CryptPT = crypt(PlainTextPT, Salt); printf("Encrypted password: %s\n", CryptPT); return(0); }