File: writekeyfile.c

package info (click to toggle)
openafs 1.8.14-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 42,972 kB
  • sloc: ansic: 455,934; xml: 66,858; perl: 11,967; makefile: 10,038; sh: 7,955; objc: 6,354; java: 5,638; cpp: 2,268; asm: 1,214; yacc: 441; tcl: 249; lex: 201; csh: 85
file content (86 lines) | stat: -rw-r--r-- 2,154 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/* This is a simple program which originally produced the KeyFile used
 * by the test suite. The contents of that file shouldn't be regenerated,
 * though, as the purpose of the tests using that file is to ensure that we
 * can still read old KeyFiles.
 */

#include <afsconfig.h>
#include <afs/param.h>
#include <afs/cellconfig.h>
#include <afs/afsutil.h>

#include <roken.h>

int
main(int argc, char **argv)
{
    struct afsconf_dir *dir;
    char buffer[1024];
    char *block;
    char *dirEnd;
    FILE *file;
    int in, out;
    size_t len;
    int code;

    snprintf(buffer, sizeof(buffer), "%s/afs_XXXXXX", gettmpdir());
    mkdtemp(buffer);
    dirEnd = buffer + strlen(buffer);

    /* Create a CellServDB file */
    strcpy(dirEnd, "/CellServDB");
    file = fopen(buffer, "w");
    fprintf(file, ">example.org # An example cell\n");
    fprintf(file, "127.0.0.1 #test.example.org\n");
    fclose(file);

    /* Create a ThisCell file */
    strcpy(dirEnd, "/ThisCell");
    file = fopen(buffer, "w");
    fprintf(file, "example.org\n");
    fclose(file);

    *dirEnd='\0';
    dir = afsconf_Open(strdup(buffer));
    if (dir == NULL) {
	fprintf(stderr, "Unable to open configuration directory\n");
	exit(1);
    }

    afsconf_AddKey(dir, 1, "\x01\x02\x04\x08\x10\x20\x40\x80", 1);
    afsconf_AddKey(dir, 2, "\x04\x04\x04\x04\x04\x04\x04\x04", 1);
    afsconf_AddKey(dir, 4, "\x19\x16\xfe\xe6\xba\x77\x2f\xfd", 1);

    afsconf_Close(dir);

    /* Copy out the resulting keyfile into our homedirectory */
    strcpy(dirEnd, "/KeyFile");
    in = open(buffer, O_RDONLY);
    out = open("KeyFile", O_WRONLY | O_CREAT, 0644);

    block = malloc(1024);
    do {
	len = read(in, block, 1024);
	if (len > 0)
	    write(out, block, len);
    } while (len > 0);

    if (len == -1) {
	fprintf(stderr, "I/O error whilst copying file\n");
        exit(1);
    }

    close(in);
    close(out);

    strcpy(dirEnd, "/KeyFile");
    unlink(buffer);
    strcpy(dirEnd, "/CellServDB");
    unlink(buffer);
    strcpy(dirEnd, "/ThisCell");
    unlink(buffer);
    strcpy(dirEnd, "/UserList");
    unlink(buffer);
    *dirEnd='\0';
    rmdir(buffer);
}