X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/blobdiff_plain/c2b9f136517e8cbadfa9422ec2cc964e9ab2afd4..f3f86c75f1f8288cafa999fe614c6e7a6cbb9150:/db/conv.qc diff --git a/db/conv.qc b/db/conv.qc new file mode 100644 index 00000000..f64127a8 --- /dev/null +++ b/db/conv.qc @@ -0,0 +1,203 @@ +/* $Header$ */ + +/* (c) Copyright 1988 by the Massachusetts Institute of Technology. */ +/* For copying and distribution information, please see the file */ +/* . */ + + +#include +#include +#include +#include + +char prefix[256]; + +main(argc, argv) +int argc; +char **argv; +{ +## char *db; + + if (argc == 2) + db = argv[1]; + else + db = "sms"; + + printf("Prefix of backup to restore: "); + fflush(stdout); + if (gets(prefix) == NULL) { + return 1; + } + + printf("Opening database..."); + fflush(stdout); +## ingres db + printf("done\n"); + + do_users(); + do_finger(); + do_mach(); + do_clu(); + do_mcm(); + do_cld(); + do_servers(); + do_serverhosts(); + do_list(); + do_maillists(); + do_groups(); + do_members(); + do_strings(); + do_pobox(); + do_nfsphys(); + do_filesys(); + do_nfsquota(); + do_services(); + do_printcap(); + do_alias(); + do_values(); + + printf("All done.\n"); +## exit +} + +char field_chars[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, /* ^@ - ^O */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ^P - ^_ */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* SP - / */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, /* 0 - ? */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* @ - O */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* P - _ */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ` - o */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* p - ^? */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; + + +int parse_int(f) + register FILE *f; +{ + register int c; + register int val = 0; + register int sign = 1; + while ((c = getc(f)) != EOF && field_chars[c] == 0) { + if (c == '-') sign = -1; + else if (isdigit(c)) { + val *= 10; + val += (c - '0'); + } else (void) fprintf(stderr,"non-digit in numeric field\n"); + } + (void) ungetc(c, f); + return(val * sign); +} + +void parse_str(f, buf, len) + register FILE *f; + register char *buf; + register int len; /* incl trailing NULL */ +{ + register int c; + + while ((c = getc(f)) != EOF && field_chars[c] == 0 && len > 0) { + if (c == '\\') { + c = getc(f); + if (isdigit(c)) { + /* Expect three-digit octal number.. */ + register int c1, c2; + c1 = getc(f); + c2 = getc(f); + if (!isdigit(c1) || !isdigit(c2)) + punt("Broken \\###"); + /* Convert to ASCII code: */ + *buf++ = (((c-'0')<<6) + ((c1-'0')<<3) + c2-'0'); + } else if (c == '\\' || c == ':') { + *buf++ = c; + --len; + } else punt ("Broken '\\'"); + } else { + *buf++ = c; + --len; + } + } + if (c == EOF) + return; + + if (c != EOF && c != ':' && c != '\n') { + fprintf(stderr, "Field too wide, truncated\n"); + while ((c = getc(f)) != EOF && c != ':' && c != '\n'); + (void) ungetc(c, f); + } else { + *buf++ = 0; + (void) ungetc(c, f); + } +} + +void parse_sep(f) + FILE *f; +{ + if (getc(f) != ':') punt("Expected colon"); +} +void parse_nl(f) + FILE *f; +{ + if (getc(f) != '\n') punt("Expected newline"); +} + + +FILE *open_file(suffix) + char *suffix; +{ + char name[BUFSIZ]; + int fd; + FILE *f; + + sprintf(name, "%s/%s", prefix, suffix); + + fd = open(name, O_RDONLY, 0); + if (fd < 0) { + punt(name); + } + f = fdopen(fd, "r"); + if (f == NULL) { + fprintf(stderr, "fdopen of "); + punt(name); + } + fprintf(stderr, "Working on %s\n", name); + return(f); +} + +punt(s) +char *s; +{ + printf("exiting: %s\n", s); + exit(1); +} + +static int count; +static int interval; + +start_counter(x) +int x; +{ + count = 0; + interval = x; +} + +inc_count() +{ + if (count++ % interval == 0) { + printf("\r%d...", count - 1); + fflush(stdout); + } +} + +end_counter() +{ + printf("\r%d items processed.\n", count); +}