bnpass.c
上传用户:tany51
上传日期:2013-06-12
资源大小:1397k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*
  2.  * Copyright (C) 1999  Ross Combs (rocombs@cs.nmsu.edu)
  3.  *
  4.  * This program is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU General Public License
  6.  * as published by the Free Software Foundation; either version 2
  7.  * of the License, or (at your option) any later version.
  8.  *
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  17.  */
  18. #include "common/setup_before.h"
  19. #ifdef HAVE_STDDEF_H
  20. # include <stddef.h>
  21. #else
  22. # ifndef NULL
  23. #  define NULL ((void *)0)
  24. # endif
  25. #endif
  26. #ifdef STDC_HEADERS
  27. # include <stdlib.h>
  28. #endif
  29. #include <stdio.h>
  30. #include "compat/exitstatus.h"
  31. #include <ctype.h>
  32. #ifdef HAVE_STRING_H
  33. # include <string.h>
  34. #else
  35. # ifdef HAVE_STRINGS_H
  36. #  include <strings.h>
  37. # endif
  38. #endif
  39. #include "common/eventlog.h"
  40. #include "common/bnethash.h"
  41. #include "common/version.h"
  42. #include "common/setup_after.h"
  43. static void usage(char const * progname)
  44. {
  45.     fprintf(stderr,
  46.             "usage: %s [<options>] [--] [<cleartextpassword>]n"
  47.             "    -h, --help, --usage  show this information and exitn"
  48.             "    -v, --version        print version number and exitn",progname);
  49.     
  50.     exit(STATUS_FAILURE);
  51. }
  52. extern int main(int argc, char * argv[])
  53. {
  54.     
  55.     char const * pass=NULL;
  56.     int          a;
  57.     int          forcepass=0;
  58.     
  59.     if (argc<1 || !argv || !argv[0])
  60.     {
  61.         fprintf(stderr,"bad argumentsn");
  62.         return STATUS_FAILURE;
  63.     }
  64.     
  65.     for (a=1; a<argc; a++)
  66.         if (forcepass && !pass)
  67.             pass = argv[a];
  68.         else if (strcmp(argv[a],"-")==0 && !pass)
  69.             pass = argv[a];
  70.         else if (argv[a][0]!='-' && !pass)
  71.             pass = argv[a];
  72.         else if (forcepass || argv[a][0]!='-' || strcmp(argv[a],"-")==0)
  73.         {
  74.             fprintf(stderr,"%s: extra password argument "%s"n",argv[0],argv[a]);
  75.             usage(argv[0]);
  76.         }
  77.         else if (strcmp(argv[a],"--")==0)
  78.             forcepass = 1;
  79.         else if (strcmp(argv[a],"-v")==0 || strcmp(argv[a],"--version")==0)
  80.         {
  81.             printf("version "PVPGN_VERSION"n");
  82.             return STATUS_SUCCESS;
  83.         }
  84.         else if (strcmp(argv[a],"-h")==0 || strcmp(argv[a],"--help")==0 || strcmp(argv[a],"--usage")
  85. ==0)
  86.             usage(argv[0]);
  87.         else
  88.         {
  89.             fprintf(stderr,"%s: unknown option "%s"n",argv[0],argv[a]);
  90.             usage(argv[0]);
  91.         }
  92.     
  93.     {
  94. char         buff[256];
  95. t_hash       hash;
  96. unsigned int i;
  97. eventlog_set(stderr); /* bnet_hash() and friends use eventlog */
  98. if (!pass)
  99. {
  100.     printf("Enter password to hash: ");
  101.     fflush(stdout);
  102.     fgets(buff,256,stdin);
  103.     if (buff[0]!='')
  104.         buff[strlen(buff)-1] = '';
  105. }
  106. else
  107. {
  108.     strncpy(buff,pass,sizeof(buff));
  109.     buff[sizeof(buff)-1] = '';
  110. }
  111. /* FIXME: what is the max password length? */
  112. for (i=0; i<strlen(buff); i++)
  113.     if (isascii((int)buff[i]) && isupper((int)buff[i])) /* some tolower()'s are broken */
  114. buff[i] = tolower((int)buff[i]);
  115. bnet_hash(&hash,strlen(buff),buff);
  116. printf(""BNET\\acct\\passhash1"="%s"n",hash_get_str(hash));
  117.     }
  118.     
  119.     return STATUS_SUCCESS;
  120. }