testing program, add random users
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@8348 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		
							
								
								
									
										155
									
								
								kadmin/add-random-users.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								kadmin/add-random-users.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,155 @@ | ||||
| /* | ||||
|  * Copyright (c) 2000 Kungliga Tekniska H<>gskolan | ||||
|  * (Royal Institute of Technology, Stockholm, Sweden).  | ||||
|  * All rights reserved.  | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without  | ||||
|  * modification, are permitted provided that the following conditions  | ||||
|  * are met:  | ||||
|  * | ||||
|  * 1. Redistributions of source code must retain the above copyright  | ||||
|  *    notice, this list of conditions and the following disclaimer.  | ||||
|  * | ||||
|  * 2. 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.  | ||||
|  * | ||||
|  * 3. Neither the name of the Institute nor the names of its contributors  | ||||
|  *    may be used to endorse or promote products derived from this software  | ||||
|  *    without specific prior written permission.  | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE 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 INSTITUTE 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 "kadmin_locl.h" | ||||
|  | ||||
| RCSID("$Id$"); | ||||
|  | ||||
| #define WORDS_FILENAME "/usr/share/dict/words" | ||||
|  | ||||
| #define NUSERS 1000 | ||||
|  | ||||
| static unsigned | ||||
| read_words (const char *filename, char ***ret_w) | ||||
| { | ||||
|     unsigned n, alloc; | ||||
|     FILE *f; | ||||
|     char buf[256]; | ||||
|     char **w = NULL; | ||||
|  | ||||
|     f = fopen (filename, "r"); | ||||
|     if (f == NULL) | ||||
| 	err (1, "cannot open %s", filename); | ||||
|     alloc = n = 0; | ||||
|     while (fgets (buf, sizeof(buf), f) != NULL) { | ||||
| 	if (buf[strlen (buf) - 1] == '\n') | ||||
| 	    buf[strlen (buf) - 1] = '\0'; | ||||
| 	if (n >= alloc) { | ||||
| 	    alloc += 16; | ||||
| 	    w = erealloc (w, alloc * sizeof(char **)); | ||||
| 	} | ||||
| 	w[n++] = estrdup (buf); | ||||
|     } | ||||
|     *ret_w = w; | ||||
|     return n; | ||||
| } | ||||
|  | ||||
| static void | ||||
| add_user (krb5_context context, void *kadm_handle, | ||||
| 	  unsigned nwords, char **words) | ||||
| { | ||||
|     kadm5_principal_ent_rec princ; | ||||
|     char name[64]; | ||||
|     int r1, r2; | ||||
|     krb5_error_code ret; | ||||
|     int mask; | ||||
|  | ||||
|     r1 = rand(); | ||||
|     r2 = rand(); | ||||
|  | ||||
|     snprintf (name, sizeof(name), "%s%d", words[r1 % nwords], r2 % 1000); | ||||
|  | ||||
|     mask = KADM5_PRINCIPAL; | ||||
|  | ||||
|     memset(&princ, 0, sizeof(princ)); | ||||
|     ret = krb5_parse_name(context, name, &princ.principal); | ||||
|     if (ret) | ||||
| 	krb5_err(context, 1, ret, "krb5_parse_name"); | ||||
|  | ||||
|     ret = kadm5_create_principal (kadm_handle, &princ, mask, name); | ||||
|     if (ret) | ||||
| 	krb5_err (context, 1, ret, "kadm5_create_principal"); | ||||
|     kadm5_free_principal_ent(kadm_handle, &princ); | ||||
|     printf ("%s\n", name); | ||||
| } | ||||
|  | ||||
| static void | ||||
| add_users (unsigned n) | ||||
| { | ||||
|     krb5_error_code ret; | ||||
|     int i; | ||||
|     void *kadm_handle; | ||||
|     krb5_context context; | ||||
|     unsigned nwords; | ||||
|     char **words; | ||||
|  | ||||
|     krb5_init_context(&context); | ||||
|     ret = kadm5_s_init_with_password_ctx(context,  | ||||
| 					 KADM5_ADMIN_SERVICE, | ||||
| 					 NULL, | ||||
| 					 KADM5_ADMIN_SERVICE, | ||||
| 					 NULL, 0, 0,  | ||||
| 					 &kadm_handle); | ||||
|     if(ret) | ||||
| 	krb5_err(context, 1, ret, "kadm5_init_with_password"); | ||||
|  | ||||
|     nwords = read_words (WORDS_FILENAME, &words); | ||||
|      | ||||
|     for (i = 0; i < n; ++i) | ||||
| 	add_user (context, kadm_handle, nwords, words); | ||||
|     kadm5_destroy(kadm_handle); | ||||
|     krb5_free_context(context); | ||||
| } | ||||
|  | ||||
| static int version_flag	= 0; | ||||
| static int help_flag	= 0; | ||||
|  | ||||
| static struct getargs args[] = { | ||||
|     { "version", 	0,   arg_flag, &version_flag }, | ||||
|     { "help",		0,   arg_flag, &help_flag } | ||||
| }; | ||||
|  | ||||
| static void | ||||
| usage (int ret) | ||||
| { | ||||
|     arg_printusage (args, | ||||
| 		    sizeof(args)/sizeof(*args), | ||||
| 		    NULL, | ||||
| 		    NULL); | ||||
|     exit (ret); | ||||
| } | ||||
|  | ||||
| int | ||||
| main(int argc, char **argv) | ||||
| { | ||||
|     int optind = 0; | ||||
|  | ||||
|     set_progname(argv[0]); | ||||
|     if(getarg(args, sizeof(args) / sizeof(args[0]), argc, argv, &optind)) | ||||
| 	usage(1); | ||||
|     if (help_flag) | ||||
| 	usage (0); | ||||
|     srand (0); | ||||
|     add_users (NUSERS); | ||||
|     return 0; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Assar Westerlund
					Assar Westerlund