Skip to content

Commit

Permalink
Factor out krb5int_random_string() routine
Browse files Browse the repository at this point in the history
Make krb5int_random_string() function available outside ccache code.
Move it into a separate file under lib/krb5/krb hierarchy.
  • Loading branch information
tsitkov committed Sep 24, 2013
1 parent bf6734e commit ee61e4a
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 40 deletions.
4 changes: 4 additions & 0 deletions src/include/k5-int.h
Original file line number Diff line number Diff line change
Expand Up @@ -1739,6 +1739,10 @@ krb5_ser_unpack_bytes(krb5_octet *, size_t, krb5_octet **, size_t *);
krb5_error_code KRB5_CALLCONV
krb5int_cc_default(krb5_context, krb5_ccache *);

/* Fill in the buffer with random alpha-numeric data. */
krb5_error_code
krb5int_random_string(krb5_context, char *string, unsigned int length);

/* value to use when requesting a keytab entry and KVNO doesn't matter */
#define IGNORE_VNO 0
/* value to use when requesting a keytab entry and enctype doesn't matter */
Expand Down
2 changes: 0 additions & 2 deletions src/lib/krb5/ccache/cc-int.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,6 @@ krb5int_cc_initialize(void);
void
krb5int_cc_finalize(void);

krb5_error_code krb5int_random_string (krb5_context, char *, unsigned int);

/*
* Cursor for iterating over ccache types
*/
Expand Down
38 changes: 0 additions & 38 deletions src/lib/krb5/ccache/cc_memory.c
Original file line number Diff line number Diff line change
Expand Up @@ -513,44 +513,6 @@ krb5_mcc_generate_new (krb5_context context, krb5_ccache *id)
return KRB5_OK;
}

/* Utility routine: Creates a random memory ccache name.
* This algorithm was selected because it creates readable
* random ccache names in a fixed size buffer. */

krb5_error_code
krb5int_random_string (krb5_context context, char *string, unsigned int length)
{
static const unsigned char charlist[] =
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
krb5_error_code err = 0;
unsigned char *bytes = NULL;
unsigned int bytecount = length - 1;

if (!err) {
bytes = malloc (bytecount);
if (bytes == NULL) { err = ENOMEM; }
}

if (!err) {
krb5_data data;
data.length = bytecount;
data.data = (char *) bytes;
err = krb5_c_random_make_octets (context, &data);
}

if (!err) {
unsigned int i;
for (i = 0; i < bytecount; i++) {
string [i] = charlist[bytes[i] % (sizeof (charlist) - 1)];
}
string[length - 1] = '\0';
}

if (bytes != NULL) { free (bytes); }

return err;
}

/*
* Requires:
* id is a file credential cache
Expand Down
3 changes: 3 additions & 0 deletions src/lib/krb5/krb/Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ STLIBOBJS= \
gic_opt_set_pa.o \
princ_comp.o \
privsafe.o \
random_str.o \
rd_cred.o \
rd_error.o \
rd_priv.o \
Expand Down Expand Up @@ -191,6 +192,7 @@ OBJS= $(OUTPRE)addr_comp.$(OBJEXT) \
$(OUTPRE)gic_opt_set_pa.$(OBJEXT) \
$(OUTPRE)princ_comp.$(OBJEXT) \
$(OUTPRE)privsafe.$(OBJEXT) \
$(OUTPRE)random_str.$(OBJEXT) \
$(OUTPRE)rd_cred.$(OBJEXT) \
$(OUTPRE)rd_error.$(OBJEXT) \
$(OUTPRE)rd_priv.$(OBJEXT) \
Expand Down Expand Up @@ -300,6 +302,7 @@ SRCS= $(srcdir)/addr_comp.c \
$(srcdir)/gic_opt_set_pa.c \
$(srcdir)/princ_comp.c \
$(srcdir)/privsafe.c \
$(srcdir)/random_str.c \
$(srcdir)/rd_cred.c \
$(srcdir)/rd_error.c \
$(srcdir)/rd_priv.c \
Expand Down
68 changes: 68 additions & 0 deletions src/lib/krb5/krb/random_str.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/* -*- mode: c; c-basic-offset: 4; indent-tabs-mode: nil -*- */
/* lib/krb5/krb/random_str.c - Definition of krb5int_random_string() */
/*
* Copyright (C) 2013 by the Massachusetts Institute of Technology.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * 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 COPYRIGHT HOLDERS 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
* COPYRIGHT HOLDER 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.
*/

#include "k5-int.h"

/* Utility routine: Creates a readable random string in a fixed size buffer. */
krb5_error_code
krb5int_random_string(krb5_context context, char *string, unsigned int length)
{
static const unsigned char charlist[] =
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
krb5_error_code err = 0;
unsigned char *bytes = NULL;
unsigned int bytecount = length - 1;

if (!err) {
bytes = malloc (bytecount);
if (bytes == NULL) { err = ENOMEM; }
}

if (!err) {
krb5_data data;
data.length = bytecount;
data.data = (char *) bytes;
err = krb5_c_random_make_octets (context, &data);
}

if (!err) {
unsigned int i;
for (i = 0; i < bytecount; i++) {
string [i] = charlist[bytes[i] % (sizeof (charlist) - 1)];
}
string[length - 1] = '\0';
}

if (bytes != NULL) { free (bytes); }

return err;
}
1 change: 1 addition & 0 deletions src/lib/krb5/libkrb5.exports
Original file line number Diff line number Diff line change
Expand Up @@ -609,6 +609,7 @@ krb5int_get_authdata_containee_types
krb5int_init_context_kdc
krb5int_initialize_library
krb5int_parse_enctype_list
krb5int_random_string
krb5int_trace
profile_abandon
profile_add_relation
Expand Down

0 comments on commit ee61e4a

Please sign in to comment.