xref: /freebsd/crypto/krb5/src/plugins/kdb/db2/libdb2/test/hash2.tests/passtest.c (revision 7f2fe78b9dd5f51c821d771b63d2e096f6fd49e9)
1 #include "db-int.h"
2 #include <fcntl.h>
3 #include <stdio.h>
4 #include <string.h>
5 
6 extern int hash_expansions;
7 
8 int
main(void)9 main(void)
10 {
11     FILE *keys, *vals;
12     DB *db;
13     DBT key, val;
14     char *key_line, *val_line, *get_key, *get_val, *old, *key2;
15     HASHINFO passwd;
16     int n = 0, i = 0, expected;
17 
18     key_line = (char *)malloc(100);
19     val_line = (char *)malloc(300);
20     old = (char *)malloc(300);
21 
22     keys = fopen("yp.keys", "rt");
23     vals = fopen("yp.total", "rt");
24 
25     passwd.bsize =  1024;
26     passwd.cachesize = 1024 * 1024;
27     passwd.ffactor = 10;
28     passwd.hash = NULL;
29     passwd.nelem = 0;
30     passwd.lorder = 4321;
31 
32 
33     db = dbopen("/usr/tmp/passwd.db", O_RDWR|O_CREAT|O_TRUNC|O_BINARY, 0664, DB_HASH,
34 		&passwd);
35     if (!db) {
36 	fprintf(stderr, "create_db: couldn't create database file\n");
37 	exit(1);
38     }
39 
40     while ((key_line = fgets(key_line, 100, keys)) != NULL) {
41 	if (n % 1000 == 0)
42 	  fprintf(stderr, "Putting #%d.\n", n);
43 	n++;
44 	fgets(val_line, 300, vals);
45 	key.size = strlen(key_line);
46 	key.data = (void *)key_line;
47 	val.size = strlen(val_line);
48 	val.data = (void *)val_line;
49 	if (db->put(db, &key, &val, 0) != 0)
50 	  fprintf(stderr, "Put error, n = %d\n", n);
51 	if (db->get(db, &key, &val, 0) != 0)
52 	  fprintf(stderr, "Immediate get error, n = %d\n", n);
53     }
54     fprintf(stderr, "Done with put!\n");
55     free(key_line);
56     free(val_line);
57     fclose(keys);
58     fclose(vals);
59     db->close(db);
60 
61 
62 
63 
64     keys = fopen("yp.keys", "rt");
65     vals = fopen("yp.total", "rt");
66     get_key = (char *)malloc(100);
67     get_val = (char *)malloc(300);
68 
69     db = dbopen("/usr/tmp/passwd.db", O_RDWR|O_BINARY, 0664, DB_HASH, &passwd);
70     if (!db)
71       fprintf(stderr, "Could not open db!\n");
72     n = 0;
73     while ((get_key = fgets(get_key, 100, keys)) != NULL) {
74 	n++;
75 	if (n % 1000 == 0)
76 	  fprintf(stderr, "Getting #%d.\n", n);
77 	key.size = strlen(get_key);
78 	key.data = (void *)get_key;
79 	if (db->get(db, &key, &val, 0) != 0)
80 	  fprintf(stderr, "Retrieval error on %s\n", get_key);
81 	fgets(get_val, 300, vals);
82 	if (memcmp(val.data, (void *)get_val, val.size)) {
83 	    fprintf(stderr, "Unmatched get on %s.\n", get_key);
84 	    fprintf(stderr, "Input = %s\nOutput = %s\n", get_val,
85 		    (char *)val.data);
86 	}
87     }
88     expected = n;
89     fclose(vals);
90     fclose(keys);
91     free(get_key);
92     free(get_val);
93     db->close(db);
94 
95 
96 
97 
98     get_key = (char *)malloc(100);
99     get_val = (char *)malloc(300);
100 
101     db = dbopen("/usr/tmp/passwd.db", O_RDWR, 0664, DB_HASH, &passwd);
102     if (!db)
103       fprintf(stderr, "Could not open db!\n");
104     n = 0;
105     for (;;) {
106 	n++;
107 	if (n % 1000 == 0)
108 	  fprintf(stderr, "Sequence getting #%d.\n", n);
109 	if (db->seq(db, &key, &val, 0) != 0) {
110 	    fprintf(stderr,
111 		    "Exiting sequence retrieve; n = %d, expected = %d\n",
112 		    n - 1 , expected);
113 	    break;
114 	}
115     }
116     free(get_key);
117     free(get_val);
118     db->close(db);
119 
120     get_key = (char *)malloc(100);
121     key2 = (char *)malloc(100);
122 
123     keys = fopen("yp.keys", "rt");
124     vals = fopen("yp.total", "rt");
125 
126     db = dbopen("/usr/tmp/passwd.db", O_RDWR|O_BINARY, 0664, DB_HASH, &passwd);
127     n = 0;
128     while ((get_key = fgets(get_key, 100, keys)) != NULL) {
129 	if (n % 1000 == 0)
130 	  fprintf(stderr, "Deleting #%d.\n", n);
131 	n+=2;
132 	key2 = fgets(get_key, 100, keys);
133 	if (!key2)
134 	  break;
135 	key.data = (void *)key2;
136 	key.size = strlen(key2);
137 	if (db->del(db, &key, 0) != 0)
138 	  fprintf(stderr, "Delete error on %d", n);
139     }
140 
141     db->close(db);
142     free(get_key);
143     free(key2);
144     fclose(keys);
145     fclose(vals);
146 
147     get_key = (char *)malloc(100);
148     key2 = (char *)malloc(100);
149     get_val = (char *)malloc(300);
150 
151     keys = fopen("yp.keys", "rt");
152     vals = fopen("yp.total", "rt");
153 
154     db = dbopen("/usr/tmp/passwd.db", O_RDWR|O_BINARY, 0664, DB_HASH, &passwd);
155     n = 0;
156     while ((get_key = fgets(get_key, 100, keys)) != NULL) {
157 	n += 2;
158 	if (n % 1000 == 0)
159 	  fprintf(stderr, "Re-retrieving #%d.\n", n);
160 	key2 = fgets(key2, 100, keys);
161 	if (!key2)
162 	  break;
163 	key.data = (void *)get_key;
164 	key.size = strlen(get_key);
165 	if (db->get(db, &key, &val, 0) != 0)
166 	  fprintf(stderr, "Retrieval after delete error on %d\n", n);
167 	fgets(get_val, 300, vals);
168 	if (memcmp(val.data, (void *)get_val, val.size)) {
169 	    fprintf(stderr, "Unmatched get after delete on %s.\n", get_key);
170 	    fprintf(stderr, "Input = %s\nOutput = %s\n", get_val,
171 		    (char *)val.data);
172 	}
173 	fgets(get_val, 300, vals);
174     }
175 
176     db->close(db);
177     free(get_key);
178     free(key2);
179     free(get_val);
180     fclose(keys);
181     fclose(vals);
182 
183     exit(0);
184 }
185