head 1.20;
access;
symbols;
locks; strict;
comment @ * @;
1.20
date 94.03.13.20.11.57; author paul; state Exp;
branches;
next 1.19;
1.19
date 94.03.12.03.54.09; author paul; state Exp;
branches;
next 1.18;
1.18
date 94.03.12.00.59.25; author paul; state Exp;
branches;
next 1.17;
1.17
date 94.03.09.17.14.27; author paul; state Exp;
branches;
next 1.16;
1.16
date 94.01.07.18.05.42; author paul; state Exp;
branches;
next 1.15;
1.15
date 93.10.11.16.11.01; author paul; state Exp;
branches;
next 1.14;
1.14
date 93.05.06.04.07.25; author paul; state Exp;
branches;
next 1.13;
1.13
date 93.04.16.02.11.11; author paul; state Exp;
branches;
next 1.12;
1.12
date 93.04.02.16.14.43; author paul; state Exp;
branches;
next 1.11;
1.11
date 93.04.01.16.27.58; author paul; state Exp;
branches;
next 1.10;
1.10
date 93.02.14.19.56.35; author paul; state Exp;
branches;
next 1.9;
1.9
date 93.01.23.19.59.39; author paul; state Exp;
branches;
next 1.8;
1.8
date 92.12.12.19.11.39; author paul; state Exp;
branches;
next 1.7;
1.7
date 92.08.17.13.41.41; author paul; state Exp;
branches;
next 1.6;
1.6
date 92.07.29.04.15.49; author paul; state Exp;
branches;
next 1.5;
1.5
date 92.07.28.16.15.23; author paul; state Exp;
branches;
next 1.4;
1.4
date 92.07.28.05.04.09; author paul; state Exp;
branches;
next 1.3;
1.3
date 92.07.27.22.20.02; author paul; state Exp;
branches;
next 1.2;
1.2
date 92.07.27.19.49.46; author paul; state Exp;
branches;
next 1.1;
1.1
date 92.07.27.19.49.27; author paul; state Exp;
branches;
next ;
desc
@@
1.20
log
@*** empty log message ***
@
text
@/*
* Copyright (c) 1985 Corporation for Research and Educational Networking
* Copyright (c) 1988 University of Illinois Board of Trustees, Steven
* Dorner, and Paul Pomes
* 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. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the Corporation for
* Research and Educational Networking (CREN), the University of
* Illinois at Urbana, and their contributors.
* 4. Neither the name of CREN, the University nor the names of their
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE TRUSTEES 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 TRUSTEES 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.
*/
#ifndef lint
static char RcsId[] = "@@(#)$Id: mdump.c,v 1.19 1994/03/12 03:54:09 paul Exp paul $";
#endif
#include "protos.h"
#include <sys/types.h>
#include <sys/file.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <pwd.h>
int Progress = 0;
static char *Me; /* the name of this program */
extern int Quiet; /* qi/qi.c */
#define LENGTH 80
struct dumptype
{
char *name;
int (*select) ();
int (*dump) ();
};
char Kdomain[50];
struct dumptype * FindDump __P((char *));
char * escapeChars __P((char *));
int sel_students(), sel_other(), sel_rejects(), sel_pubpeople(),
sel_units(), dump_extra(), dump_all(), dump_4merge(), sel_people(),
sel_countpw(), dump_nothing(), sel_email(), sel_all(), sel_weather(),
sel_outsider(), dump_kerb(), sel_kerb(),
dump_email(), dump_aiss(), dump_size(), dump_ruchi(), dump_emdir(),
dump_food(), sel_food(), sel_time(), sel_maggie(), dump_maggie(),
sel_proxy(), dump_proxy(), dump_randy(), sel_files(), dump_files(),
dump_date(), dump_generics();
struct dumptype Dumps[] =
{
"people", sel_people, dump_4merge,
"other", sel_other, dump_all,
"outsider", sel_outsider, dump_all,
"time", sel_time, dump_all,
"rejects", sel_rejects, dump_all,
"units", sel_units, dump_all,
"count_pw", sel_countpw, dump_nothing,
"count_email", sel_email, dump_nothing,
"all", sel_all, dump_all,
"email", sel_email, dump_email,
"weather", sel_weather, dump_all,
"generics", sel_email, dump_generics,
"aiss", sel_email, dump_aiss,
"ruchi", sel_pubpeople, dump_ruchi,
"email_dir", sel_email, dump_emdir,
"entry_sizes", sel_all, dump_size,
"food", sel_food, dump_food,
"maggie", sel_maggie, dump_maggie,
"proxy", sel_proxy, dump_proxy,
"randy", sel_pubpeople, dump_randy,
"files", sel_files, dump_files,
"date", sel_all, dump_date,
"kerberos", sel_kerb, dump_kerb,
0, 0, 0
};
main(argc, argv)
int argc;
char **argv;
{
long entry;
QDIR dirp;
int count;
int selected;
extern struct dirhead DirHead;
struct dumptype *dt;
/* when you're strange, no one remembers your name */
Me = *argv;
while (--argc > 0 && **(++argv) == '-')
{
char *equal, **opt;
(*argv)++;
if (**argv == 'p')
Progress = 1;
else if (**argv == 'q')
Quiet = 1;
else if (equal = (char *)strchr(*argv, '='))
{
*equal++ = 0;
for (opt = Strings; *opt; opt += 2)
if (!strcmp(opt[0], *argv))
{
opt[1] = equal;
break;
}
if (*opt == '\0')
{
fprintf(stderr, "%s: %s: unknown string.\n",
Me, *argv);
exit(1);
}
} else
{
fprintf(stderr, "%s: %s: unknown option.\n", Me, *argv);
exit(1);
}
}
{
char *cp;
(void) strcpy(Kdomain, MAILDOMAIN);
for (cp = Kdomain; *cp; cp++)
if (islower(*cp))
*cp = toupper(*cp);
}
if ((dt = FindDump(*argv)) == NULL)
{
fprintf(stderr, "Usage: mdump [-p] [-q] <dump-type> [<database>]\n");
fprintf(stderr, "available dump types are:\n");
for (dt = Dumps; dt -> name; dt++)
fprintf(stderr, " %s", dt -> name);
putc('\n', stderr);
exit(1);
}
argc--;
argv++;
Database = (argc > 0) ? *argv : DATABASE;
if (!Quiet)
fprintf(stderr, "%s: dumping database %s\n", Me, Database);
DoSysLog(0);
if (!GetFieldConfig())
exit(1);
if (!dbd_init(Database))
exit(1);
get_dir_head();
selected = count = 0;
for (entry = 1; entry < DirHead.nents; entry++)
{
if (Progress && !(entry % 100))
fprintf(stderr, "%d/%d/%d\r", selected, entry, DirHead.nents);
if (dnext_ent(entry) && !ent_dead())
{
count++;
(void) getdata(&dirp);
if ((*dt -> select) (dirp))
{
selected++;
(*dt -> dump) (dirp);
}
MdumpFreeDir(&dirp);
}
#ifdef DEBUG
if (entry % 500 == 0)
fprintf(stderr, " %d/%d\r", entry, DirHead.nents);
#endif
}
fflush(stdout);
if (!Quiet)
fprintf(stderr, "Database %s: %d of %d selected, %d errors.\n",
Database, selected, count, entry - 1 - count);
exit(0);
}
/*
* figure out if a named dump exists
*/
struct dumptype *
FindDump(name)
char *name;
{
struct dumptype *dt;
for (dt = Dumps; dt -> name; dt++)
if (!strcmp(dt -> name, name))
return (dt);
return (NULL);
}
/*
* anybody with an id
*/
sel_id(dirp)
char **dirp;
{
return (*FINDVALUE(dirp, F_UNIVID));
}
/*
* anybody with a proxy
*/
sel_proxy(dirp)
char **dirp;
{
return (*FINDVALUE(dirp, F_PROXY));
}
/*
*
*/
dump_proxy(dirp)
char **dirp;
{
if (*FINDVALUE(dirp, F_ALIAS))
printf("change alias=%s make proxy=\"%s\"\n",
FINDVALUE(dirp, F_ALIAS), escapeChars(FINDVALUE(dirp, F_PROXY)));
else
printf("change %s make proxy=\"%s\"\n",
FINDVALUE(dirp, F_NAME), escapeChars(FINDVALUE(dirp, F_PROXY)));
}
/*
* units (campus unit listing)
*/
sel_units(dirp)
char **dirp;
{
return (strstr(FINDVALUE(dirp, F_TYPE), "unit") != NULL);
}
/*
* timetable
*/
sel_time(dirp)
char **dirp;
{
return (strstr(FINDVALUE(dirp, F_TYPE), "timetable") != NULL);
}
/*
* people - anyone with type "person"
*/
sel_people(dirp)
char **dirp;
{
return (strstr(FINDVALUE(dirp, F_TYPE), "person") != NULL);
}
/*
* outsiders
*/
sel_outsider(dirp)
char **dirp;
{
return (strstr(FINDVALUE(dirp, F_TYPE), "outsider") != NULL);
}
/*
* Kerberos (people and outsiders)
*/
sel_kerb(dirp)
char **dirp;
{
return (strstr(FINDVALUE(dirp, F_TYPE), "person") != NULL ||
strstr(FINDVALUE(dirp, F_TYPE), "outsider") != NULL);
}
sel_pubpeople(dirp)
char **dirp;
{
return (sel_people(dirp) && !*FINDVALUE(dirp, F_SUPPRESS));
}
sel_other(dirp)
char **dirp;
{
return (!sel_people(dirp) && !sel_time(dirp));
}
sel_rejects(dirp)
char **dirp;
{
char *type;
if (sel_people(dirp))
return (0);
if (sel_other(dirp))
return (0);
type = FINDVALUE(dirp, F_TYPE);
if (strstr(type, "food") != NULL)
return (0);
if (strstr(type, "timetable") != NULL)
return (0);
return (1);
}
/*
*
*/
sel_email(dirp)
char **dirp;
{
return (*FINDVALUE(dirp, F_EMAIL) && !*FINDVALUE(dirp, F_SUPPRESS));
}
/*
*
*/
sel_food(dirp)
char **dirp;
{
return (strstr(FINDVALUE(dirp, F_TYPE), "food") != NULL);
}
/*
*
*/
sel_weather(dirp)
char **dirp;
{
return (strstr(FINDVALUE(dirp, F_TYPE), "weather") != NULL);
}
dump_food(dirp)
char **dirp;
{
printf("delete %s\n", FINDVALUE(dirp, F_NAME));
}
/*
*
*/
sel_countpw(dirp)
char **dirp;
{
return (*FINDVALUE(dirp, F_PASSWORD));
}
/*
*
*/
sel_idpw(dirp)
char **dirp;
{
return (*FINDVALUE(dirp, F_UNIVID) || *FINDVALUE(dirp, F_PASSWORD));
}
/*
*
*/
sel_maggie(dirp)
char **dirp;
{
return (sel_people(dirp) && *FINDVALUE(dirp, F_EMAIL));
}
dump_maggie(dirp)
char **dirp;
{
char scratch[300];
char *space;
char *paper = FINDVALUE(dirp, F_PAPER);
char *id = FINDVALUE(dirp, F_UNIVID);
char **opt;
static char *maild = NULL;
/*
* if paper field is "no", we omit the user
*/
if (!strcmp(paper, "no"))
{
printf("%d:%s\t%d:!omit!\n", F_UNIVID, id, F_EMAIL);
return;
}
/*
* if paper field is specific, we grab the first specified address
* if it's <50 characters long, we print it. Otherwise, we fall
* through and print the alias-based address, since > 50 chars is
* unprintable
*/
else if (!strcmp(paper, "specific"))
{
strcpy(scratch, FINDVALUE(dirp, F_EMAIL));
if (space = strtok(scratch, " \n\t,"))
{
if (strlen(space) <= 50)
{
printf("%d:%s\t%d:%s\n", F_UNIVID, id, F_EMAIL, space);
return;
}
}
}
/*
* print the alias-based address
*/
if (maild == NULL)
{
for (opt = Strings; *opt; opt += 2)
if (!strcmp(opt[0], "MAILDOMAIN"))
maild = opt[1];
if (maild == NULL)
{
fprintf(stderr, "Couldn't determine MAILDOMAIN.\n");
exit(1);
}
}
printf("%d:%s\t%d:%s@@%s\n", F_UNIVID, id,
F_EMAIL, FINDVALUE(dirp, F_ALIAS), maild);
}
/*
*
*/
/*ARGSUSED*/
dump_nothing(dirp)
char **dirp;
{
return;
}
/*
*
*/
dump_aiss(dirp)
char **dirp;
{
int len;
char name[51], email[30];
name[sizeof (name) - 1] = email[sizeof (email) - 1] = '\0';
strncpy(name, FINDVALUE(dirp, F_NAME), sizeof (name) - 1);
strncpy(email, FINDVALUE(dirp, F_EMAIL), sizeof (email) - 1);
printf("%-*s %*s\n", sizeof (name) - 1, name, sizeof (email) - 1, email);
}
/*
* Generic addresses for use in IDA generics table
*/
dump_generics(dirp)
char **dirp;
{
printf("%s\t%s\n", FINDVALUE(dirp, F_ALIAS),
FINDVALUE(dirp, F_EMAIL));
}
/*
*
*/
/*ARGSUSED*/
sel_all(dirp)
char **dirp;
{
return (1);
}
dump_email(dirp)
char **dirp;
{
printf("change alias=%s make email=\"%s\"\n", FINDVALUE(dirp, F_ALIAS),
FINDVALUE(dirp, F_EMAIL));
}
/*
*
*/
dump_ruchi(dirp)
char **dirp;
{
#define PUT_OUT(num) printf("$#$%s",escapeChars(FINDVALUE(dirp,num)))
PUT_OUT(F_UNIVID);
PUT_OUT(F_NAME);
PUT_OUT(F_ALIAS);
PUT_OUT(F_EMAIL);
PUT_OUT(F_PHONE);
PUT_OUT(F_ADDRESS);
PUT_OUT(F_DEPARTMENT);
PUT_OUT(F_TITLE);
PUT_OUT(19); /* office location */
PUT_OUT(20); /* home address */
PUT_OUT(23); /* nickname */
PUT_OUT(22); /* office address */
PUT_OUT(32); /* office phone */
PUT_OUT(33); /* home phone */
putchar('\n');
}
/*
*
*/
dump_randy(dirp)
char **dirp;
{
printf("%s\t", escapeChars(FINDVALUE(dirp, F_ALIAS)));
printf("%s\t", escapeChars(FINDVALUE(dirp, F_NAME)));
printf("%s\t", escapeChars(FINDVALUE(dirp, 32)));
printf("%s\n", escapeChars(FINDVALUE(dirp, F_EMAIL)));
}
/*
*
*/
dump_emdir(dirp)
char **dirp;
{
if (*FINDVALUE(dirp, F_DEPARTMENT))
printf("%-25s %s@@%s\n", FINDVALUE(dirp, F_NAME),
FINDVALUE(dirp, F_ALIAS), MAILDOMAIN);
}
/*
*
*/
dump_size(dirp)
char **dirp;
{
int size = 0;
char **sp = dirp;
for (sp = dirp; *sp; sp++)
{
size += strlen(*sp);
size++;
}
printf("%d\n", size);
}
/*
*
*/
dump_all(dirp)
char **dirp;
{
char *colon;
printf("%d:%s", F_UNIVID, escapeChars(FINDVALUE(dirp, F_UNIVID)));
for (; *dirp; dirp++)
if (atoi(*dirp) != F_UNIVID && (colon = (char *)strchr(*dirp, ':')) && colon[1])
{
putchar('\t');
fputs(escapeChars(*dirp), stdout);
}
putchar('\n');
}
/*
*
*/
dump_4merge(dirp)
char **dirp;
{
char *colon;
int f;
char *fdMerge;
int no_up = *FINDVALUE(dirp, 31); /* no_update */
FDESC *fd;
printf("%d:%s", F_UNIVID, escapeChars(FINDVALUE(dirp, F_UNIVID)));
for (; *dirp; dirp++)
{
f = atoi(*dirp);
if (f != F_UNIVID && (colon = (char *)strchr(*dirp, ':')) && colon[1])
{
if (fd = FindFDI(f))
{
if (*fd -> fdMerge)
{
putchar('\t');
fputs(escapeChars(*dirp), stdout);
}
} else
fprintf(stderr, "%s unknown field %d\n", FINDVALUE(dirp, F_NAME), f);
}
}
putchar('\n');
}
/*
* replace tabs and newlines with escaped equivalents
*/
char *
escapeChars(s)
char *s;
{
register char *cp;
static char value[8192];
register char *vp;
vp = value;
for (cp = s; *cp; cp++)
if (*cp == '\t')
{
*vp++ = '\\';
*vp++ = 't';
} else if (*cp == '\n')
{
*vp++ = '\\';
*vp++ = 'n';
} else if (*cp == '\\')
{
*vp++ = '\\';
*vp++ = '\\';
} else
*vp++ = *cp;
*vp = '\0';
return (value);
}
/*
* Free a dir structure (modified for mdump)
*/
MdumpFreeDir(dir)
QDIR *dir;
{
char **p;
if (*dir)
{
for (p = *dir; *p; p++)
free(*p);
/*free(*dir);
*dir = 0;*/
}
}
sel_files(dirp)
char **dirp;
{
return (*FINDVALUE(dirp, 104));
}
dump_files(dirp)
char **dirp;
{
char *token;
for (token = strtok(FINDVALUE(dirp, 104), " \n\t,"); token; token = strtok(NULL, " \t\n,"))
puts(token);
}
dump_date(dirp)
char **dirp;
{
printf("%ld %s\n", CurrentDate(), FINDVALUE(dirp, F_ALIAS));
}
dump_kerb(dirp)
char **dirp;
{
char *alias = FINDVALUE(dirp, F_ALIAS);
char *pass = FINDVALUE(dirp, F_PASSWORD);
if (strlen(alias) > 8 || *pass == '\0')
return;
printf("ank %s@@%s\n%.8s\n", alias, Kdomain, pass);
}
@
1.19
log
@Change return(strstr(a,b)) statements into return(strstr(a,b) != NULL)
@
text
@d38 1
a38 1
static char RcsId[] = "@@(#)$Id: mdump.c,v 1.18 1994/03/12 00:59:25 paul Exp paul $";
a686 51
/*-
* Copyright (c) 1990 The Regents of the University of California.
* All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Chris Torek.
*
* Redistribution and use in source and binary forms are permitted
* provided that: (1) source distributions retain this entire copyright
* notice and comment, and (2) distributions including binaries display
* the following acknowledgement: ``This product includes software
* developed by the University of California, Berkeley and its contributors''
* in the documentation or other materials provided with the distribution
* and in all advertising materials mentioning features or use of this
* software. Neither the name of the University 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@@(#)strstr.c 5.1 (Berkeley) 5/15/90";
#endif /* LIBC_SCCS and not lint */
#ifdef NO_STRSTR
/*
* Find the first occurrence of find in s.
*/
char *
strstr(s, find)
register char *s, *find;
{
register char c, sc;
register int len;
if ((c = *find++) != 0) {
len = strlen(find);
do {
do {
if ((sc = *s++) == 0)
return ((char *) 0);
} while (sc != c);
} while (strncmp(s, find, len) != 0);
s--;
}
return ((char *)s);
}
#endif
@
1.18
log
@New copyright statement.
@
text
@d38 1
a38 1
static char RcsId[] = "@@(#)$Id$";
d258 1
a258 1
return (strstr(FINDVALUE(dirp, F_TYPE), "unit"));
d267 1
a267 1
return (strstr(FINDVALUE(dirp, F_TYPE), "timetable"));
d276 1
a276 1
return (strstr(FINDVALUE(dirp, F_TYPE), "person"));
d285 1
a285 1
return (strstr(FINDVALUE(dirp, F_TYPE), "outsider"));
d294 2
a295 2
return (strstr(FINDVALUE(dirp, F_TYPE), "person") ||
strstr(FINDVALUE(dirp, F_TYPE), "outsider"));
d320 1
a320 1
if (strstr(type, "food"))
d322 1
a322 1
if (strstr(type, "timetable"))
d342 1
a342 1
return (strstr(FINDVALUE(dirp, F_TYPE), "food"));
d351 1
a351 1
return (strstr(FINDVALUE(dirp, F_TYPE), "weather"));
@
1.17
log
@*** empty log message ***
@
text
@a0 1
#include "protos.h"
d2 33
a34 5
* This software is Copyright (C) 1988-1991 by Steven Dorner and the
* University of Illinois Board of Trustees. No warranties of any
* kind are expressed or implied. No support will be provided.
* This software may not be redistributed for commercial purposes.
* You may direct questions to nameserv@@uiuc.edu
d36 6
@
1.16
log
@Replaced index() with strchr().
@
text
@d654 51
@
1.15
log
@Added code to dump kerberos keys.
@
text
@d94 1
a94 1
else if (equal = index(*argv, '='))
d535 1
a535 1
if (atoi(*dirp) != F_UNIVID && (colon = index(*dirp, ':')) && colon[1])
d559 1
a559 1
if (f != F_UNIVID && (colon = index(*dirp, ':')) && colon[1])
@
1.14
log
@Use strstr() to locate type values.
@
text
@d29 2
d37 1
a37 1
sel_outsider(),
d67 1
d115 9
d255 10
d642 11
@
1.13
log
@Quiet now a global in qi/qi.c .
@
text
@d35 1
d45 1
d213 1
a213 1
return (!strcmp(FINDVALUE(dirp, F_TYPE), "unit phone"));
d222 1
a222 1
return (!strncmp(FINDVALUE(dirp, F_TYPE), "timetable", 8));
d231 1
a231 1
return (!stricmp(FINDVALUE(dirp, F_TYPE), "person phone"));
d234 9
d265 1
a265 1
if (!strncmp(type, "food", 4))
d267 1
a267 1
if (!strncmp(type, "timetable", 8))
d287 1
a287 1
return (!strcmp(FINDVALUE(dirp, F_TYPE), "food"));
d296 1
a296 1
return (!strcmp(FINDVALUE(dirp, F_TYPE), "weather"));
@
1.12
log
@Announce which database is being smashed, uhhhh built, and pause 5 seconds.
@
text
@a16 1
int Quiet = 0;
d18 1
@
1.11
log
@Now can modify Strings[] like qi, e.g. prog -DATABASE=/tmp/foo .
@
text
@d122 2
@
1.10
log
@Add support for printing generic addresses for use by IDA sendmail.
@
text
@d18 1
d77 4
a80 1
for (argc--, argv++; argc && **argv == '-'; argc--, argv++)
d82 4
a85 1
if (strcmp(*argv, "-p") == 0)
d87 1
a87 1
else if (strcmp(*argv, "-q") == 0)
d89 20
a108 2
else
break;
d110 1
a110 1
if (argc != 1 && argc != 2 || !(dt = FindDump(argv[0])))
d119 4
a122 8
#ifdef LOG_DAEMON
# ifndef LOG_QILOG
# define LOG_QILOG LOG_DAEMON
# endif /* !LOG_QILOG */
openlog("mdump", LOG_PID, LOG_QILOG);
#else
openlog("mdump", LOG_PID);
#endif
a123 2
{
fprintf(stderr, "Couldn't read prod.cnf.\n");
a124 4
}
argc--; argv++;
if (argc > 0)
(void) strcpy(Database, *argv);
a125 3
{
fprintf(stderr, "%d:Couldn't open database %s.\n",
LR_INTERNAL, Database);
a126 1
}
d151 2
a152 2
fprintf(stderr, "%d of %d selected, %d errors.\n", selected, count,
entry - 1 - count);
@
1.9
log
@*** empty log message ***
@
text
@d37 1
a37 1
dump_date();
d51 1
d387 9
@
1.8
log
@Up-cased all #define's. Made more intelligent about selecting the right
openlog().
@
text
@a92 4
if (argc > 1)
(void) strcpy(Database, *argv);
else
(void) strcpy(Database, DATABASE);
d106 3
d111 2
a112 1
fprintf(stderr, "%d:Couldn't open database.", LR_INTERNAL);
@
1.7
log
@Added openlog() to catch error messages.
@
text
@a15 1
extern char *Database;
d93 12
a104 1
openlog("mdump", LOG_PID, LOG_QILOG);
a109 2
if (argc > 1)
Database = argv[1];
d165 1
a165 1
return (*FindValue(dirp, F_UNIVID));
d174 1
a174 1
return (*FindValue(dirp, F_PROXY));
d183 1
a183 1
if (*FindValue(dirp, F_ALIAS))
d185 1
a185 1
FindValue(dirp, F_ALIAS), escapeChars(FindValue(dirp, F_PROXY)));
d188 1
a188 1
FindValue(dirp, F_NAME), escapeChars(FindValue(dirp, F_PROXY)));
d197 1
a197 1
return (!strcmp(FindValue(dirp, F_TYPE), "unit phone"));
d206 1
a206 1
return (!strncmp(FindValue(dirp, F_TYPE), "timetable", 8));
d215 1
a215 1
return (!stricmp(FindValue(dirp, F_TYPE), "person phone"));
d221 1
a221 1
return (sel_people(dirp) && !*FindValue(dirp, F_SUPPRESS));
d239 1
a239 1
type = FindValue(dirp, F_TYPE);
d253 1
a253 1
return (*FindValue(dirp, F_EMAIL) && !*FindValue(dirp, F_SUPPRESS));
d262 1
a262 1
return (!strcmp(FindValue(dirp, F_TYPE), "food"));
d271 1
a271 1
return (!strcmp(FindValue(dirp, F_TYPE), "weather"));
d277 1
a277 1
printf("delete %s\n", FindValue(dirp, F_NAME));
d286 1
a286 1
return (*FindValue(dirp, F_PASSWORD));
d295 1
a295 1
return (*FindValue(dirp, F_UNIVID) || *FindValue(dirp, F_PASSWORD));
d304 1
a304 1
return (sel_people(dirp) && *FindValue(dirp, F_EMAIL));
d312 4
a315 2
char *paper = FindValue(dirp, F_PAPER);
char *id = FindValue(dirp, F_UNIVID);
d333 1
a333 1
strcpy(scratch, FindValue(dirp, F_EMAIL));
d346 13
a358 2
printf("%d:%s\t%d:%s@@uiuc.edu\n", F_UNIVID, id,
F_EMAIL, FindValue(dirp, F_ALIAS));
d381 2
a382 2
strncpy(name, FindValue(dirp, F_NAME), sizeof (name) - 1);
strncpy(email, FindValue(dirp, F_EMAIL), sizeof (email) - 1);
d401 2
a402 2
printf("change alias=%s make email=\"%s\"\n", FindValue(dirp, F_ALIAS),
FindValue(dirp, F_EMAIL));
d411 1
a411 1
#define PUT_OUT(num) printf("$#$%s",escapeChars(FindValue(dirp,num)))
d435 4
a438 4
printf("%s\t", escapeChars(FindValue(dirp, F_ALIAS)));
printf("%s\t", escapeChars(FindValue(dirp, F_NAME)));
printf("%s\t", escapeChars(FindValue(dirp, 32)));
printf("%s\n", escapeChars(FindValue(dirp, F_EMAIL)));
d447 3
a449 2
printf("%-25s %s@@uiuc.edu\n", FindValue(dirp, F_NAME),
FindValue(dirp, F_ALIAS));
d477 1
a477 1
printf("%d:%s", F_UNIVID, escapeChars(FindValue(dirp, F_UNIVID)));
d496 1
a496 1
int no_up = *FindValue(dirp, 31); /* no_update */
d499 1
a499 1
printf("%d:%s", F_UNIVID, escapeChars(FindValue(dirp, F_UNIVID)));
d513 1
a513 1
fprintf(stderr, "%s unknown field %d\n", FindValue(dirp, F_NAME), f);
d570 1
a570 1
return (*FindValue(dirp, 104));
d578 1
a578 1
for (token = strtok(FindValue(dirp, 104), " \n\t,"); token; token = strtok(NULL, " \t\n,"))
d585 1
a585 1
printf("%ld %s\n", CurrentDate(), FindValue(dirp, F_ALIAS));
@
1.6
log
@Deleted extraneous #include's.
@
text
@d94 1
@
1.5
log
@*** empty log message ***
@
text
@d1 1
a9 1
#include <stdio.h>
a14 6
#include <ctype.h>
#include "protos.h"
#include "qi.h"
#include "field.h"
#include "db.h"
#include "commands.h"
d34 5
a38 4
sel_countpw(), dump_nothing(), sel_email(), sel_all(), dump_email(),
dump_aiss(), dump_size(), dump_ruchi(), dump_emdir(), dump_food(),
sel_food(), sel_time(), sel_maggie(), dump_maggie(), sel_proxy(),
dump_proxy(), dump_randy(), sel_files(), dump_files(), dump_date();
d51 1
d254 9
@
1.4
log
@Random fixes.
@
text
@d16 1
a20 1
#include "protos.h"
@
1.3
log
@Re-formatted for clarity
@
text
@d35 2
a36 1
int sel_students(), sel_other(), sel_rejects(), sel_pubpeople();
d38 6
a43 7
sel_units(), dump_extra(), dump_all(), dump_4merge(), sel_people(),
sel_countpw(), dump_nothing(),
sel_email(), sel_all(),
dump_email(), dump_aiss(), dump_size(),
dump_ruchi(), dump_emdir(), dump_food(), sel_food(),
sel_time(), sel_maggie(), dump_maggie(), sel_proxy(),
dump_proxy(), dump_randy(), sel_files(), dump_files(), dump_date();
d74 1
a74 1
DIR dirp;
a349 1
char *theId;
d469 1
a469 1
FieldDesc *theFD;
d477 1
a477 1
if (theFD = FindFDI(f))
d479 1
a479 1
if (*theFD -> fdMerge)
d526 1
a526 1
DIR *dir;
@
1.2
log
@Added -q option from John Sellens <jmsellen@@math.waterloo.edu>
@
text
@d1 7
a7 7
/*********************************************************************
* This software is Copyright (C) 1988-1991 by Steven Dorner and the
* University of Illinois Board of Trustees. No warranties of any
* kind are expressed or implied. No support will be provided.
* This software may not be redistributed for commercial purposes.
* You may direct questions to dorner@@garcon.cso.uiuc.edu
**********************************************************************/
d23 2
a24 2
int Progress = 0;
int Quiet = 0;
d26 1
a26 1
#define LENGTH 80
a27 4
char *strtok();
char *escapeChars();
char **getdata();
d30 3
a32 3
char *name;
int (*select)();
int (*dump)();
d35 32
a66 31
int sel_students(), sel_other(), sel_rejects(), sel_pubpeople();
sel_units(), dump_extra(), dump_all(), dump_4merge(), sel_people(),
sel_countpw(), dump_nothing(),
sel_email(), sel_all(),
dump_email(), dump_aiss(), dump_size(),
dump_ruchi(), dump_emdir(), dump_food(), sel_food(),
sel_time(), sel_maggie(), dump_maggie(), sel_proxy(),
dump_proxy(), dump_randy(), sel_files(),dump_files(), dump_date();
struct dumptype Dumps[] =
{
"people", sel_people, dump_4merge,
"other", sel_other, dump_all,
"time", sel_time, dump_all,
"rejects", sel_rejects, dump_all,
"units", sel_units, dump_all,
"count_pw", sel_countpw, dump_nothing,
"count_email", sel_email, dump_nothing,
"all", sel_all, dump_all,
"email", sel_email, dump_email,
"aiss", sel_email, dump_aiss,
"ruchi", sel_pubpeople, dump_ruchi,
"email_dir", sel_email, dump_emdir,
"entry_sizes", sel_all, dump_size,
"food", sel_food, dump_food,
"maggie", sel_maggie, dump_maggie,
"proxy", sel_proxy, dump_proxy,
"randy", sel_pubpeople, dump_randy,
"files", sel_files, dump_files,
"date", sel_all, dump_date,
0,0,0
d70 2
a71 2
int argc;
char **argv;
d73 54
a126 54
long theEntry;
Dir theDir;
int count;
int selected;
extern struct dirhead DirHead;
struct dumptype *dt, *FindDump();
for (argc--,argv++;argc && **argv=='-';argc--,argv++) {
if (strcmp(*argv,"-p") == 0)
Progress = 1;
else if (strcmp(*argv,"-q") == 0)
Quiet = 1;
else
break;
}
if (argc != 1 && argc != 2 || !(dt=FindDump(argv[0])))
{
fprintf(stderr,"Usage: mdump [-p] [-q] <dump-type> [<database>]\n");
fprintf(stderr,"available dump types are:\n");
for (dt=Dumps; dt->name; dt++)
fprintf(stderr," %s",dt->name);
putc('\n',stderr);
exit(1);
}
if (!GetFieldConfig())
{
fprintf(stderr,"Couldn't read prod.cnf.\n");
exit(1);
}
if (argc > 1)
Database = argv[1];
if (!dbd_init(Database))
{
fprintf(stderr, "%d:Couldn't open database.", LR_INTERNAL);
exit(1);
}
get_dir_head();
selected = count = 0;
for (theEntry = 1; theEntry < DirHead.nents; theEntry++)
{
if (Progress && !(theEntry%100))
fprintf(stderr,"%d/%d/%d\r",selected,theEntry,DirHead.nents);
if (dnext_ent(theEntry) && !ent_dead())
{
count++;
(void) getdata(&theDir);
if ((*dt->select)(theDir))
{
selected++;
(*dt->dump)(theDir);
}
MdumpFreeDir(&theDir);
}
d128 2
a129 2
if (theEntry % 500 == 0)
fprintf(stderr, " %d/%d\r", theEntry, DirHead.nents);
d131 6
a136 6
}
fflush(stdout);
if ( ! Quiet )
fprintf(stderr, "%d of %d selected, %d errors.\n", selected, count,
theEntry - 1 - count);
exit(0);
d139 3
a141 3
/***********************************************************************
* figure out if a named dump exists
***********************************************************************/
d144 1
a144 1
char *name;
d146 1
a146 1
struct dumptype *dt;
d148 4
a151 4
for (dt=Dumps; dt->name; dt++)
if (!strcmp(dt->name,name))
return(dt);
return(NULL);
d154 1
a154 1
/************************************************************************
d156 3
a158 3
************************************************************************/
sel_id(theDir)
char **theDir;
d160 1
a160 1
return (*FindValue(theDir,F_UNIVID));
d163 1
a163 1
/************************************************************************
d165 3
a167 3
************************************************************************/
sel_proxy(theDir)
char **theDir;
d169 1
a169 1
return (*FindValue(theDir,F_PROXY));
d172 5
a176 5
/************************************************************************
*
************************************************************************/
dump_proxy(theDir)
char **theDir;
d178 6
a183 6
if (*FindValue(theDir,F_ALIAS))
printf("change alias=%s make proxy=\"%s\"\n",
FindValue(theDir,F_ALIAS),escapeChars(FindValue(theDir,F_PROXY)));
else
printf("change %s make proxy=\"%s\"\n",
FindValue(theDir,F_NAME),escapeChars(FindValue(theDir,F_PROXY)));
d186 5
a190 5
/***********************************************************************
* units (campus unit listing)
***********************************************************************/
sel_units(theDir)
char **theDir;
d192 1
a192 1
return (!strcmp(FindValue(theDir,F_TYPE),"unit phone"));
d195 5
a199 5
/***********************************************************************
* timetable
***********************************************************************/
sel_time(theDir)
char **theDir;
d201 1
a201 1
return (!strncmp(FindValue(theDir,F_TYPE),"timetable",8));
d204 1
a204 1
/************************************************************************
d206 3
a208 3
************************************************************************/
sel_people(theDir)
char **theDir;
d210 1
a210 1
return(!stricmp(FindValue(theDir,F_TYPE),"person phone"));
d213 2
a214 2
sel_pubpeople(theDir)
char **theDir;
d216 1
a216 1
return(sel_people(theDir) && !*FindValue(theDir,F_SUPPRESS));
d219 2
a220 2
sel_other(theDir)
char **theDir;
d222 1
a222 1
return(!sel_people(theDir) && !sel_time(theDir));
d225 2
a226 2
sel_rejects(theDir)
char **theDir;
d228 12
a239 7
char *type;
if (sel_people(theDir)) return(0);
if (sel_other(theDir)) return(0);
type=FindValue(theDir,F_TYPE);
if (!strncmp(type,"food",4)) return(0);
if (!strncmp(type,"timetable",8)) return(0);
return(1);
d242 5
a246 5
/************************************************************************
*
************************************************************************/
sel_email(theDir)
char **theDir;
d248 1
a248 1
return (*FindValue(theDir,F_EMAIL) && !*FindValue(theDir,F_SUPPRESS));
d251 5
a255 5
/************************************************************************
*
************************************************************************/
sel_food(theDir)
char **theDir;
d257 1
a257 1
return (!strcmp(FindValue(theDir,F_TYPE),"food"));
d260 2
a261 2
dump_food(theDir)
char **theDir;
d263 1
a263 1
printf("delete %s\n",FindValue(theDir,F_NAME));
d266 5
a270 5
/************************************************************************
*
************************************************************************/
sel_countpw(theDir)
char **theDir;
d272 1
a272 1
return (*FindValue(theDir,F_PASSWORD));
d275 5
a279 5
/************************************************************************
*
************************************************************************/
sel_idpw(theDir)
char **theDir;
d281 1
a281 1
return(*FindValue(theDir,F_UNIVID) || *FindValue(theDir,F_PASSWORD));
d284 5
a288 5
/************************************************************************
*
************************************************************************/
sel_maggie(theDir)
char **theDir;
d290 1
a290 1
return(sel_people(theDir) && *FindValue(theDir,F_EMAIL));
d292 3
a294 2
dump_maggie(theDir)
char **theDir;
d296 41
a336 41
char scratch[300];
char *space;
char *paper = FindValue(theDir,F_PAPER);
char *id = FindValue(theDir,F_UNIVID);
/*
* if paper field is "no", we omit the user
*/
if (!strcmp(paper,"no"))
{
printf("%d:%s\t%d:!omit!\n",F_UNIVID,id,F_EMAIL);
return;
}
/*
* if paper field is specific, we grab the first specified address
* if it's <50 characters long, we print it. Otherwise, we fall
* through and print the alias-based address, since > 50 chars is
* unprintable
*/
else if (!strcmp(paper,"specific"))
{
strcpy(scratch,FindValue(theDir,F_EMAIL));
if (space=strtok(scratch," \n\t,"))
{
if (strlen(space)<=50)
{
printf("%d:%s\t%d:%s\n",F_UNIVID,id,F_EMAIL,space);
return;
}
}
}
/*
* print the alias-based address
*/
printf("%d:%s\t%d:%s@@uiuc.edu\n",F_UNIVID,id,
F_EMAIL, FindValue(theDir,F_ALIAS));
}
/************************************************************************
*
************************************************************************/
d338 2
a339 2
dump_nothing(theDir)
char **theDir;
d341 1
a341 1
return;
d344 5
a348 5
/************************************************************************
*
************************************************************************/
dump_aiss(theDir)
char **theDir;
d350 8
a357 8
char *theId;
int len;
char name[51], email[30];
name[sizeof(name)-1] = email[sizeof(email)-1] = '\0';
strncpy(name,FindValue(theDir,F_NAME),sizeof(name)-1);
strncpy(email,FindValue(theDir,F_EMAIL),sizeof(email)-1);
printf("%-*s %*s\n",sizeof(name)-1,name,sizeof(email)-1,email);
d362 3
a364 3
/************************************************************************
*
************************************************************************/
d366 2
a367 2
sel_all(theDir)
char **theDir;
d369 1
a369 1
return(1);
d372 58
a429 2
dump_email(theDir)
char **theDir;
d431 43
a473 105
printf("change alias=%s make email=\"%s\"\n",FindValue(theDir,F_ALIAS),
FindValue(theDir,F_EMAIL));
}
/************************************************************************
*
************************************************************************/
dump_ruchi(theDir)
char **theDir;
{
#define PUT_OUT(num) printf("$#$%s",escapeChars(FindValue(theDir,num)))
PUT_OUT(F_UNIVID);
PUT_OUT(F_NAME);
PUT_OUT(F_ALIAS);
PUT_OUT(F_EMAIL);
PUT_OUT(F_PHONE);
PUT_OUT(F_ADDRESS);
PUT_OUT(F_DEPARTMENT);
PUT_OUT(F_TITLE);
PUT_OUT(19); /* office location */
PUT_OUT(20); /* home address */
PUT_OUT(23); /* nickname */
PUT_OUT(22); /* office address */
PUT_OUT(32); /* office phone */
PUT_OUT(33); /* home phone */
putchar('\n');
}
/************************************************************************
*
************************************************************************/
dump_randy(theDir)
char **theDir;
{
printf("%s\t",escapeChars(FindValue(theDir,F_ALIAS)));
printf("%s\t",escapeChars(FindValue(theDir,F_NAME)));
printf("%s\t",escapeChars(FindValue(theDir,32)));
printf("%s\n",escapeChars(FindValue(theDir,F_EMAIL)));
}
/************************************************************************
*
************************************************************************/
dump_emdir(theDir)
char **theDir;
{
printf("%-25s %s@@uiuc.edu\n",FindValue(theDir,F_NAME),
FindValue(theDir,F_ALIAS));
}
/************************************************************************
*
************************************************************************/
dump_size(theDir)
char **theDir;
{
int size=0;
char **sp = theDir;
for (sp = theDir; *sp; sp++)
{
size += strlen(*sp);
size++;
}
printf("%d\n",size);
}
/************************************************************************
*
************************************************************************/
dump_all(theDir)
char **theDir;
{
char *colon;
printf("%d:%s",F_UNIVID,escapeChars(FindValue(theDir,F_UNIVID)));
for (; *theDir; theDir++)
if (atoi(*theDir)!=F_UNIVID && (colon=index(*theDir,':')) && colon[1])
{
putchar('\t');
fputs(escapeChars(*theDir),stdout);
}
putchar('\n');
}
/************************************************************************
*
************************************************************************/
dump_4merge(theDir)
char **theDir;
{
char *colon;
int f;
char *fdMerge;
int no_up = *FindValue(theDir,31); /* no_update */
FieldDesc *theFD;
printf("%d:%s",F_UNIVID,escapeChars(FindValue(theDir,F_UNIVID)));
for (; *theDir; theDir++)
{
f = atoi(*theDir);
if (f!=F_UNIVID && (colon=index(*theDir,':')) && colon[1])
{
if (theFD=FindFDI(f))
{
if (*theFD->fdMerge)
d475 13
a487 2
putchar('\t');
fputs(escapeChars(*theDir),stdout);
d489 1
a489 6
}
else
fprintf(stderr,"%s unknown field %d\n",FindValue(theDir,F_NAME),f);
}
}
putchar('\n');
d492 1
a492 1
/***********************************************************************
d494 2
a495 2
***********************************************************************/
char *
d497 1
a497 1
char *s;
d499 45
a543 55
register char *cp;
static char value[8192];
register char *vp;
vp = value;
for (cp=s; *cp; cp++)
if (*cp=='\t')
{
*vp++ = '\\';
*vp++ = 't';
}
else if (*cp=='\n')
{
*vp++ = '\\';
*vp++ = 'n';
}
else if (*cp=='\\')
{
*vp++ = '\\';
*vp++ = '\\';
}
else
*vp++ = *cp;
*vp = '\0';
return(value);
}
/***********************************************************************
* Free a dir structure (modified for mdump)
***********************************************************************/
MdumpFreeDir(Dir *dir)
{
char **p;
if (*dir)
{
for (p = *dir; *p; p++)
free(*p);
/*free(*dir);
*dir = 0;*/
}
}
sel_files(theDir)
char **theDir;
{
return(*FindValue(theDir,104));
}
dump_files(theDir)
char **theDir;
{
char *token;
for (token=strtok(FindValue(theDir,104)," \n\t,");token;token=strtok(NULL," \t\n,"))
puts(token);
d546 2
a547 2
dump_date(theDir)
char **theDir;
d549 4
a552 1
printf("%ld %s\n",CurrentDate(),FindValue(theDir,F_ALIAS));
d555 5
@
1.1
log
@Initial revision
@
text
@d24 1
d83 8
a90 3
for (argc--,argv++;argc && **argv=='-';argc--,argv++)
if (strcmp(*argv,"-p")) break;
else Progress = 1;
d93 1
a93 1
fprintf(stderr,"Usage: mdump [-p] <dump-type> [<database>]\n");
d136 2
a137 1
fprintf(stderr, "%d of %d selected, %d errors.\n", selected, count,
@