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