Diff for /servers/slapd/slappasswd.c between versions 1.1 and 1.5.2.5

version 1.1, 2004/02/26 18:03:42 version 1.5.2.5, 2008/02/11 23:26:44
Line 1 Line 1
 /* $OpenLDAP: pkg/ldap/servers/slapd/tools/slappasswd.c,v 1.21 2004/01/09 03:11:57 kurt Exp $ */  /* $OpenLDAP: pkg/ldap/servers/slapd/slappasswd.c,v 1.5.2.4 2007/08/31 23:14:00 quanah Exp $ */
 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.  /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
  *   *
  * Copyright 1998-2004 The OpenLDAP Foundation.   * Copyright 1998-2008 The OpenLDAP Foundation.
  * Portions Copyright 1998-2003 Kurt D. Zeilenga.   * Portions Copyright 1998-2003 Kurt D. Zeilenga.
  * All rights reserved.   * All rights reserved.
  *   *
Line 32 Line 32
 #include <ac/unistd.h>  #include <ac/unistd.h>
   
 #include <ldap.h>  #include <ldap.h>
   #include <lber_pvt.h>
 #include <lutil.h>  #include <lutil.h>
   #include <lutil_sha1.h>
   
 #include "ldap_defaults.h"  #include "ldap_defaults.h"
   #include "slap.h"
   
 static int      verbose = 0;  static int      verbose = 0;
   
Line 43  usage(const char *s) Line 46  usage(const char *s)
 {  {
         fprintf(stderr,          fprintf(stderr,
                 "Usage: %s [options]\n"                  "Usage: %s [options]\n"
                   "  -c format\tcrypt(3) salt format\n"
                   "  -g\t\tgenerate random password\n"
                 "  -h hash\tpassword scheme\n"                  "  -h hash\tpassword scheme\n"
                   "  -n\t\tomit trailing newline\n"
                 "  -s secret\tnew password\n"                  "  -s secret\tnew password\n"
                 "  -c format\tcrypt(3) salt format\n"  
                 "  -u\t\tgenerate RFC2307 values (default)\n"                  "  -u\t\tgenerate RFC2307 values (default)\n"
                 "  -v\t\tincrease verbosity\n"                  "  -v\t\tincrease verbosity\n"
                 "  -T file\tread file for new password\n"                  "  -T file\tread file for new password\n"
Line 57  usage(const char *s) Line 62  usage(const char *s)
 int  int
 slappasswd( int argc, char *argv[] )  slappasswd( int argc, char *argv[] )
 {  {
         char    *scheme = "{SSHA}";  #ifdef LUTIL_SHA1_BYTES
           char    *default_scheme = "{SSHA}";
   #else
           char    *default_scheme = "{SMD5}";
   #endif
           char    *scheme = default_scheme;
   
         char    *newpw = NULL;          char    *newpw = NULL;
         char    *pwfile = NULL;          char    *pwfile = NULL;
         const char *text;          const char *text;
         const char *progname = "slappasswd";          const char *progname = "slappasswd";
   
         int             i;          int             i;
         struct berval passwd;          char            *newline = "\n";
         struct berval *hash = NULL;          struct berval passwd = BER_BVNULL;
           struct berval hash;
   
         while( (i = getopt( argc, argv,          while( (i = getopt( argc, argv,
                 "c:d:h:s:T:vu" )) != EOF )                  "c:d:gh:ns:T:vu" )) != EOF )
         {          {
                 switch (i) {                  switch (i) {
                 case 'c':       /* crypt salt format */                  case 'c':       /* crypt salt format */
Line 76  slappasswd( int argc, char *argv[] ) Line 88  slappasswd( int argc, char *argv[] )
                         lutil_salt_format( optarg );                          lutil_salt_format( optarg );
                         break;                          break;
   
                   case 'g':       /* new password (generate) */
                           if ( pwfile != NULL ) {
                                   fprintf( stderr, "Option -g incompatible with -T\n" );
                                   return EXIT_FAILURE;
   
                           } else if ( newpw != NULL ) {
                                   fprintf( stderr, "New password already provided\n" );
                                   return EXIT_FAILURE;
   
                           } else if ( lutil_passwd_generate( &passwd, 8 )) {
                                   fprintf( stderr, "Password generation failed\n" );
                                   return EXIT_FAILURE;
                           }
                           break;
   
                 case 'h':       /* scheme */                  case 'h':       /* scheme */
                         scheme = strdup( optarg );                          if ( scheme != default_scheme ) {
                                   fprintf( stderr, "Scheme already provided\n" );
                                   return EXIT_FAILURE;
   
                           } else {
                                   scheme = ch_strdup( optarg );
                           }
                           break;
   
                   case 'n':
                           newline = "";
                         break;                          break;
   
                 case 's':       /* new password (secret) */                  case 's':       /* new password (secret) */
                         {                          if ( pwfile != NULL ) {
                                   fprintf( stderr, "Option -s incompatible with -T\n" );
                                   return EXIT_FAILURE;
   
                           } else if ( newpw != NULL ) {
                                   fprintf( stderr, "New password already provided\n" );
                                   return EXIT_FAILURE;
   
                           } else {
                                 char* p;                                  char* p;
                                 newpw = strdup( optarg );                                  newpw = ch_strdup( optarg );
   
                                 for( p = optarg; *p != '\0'; p++ ) {                                  for( p = optarg; *p != '\0'; p++ ) {
                                         *p = '\0';                                          *p = '\0';
                                 }                                  }
                         } break;                          }
                           break;
   
                 case 'T':       /* password file */                  case 'T':       /* password file */
                           if ( pwfile != NULL ) {
                                   fprintf( stderr, "Password file already provided\n" );
                                   return EXIT_FAILURE;
   
                           } else if ( newpw != NULL ) {
                                   fprintf( stderr, "Option -T incompatible with -s/-g\n" );
                                   return EXIT_FAILURE;
   
                           }
                         pwfile = optarg;                          pwfile = optarg;
                         break;                          break;
   
Line 114  slappasswd( int argc, char *argv[] ) Line 169  slappasswd( int argc, char *argv[] )
                 if( lutil_get_filed_password( pwfile, &passwd )) {                  if( lutil_get_filed_password( pwfile, &passwd )) {
                         return EXIT_FAILURE;                          return EXIT_FAILURE;
                 }                  }
         } else {          } else if ( BER_BVISEMPTY( &passwd )) {
                 if( newpw == NULL ) {                  if( newpw == NULL ) {
                         /* prompt for new password */                          /* prompt for new password */
                         char *cknewpw;                          char *cknewpw;
                         newpw = strdup(getpassphrase("New password: "));                          newpw = ch_strdup(getpassphrase("New password: "));
                         cknewpw = getpassphrase("Re-enter new password: ");                          cknewpw = getpassphrase("Re-enter new password: ");
                   
                         if( strcmp( newpw, cknewpw )) {                          if( strcmp( newpw, cknewpw )) {
Line 129  slappasswd( int argc, char *argv[] ) Line 184  slappasswd( int argc, char *argv[] )
   
                 passwd.bv_val = newpw;                  passwd.bv_val = newpw;
                 passwd.bv_len = strlen(passwd.bv_val);                  passwd.bv_len = strlen(passwd.bv_val);
           } else {
                   hash = passwd;
                   goto print_pw;
         }          }
   
         hash = lutil_passwd_hash( &passwd, scheme, &text );          lutil_passwd_hash( &passwd, scheme, &hash, &text );
         if( hash == NULL || hash->bv_val == NULL ) {          if( hash.bv_val == NULL ) {
                 fprintf( stderr,                  fprintf( stderr,
                         "Password generation failed for scheme %s: %s\n",                          "Password generation failed for scheme %s: %s\n",
                         scheme, text ? text : "" );                          scheme, text ? text : "" );
                 return EXIT_FAILURE;                  return EXIT_FAILURE;
         }          }
   
         if( lutil_passwd( hash, &passwd, NULL, &text ) ) {          if( lutil_passwd( &hash, &passwd, NULL, &text ) ) {
                 fprintf( stderr, "Password verification failed. %s\n",                  fprintf( stderr, "Password verification failed. %s\n",
                         text ? text : "" );                          text ? text : "" );
                 return EXIT_FAILURE;                  return EXIT_FAILURE;
         }          }
   
         printf( "%s\n" , hash->bv_val );  print_pw:;
           printf( "%s%s" , hash.bv_val, newline );
         return EXIT_SUCCESS;          return EXIT_SUCCESS;
 }  }

Removed from v.1.1  
changed lines
  Added in v.1.5.2.5


______________
© Copyright 1998-2020, OpenLDAP Foundation, info@OpenLDAP.org