diff --git a/WEGA/contrib/ingres/dbs/src/support/copyr.c b/WEGA/contrib/ingres/dbs/src/support/copyr.c new file mode 100644 index 0000000..0d7d4fd --- /dev/null +++ b/WEGA/contrib/ingres/dbs/src/support/copyr.c @@ -0,0 +1,117 @@ +# include +# include "gen.h" +# include "../h/dbs.h" +# include "../h/aux.h" +# include "../h/access.h" +# include "../h/symbol.h" +# include "../h/lock.h" +# include "../h/bs.h" + +# ifdef P8000 +ret_buf AAjmp_buf; +# else +jmp_buf AAjmp_buf; +# endif + +int Noupdt; +extern char *Parmvect[]; +extern char *Flagvect[]; +extern char *AAdbpath; +extern char *AAproc_name; + +main(argc, argv) +int argc; +char *argv[]; +{ + register char **av; + register char *p; + register int i; + char null; + + AAproc_name = "COPYR"; + +# ifdef xSTR1 + AAtTrace(&argc, argv, 'X'); +# endif + + switch (i = initucode(argc, argv, TRUE, (char **) 0, M_SHARE)) + { + case 0: + case 5: + break; + + case 1: + case 6: + AAsyserr(0, "Die Datenbank `%s' existiert nicht", Parmvect[0]); + + case 2: + AAsyserr(0, "Sie duerfen auf die Datenbank `%s' nicht zugreifen", Parmvect[0]); + + case 3: + AAsyserr(0, "Sie sind kein eingetragener DBS-Nutzer"); + + case 4: + printf("Sie haben keinen Datenbanknamen angegeben\n"); +usage: + AAsyserr(0, "HINWEIS: copyr db_name rel_name {dom_name format} into|from file_name"); + + default: + AAsyserr(22200, AAproc_name, i); + } + + for (i = 0, av = Flagvect; p = *av; av++) + { + printf("Unbekanntes Flag `%s'\n", p); + i++; + } + + if (i) + goto usage; + + for (i = 0; Parmvect[i]; i++) + continue; + + if ((argc = i) < 4 || argc % 2) + goto usage; + + /* initialize access methods (and AAdmin struct) for user_ovrd test */ + AAam_start(); + opencatalog(AA_REL, 2); + + /* do function */ + for (i = 0; i < argc - 3; i++) + Parmvect[i] = Parmvect[i + 1]; + null = 0; + Parmvect[argc - 3] = &null; + copy(argc, Parmvect); + + /* logout database */ + closecatalog(TRUE); + AAunldb(); + AAam_exit(); + fflush(stdout); + exit(0); +} + + +char *AArelpath(rel) +register char *rel; +{ + extern char *AAztack(); + + return (AAztack(AAztack(AAdbpath, "/"), rel)); +} + + +rubproc() +{ + AAunlall(); + fflush(stdout); + exit(1); +} + + +/* substitution */ +fullwait() {} +fork() {} +pipe() {} diff --git a/WEGA/contrib/ingres/dbs/src/support/destroyr.c b/WEGA/contrib/ingres/dbs/src/support/destroyr.c new file mode 100644 index 0000000..eb25478 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/src/support/destroyr.c @@ -0,0 +1,104 @@ +# include +# include "gen.h" +# include "../h/dbs.h" +# include "../h/aux.h" +# include "../h/access.h" +# include "../h/symbol.h" +# include "../h/lock.h" +# include "../h/bs.h" + +# ifdef P8000 +ret_buf AAjmp_buf; +# else +jmp_buf AAjmp_buf; +# endif + +extern char *Parmvect[]; +extern char *Flagvect[]; +extern char *AAdbpath; +extern int Standalone; + +main(argc, argv) +int argc; +char *argv[]; +{ + register char **av; + register char *p; + register int i; + extern char *AAproc_name; + + AAproc_name = "DESTROYR"; + +# ifdef xSTR1 + AAtTrace(&argc, argv, 'X'); +# endif + + switch (i = initucode(argc, argv, TRUE, (char **) 0, M_SHARE)) + { + case 0: + case 5: + break; + + case 1: + case 6: + AAsyserr(0, "Die Datenbank `%s' existiert nicht", Parmvect[0]); + + case 2: + AAsyserr(0, "Sie duerfen auf die Datenbank `%s' nicht zugreifen", Parmvect[0]); + + case 3: + AAsyserr(0, "Sie sind kein eingetragener DBS-Nutzer"); + + case 4: + printf("Sie haben keinen Datenbanknamen angegeben\n"); +usage: + AAsyserr(0, "HINWEIS: destroyr db_name {rel_name}"); + + default: + AAsyserr(22200, AAproc_name, i); + } + + for (i = 0, av = Flagvect; p = *av; av++) + { + printf("Unbekanntes Flag `%s'\n", p); + i++; + } + + if (i) + goto usage; + + for (i = 0; Parmvect[i]; i++) + continue; + + if ((argc = i) < 2) + goto usage; + + if (chdir(AAdbpath) < 0) + AAsyserr(22201, AAproc_name, AAdbpath); + + /* hello eric */ + Standalone = 0; + + /* initialize access methods (and AAdmin struct) for user_ovrd test */ + AAam_start(); + opencatalog(AA_REL, 2); + + /* do function */ + Parmvect[argc] = (char *) -1; + destroy(--argc, &Parmvect[1]); + + /* logout database */ + closecatalog(TRUE); + AAunldb(); + AAam_exit(); + fflush(stdout); + exit(0); +} + + +rubproc() +{ + AAunlall(); + fflush(stdout); + exit(1); +} diff --git a/WEGA/contrib/ingres/dbs/src/support/indexr.c b/WEGA/contrib/ingres/dbs/src/support/indexr.c new file mode 100644 index 0000000..9ed9340 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/src/support/indexr.c @@ -0,0 +1,232 @@ +# include +# include "gen.h" +# include "../h/dbs.h" +# include "../h/aux.h" +# include "../h/access.h" +# include "../h/batch.h" +# include "../h/symbol.h" +# include "../h/lock.h" +# include "../h/bs.h" + +# ifdef P8000 +ret_buf AAjmp_buf; +# else +jmp_buf AAjmp_buf; +# endif + +char KSORT[] = "/sys/bin/dbu___s"; + +char SYSNAME[] = "_SYS"; +int s_SYSNAME = sizeof SYSNAME - 1; +char *Fileset; +char *Ksort; +char **Xparams = &Ksort; +int Noupdt; +int Where; +char *Fillflag; +char *Fillfactor; +char *Minflag; +char *Minpages; +char *Maxflag; +char *Maxpages; +char *Storage_structure = "isam"; +int Tidp; +struct batchbuf Batchbuf; +extern char *Parmvect[]; +extern char *Flagvect[]; +extern char *AAdbpath; +extern char *AApath; +extern char *AAproc_name; + +main(argc, argv) +int argc; +char *argv[]; +{ + register char **av; + register char *p; + register int i; + char null; + char ksort[100]; + char fileset[6]; + + AAproc_name = "INDEXR"; + +# ifdef xSTR1 + AAtTrace(&argc, argv, 'X'); +# endif + + switch (i = initucode(argc, argv, TRUE, (char **) 0, M_SHARE)) + { + case 0: + case 5: + break; + + case 1: + case 6: + AAsyserr(0, "Die Datenbank '%s' existiert nicht", Parmvect[0]); + + case 2: + AAsyserr(0, "Sie duerfen auf die Datenbank '%s' nicht zugreifen", Parmvect[0]); + + case 3: + AAsyserr(0, "Sie sind kein eingetragener DBS-Nutzer"); + + case 4: + printf("Sie haben keinen Datenbanknamen angegeben\n"); +usage: + AAsyserr(0, "HINWEIS: indexr db_name prim_rel index_rel {dom_name}"); + + default: + AAsyserr(22200, AAproc_name, i); + } + + for (i = 0, av = Flagvect; p = *av; av++) + { + if (*p == '-') + { + if (where_flag(p + 1)) + continue; + + switch (p[1]) + { + case 'N': + case 'n': + Storage_structure = &p[2]; + continue; + + case 'T': + case 't': + Tidp++; + continue; + } + } + + printf("Unbekanntes Flag '%s'\n", p); + i++; + } + + if (i) + goto usage; + + for (i = 0; Parmvect[i]; i++) + continue; + + if ((argc = i) < 4 || argc > 9) + goto usage; + + if (chdir(AAdbpath) < 0) + AAsyserr(22201, AAproc_name, AAdbpath); + + /* initialize access methods (and AAdmin struct) for user_ovrd test */ + AAam_start(); + opencatalog(AA_REL, 2); + + /* do function index */ + if (sec_index(argc - 1, &Parmvect[1])) + goto no_modify; + + /* do function modify */ + AA_itoa(getpid(), Fileset = fileset); + AAconcat(AApath, KSORT, ksort); + Ksort = ksort; + Parmvect[0] = Parmvect[2]; + Parmvect[1] = Storage_structure; + Parmvect[2] = "name"; + if (Tidp) + Parmvect[argc++] = "tidp"; + if (Where) + { + i = argc; + null = 0; + Parmvect[i++] = &null; + if (Fillflag) + { + Parmvect[i++] = Fillflag; + Parmvect[i++] = Fillfactor; + } + if (Minflag) + { + Parmvect[i++] = Minflag; + Parmvect[i++] = Minpages; + } + if (Maxflag) + { + Parmvect[i++] = Maxflag; + Parmvect[i++] = Maxpages; + } + argc = i; + } + Parmvect[argc] = (char *) -1; + Parmvect[argc + 1] = (char *) 0; + modify(argc, Parmvect); + +no_modify: + /* logout database */ + closecatalog(TRUE); + AAunldb(); + AAam_exit(); + fflush(stdout); + exit(0); +} + + +where_flag(flag) +register char *flag; +{ + register char *f; + long i; + + for (f = flag; *f && *f != ':'; f++) + continue; + + if (!*f) + return (0); + + *f++ = 0; + + if ((AAsequal(flag, "fillfactor") +# ifdef ESER + || AAsequal(flag, "FILLFACTOR") +# endif + ) && !AA_atol(f, &i)) + { + Fillflag = flag; + Fillfactor = f; + goto flag_ok; + } + + if ((AAsequal(flag, "minpages") +# ifdef ESER + || AAsequal(flag, "MINPAGES") +# endif + ) && !AA_atol(f, &i)) + { + Minflag = flag; + Minpages = f; + goto flag_ok; + } + + if ((AAsequal(flag, "maxpages") +# ifdef ESER + || AAsequal(flag, "MAXPAGES") +# endif + ) && !AA_atol(f, &i)) + { + Maxflag = flag; + Maxpages = f; +flag_ok: + Where++; + return (1); + } + + *--f = ':'; + return (0); +} + + +rubproc() +{ + AAunlall(); + fflush(stdout); + exit(1); +} diff --git a/WEGA/contrib/ingres/dbs/src/support/saver.c b/WEGA/contrib/ingres/dbs/src/support/saver.c new file mode 100644 index 0000000..f02b5a6 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/src/support/saver.c @@ -0,0 +1,99 @@ +# include +# include "gen.h" +# include "../h/dbs.h" +# include "../h/aux.h" +# include "../h/access.h" +# include "../h/symbol.h" +# include "../h/lock.h" +# include "../h/bs.h" + +# ifdef P8000 +ret_buf AAjmp_buf; +# else +jmp_buf AAjmp_buf; +# endif + +extern char *Parmvect[]; +extern char *Flagvect[]; +extern char *AAdbpath; + +main(argc, argv) +int argc; +char *argv[]; +{ + register char **av; + register char *p; + register int i; + extern char *AAproc_name; + + AAproc_name = "SAVER"; + +# ifdef xSTR1 + AAtTrace(&argc, argv, 'X'); +# endif + + switch (i = initucode(argc, argv, TRUE, (char **) 0, M_SHARE)) + { + case 0: + case 5: + break; + + case 1: + case 6: + AAsyserr(0, "Die Datenbank `%s' existiert nicht", Parmvect[0]); + + case 2: + AAsyserr(0, "Sie duerfen auf die Datenbank `%s' nicht zugreifen", Parmvect[0]); + + case 3: + AAsyserr(0, "Sie sind kein eingetragener DBS-Nutzer"); + + case 4: + printf("Sie haben keinen Datenbanknamen angegeben\n"); +usage: + AAsyserr(0, "HINWEIS: saver db_name rel_name month day year"); + + default: + AAsyserr(22200, AAproc_name, i); + } + + for (i = 0, av = Flagvect; p = *av; av++) + { + printf("Unbekanntes Flag `%s'\n", p); + i++; + } + + if (i) + goto usage; + + for (i = 0; Parmvect[i]; i++) + continue; + + if ((argc = i) != 5) + goto usage; + + if (chdir(AAdbpath) < 0) + AAsyserr(22201, AAproc_name, AAdbpath); + + /* initialize access methods (and AAdmin struct) for user_ovrd test */ + AAam_start(); + opencatalog(AA_REL, 0); + + /* do function */ + save(argc - 1, &Parmvect[1]); + + /* logout database */ + closecatalog(TRUE); + AAunldb(); + AAam_exit(); + fflush(stdout); + exit(0); +} + + +rubproc() +{ + AAunlall(); + fflush(stdout); + exit(1); +} diff --git a/WEGA/contrib/ingres/dbs/src/support/subs.c b/WEGA/contrib/ingres/dbs/src/support/subs.c new file mode 100644 index 0000000..9e731ae --- /dev/null +++ b/WEGA/contrib/ingres/dbs/src/support/subs.c @@ -0,0 +1,312 @@ +# include +# include "gen.h" +# include "../h/dbs.h" +# include "../h/aux.h" +# include "../h/access.h" +# include "../h/lock.h" + +/* +** These are subroutines common to RESTORE and PURGE. +*/ + +char All; +char Qrymod; +char Superuser; +char Ask; +char Purge; +char No_purge; +char No_sysmod; +char Clean; +char Lastflag; + +struct directory +{ +# ifndef NON_V7_FS + short inumber; +# endif + char fname[MAXNAME + 3]; +}; + +# ifndef NON_V7_FS +int Direc_fd; +# endif + +extern int AAdbstat; +extern char *AAusercode; +char **Dblist; + +/* +** INITIALIZE GLOBALS +** +** Set up AAusercode and AAdbstat +*/ +initialize(argc, argv) +int argc; +char **argv; +{ + register int i; + register char *p; + register char **av; + char datadir[MAXLINE]; + extern char *AAproc_name; + extern char *Flagvect[]; + extern char *Parmvect[]; + extern long lseek(); + + AAproc_name = "INITIALIZE"; + +# ifdef xSTR2 + AAtTfp(40, 0, "entered initialize\n"); +# endif + + i = initucode(argc, argv, FALSE, (char *) 0, -1); + +# ifdef xSTR2 + AAtTfp(40, 1, "initucode ret:%d\n", i); +# endif + + switch (i) + { + case 0: + break; + + case 3: + AAsyserr(0, "Sie sind kein eingetragener DBS-Nutzer"); + + default: + AAsyserr(22200, AAproc_name, i); + } + initdbpath((char *) 0, datadir, FALSE); + +# ifdef xSTR2 + AAtTfp(40, 2, "scanning flags\n"); +# endif + for (av = Flagvect; *av; av++) + { + p = *av; + if (p[0] != '-') + { +badflag: + AAsyserr(0, "Unbekanntes Flag %s", p); + } + switch (p[1]) + { + case 'A': + case 'a': + Ask++; + break; + + case 'f': + Clean++; + break; + + case 'p': + Purge++; + break; + + case 'P': + No_purge++; + break; + + case 's': + if (sucheck()) + Superuser++; + else + AAsyserr(0, "Sie duerfen das -s Flag nicht verwenden"); + break; + + case 'S': + No_sysmod++; + break; + + default: + goto badflag; + } + } + Dblist = Parmvect; + if (!*Dblist) + { +# ifdef xSTR2 + AAtTfp(40, 3, "doing all\n"); +# endif + All++; +# ifdef NON_V7_FS + if (!open_dir(datadir)) + AAsyserr(21131); +# else + if ((Direc_fd = open(datadir, 0)) < 0) + AAsyserr(21131); + lseek(Direc_fd, 32L, 0); +# endif + } +# ifdef xSTR2 + AAtTfp(40, 0, "leaving initialize\n"); +# endif + + return (0); +} + + +/* +** CHECK FOR SUPERUSER +** +** The user has requested the -s flag. Can he do it? Will Martha +** recover from cancer? Will Dick get the girl? Stay tuned for +** "sucheck". +** +** Permission is based on the U_SUPER bit in the status field +** in the AA_USERS. +*/ +sucheck() +{ + return (AAdbstat & U_SUPER); +} + + +/* +** GET NEXT DATABASE +** +** The next database to be purged is selected. It comes from +** either the directory or the database list. +** +** Getnxtdb() leaves the user in the database directory. +*/ +char *getnxtdb() +{ +# ifdef NON_V7_FS + extern char *read_dir(); +# endif + static struct directory buf; + register char *db; + register int admin_fd; + register int i; + extern struct admin AAdmin; + static char dbpbuf[MAXLINE]; + +# ifdef xSTR2 + AAtTfp(41, 0, "entered getnxtdb\n"); +# endif + + for ( ; ; ) + { + if (All) + { +# ifdef NON_V7_FS + if (db = read_dir()) + { + /* throw out legitimate files */ + if (AAsequal(db, ".") || AAsequal(db, "..")) + continue; + AAbmove(db, buf.fname, MAXNAME + 2); + db = buf.fname; + } +# else + if ((i = read(Direc_fd, &buf, 16)) < 16) + db = (char *) 0; + else + { + if (!buf.inumber) + continue; + db = buf.fname; + } +# endif + buf.fname[MAXNAME + 2] = 0; + } + else + db = *Dblist++; + if (!db) + { +# ifdef NON_V7_FS + close_dir(); +# else + if (Direc_fd); + close(Direc_fd); +# endif + return ((char *) 0); + } + +# ifdef xSTR2 + AAtTfp(41, 1, "using %s as Database\n", db); +# endif + + i = initdbpath(db, dbpbuf, TRUE); +# ifdef xSTR2 + AAtTfp(41, 3, "INITDBPATH: ret %d, %s\n", i, dbpbuf); +# endif + switch (i) + { + case 0: + case 1: + break; + + case 2: + case 3: + printf("Die Datenbank %s existiert nicht\n", db); + continue; + + default: + AAsyserr(21132, i); + } + if (chdir(dbpbuf) < 0) + { + printf("Fehler bei cd %s.", dbpbuf); + continue; + } +# ifdef xSTR2 + AAtTfp(41, 4, "chdir ok, Superuser: %d\n", Superuser); +# endif + if ((admin_fd = open(AA_ADMIN, 0)) < 0) + { + printf("Fehler beim Eroeffnen des DBA file %s/admin\n", dbpbuf); + continue; + } + read(admin_fd, &AAdmin.adhdr, sizeof AAdmin.adhdr); + close(admin_fd); +# ifdef xSTR2 + AAtTfp(41, 5, "dba: %.2s\n", AAdmin.adhdr.adowner); +# endif + + /* set qrymod flag from database status */ + Qrymod = ((AAdmin.adhdr.adflags & A_QRYMOD) == A_QRYMOD); + + /* check for dba of database if not superuser */ + if (Superuser || AAbequal(AAdmin.adhdr.adowner, AAusercode, 2)) + break; + + /* + ** not DBA isn't an error if running in all mode since user + ** couln't have specified the database + */ + if (All) + continue; + printf("Sie sind nicht der DBA der Datenbank %s\n", db); + } +# ifdef xSTR2 + AAtTfp(41, 6, "leaving getnxtdb, %s ok\n", db); +# endif + return (db); +} + + +/* +** ASK +** If Ask is set desplay prompt and look for 'y' and return TRUE +** If Ask is not set return TRUE +*/ +ask(prompt) +register char *prompt; +{ + char line[MAXLINE]; + extern char Ask; + extern char *fgetline(); + + if (!Ask) + return (TRUE); + + printf("**\t\t%s ? *\b", prompt); + + if (!fgetline(line, MAXLINE, stdin)) + AAsyserr(21133); + + return (line[0] == 'y'); +} diff --git a/WEGA/contrib/ingres/dbs/src/support/sysmod.c b/WEGA/contrib/ingres/dbs/src/support/sysmod.c new file mode 100644 index 0000000..75f6d61 --- /dev/null +++ b/WEGA/contrib/ingres/dbs/src/support/sysmod.c @@ -0,0 +1,282 @@ +# include +# include "gen.h" +# include "../h/dbs.h" +# include "../h/aux.h" +# include "../h/lock.h" +# include "../h/access.h" +# include "../h/batch.h" +# include "../h/bs.h" + +# ifdef P8000 +ret_buf AAjmp_buf; +# else +jmp_buf AAjmp_buf; +# endif + +extern int AAdbstat; + +short Qrymod; +char *Fileset; +int Noupdt = FALSE; +char *Dummy; +char **Xparams = &Dummy; +struct batchbuf Batchbuf; +char Header[] = "**\t\t"; + +char KSORT[] = "/sys/bin/dbu___s"; + +struct modtabl +{ + char *rname; + char **parvec; + short qmcatalogs; + short goahead; + short normgo; + short optn; +}; + +char *Relpar[] = +{ + AA_REL, + "hash", + "name", + "relid", + (char *) -1 +}; + +char *Attpar[] = +{ + AA_ATT, + "hash", + "name", + "attrelid", "attowner", "#attid", + (char *) -1 +}; + +char *Indpar[] = +{ + AA_INDEX, + "hash", + "name", + "irelidp", "iownerp", + "", + "minpages", "5", + (char *) -1 +}; + +char *Trepar[] = +{ + AA_TREE, + "hash", + "name", + "treerelid", "treeowner", "treetype", + (char *) -1 +}; + +char *Propar[] = +{ + AA_PROTECT, + "hash", + "name", + "prorelid", "proowner", + "", + "minpages", "5", + (char *) -1 +}; + +char *Intpar[] = +{ + AA_INTEG, + "hash", + "name", + "intrelid", "intrelowner", + "", + "minpages", "5", + (char *) -1 +}; + +char *Refpar[] = +{ + AA_REF, + "hash", + "name", + "refrelid", "refowner", "reftype", + "", + "minpages", "5", + (char *) -1 +}; + +struct modtabl Modtabl[] = +{ + AA_REL, Relpar, FALSE, FALSE, TRUE, FALSE, + AA_ATT, Attpar, FALSE, FALSE, TRUE, FALSE, + AA_INDEX, Indpar, FALSE, FALSE, TRUE, FALSE, + AA_TREE, Trepar, TRUE, FALSE, TRUE, TRUE, + AA_PROTECT, Propar, TRUE, FALSE, TRUE, TRUE, + AA_INTEG, Intpar, TRUE, FALSE, TRUE, TRUE, + AA_REF, Refpar, TRUE, FALSE, TRUE, TRUE, + (char *) 0 +}; + +/* +** SYSMOD -- Modify system catalogs to a predetermined +** storage structure with predetermined keys. +*/ +main(argc, argv) +int argc; +char *argv[]; +{ + register int i; + register int j; + register char **av; + register char *p; + register int retval; + register int superuser; + char fileset[10]; + char proctab[100]; + extern char *Parmvect[]; + extern char *Flagvect[]; + extern char *AAdbpath; + extern char *AApath; + extern char *AAproc_name; + + AAproc_name = "SYSMOD"; + +# ifdef xSTR1 + AAtTrace(&argc, argv, 'X'); +# endif + + AA_itoa(getpid(), fileset); + Fileset = fileset; + i = initucode(argc, argv, TRUE, (char *) 0, M_EXCL); + printf("Datenbank %s\n", Parmvect[0]); + switch (i) + { + case 0: + case 5: + break; + + case 1: + case 6: + AAsyserr(0, "Die Datenbank %s existiert nicht", Parmvect[0]); + + case 2: + AAsyserr(0, "Sie duerfen auf die Datenbank %s nicht zugreifen", Parmvect[0]); + + case 3: + AAsyserr(0, "Sie sind kein eingetragener DBS-Nutzer"); + + case 4: + printf("Sie haben keinen Datenbanknamen angegeben\n"); + usage: + AAsyserr(0, "HINWEIS: sysmod [-s] [+-w] db_name {relation ...}"); + + default: + AAsyserr(22200, AAproc_name, i); + } + + AAconcat(AApath, KSORT, proctab); + Dummy = proctab; + + superuser = FALSE; + for (av = Flagvect; p = *av; av++) + { + if (p[0] != '-') + { + badflag: + printf("Unbekanntes Flag %s\n", p); + goto usage; + } + switch (p[1]) + { + case 's': + if (!(AAdbstat & U_SUPER)) + AAsyserr(0, "Sie duerfen das -s Flag nicht verwenden"); + superuser = TRUE; + break; + + default: + goto badflag; + } + } + if (chdir(AAdbpath) < 0) + AAsyserr(0, "Die Datenbank %s existiert nicht", Parmvect[0]); + if (superuser) + AAbmove(AAdmin.adhdr.adowner, AAusercode, 2); + if (!AAbequal(AAusercode, AAdmin.adhdr.adowner, 2)) + AAsyserr(0, "Sie sind nicht der DBA der Datenbank %s", Parmvect[0]); + + Qrymod = ((AAdmin.adhdr.adflags & A_QRYMOD) == A_QRYMOD); + +/* +** if there are any arguments, verify that they are valid +** names of relations which can be modified by this program. +** if there are no arguments, assume all system relations are to be +** modified. +*/ + if (Parmvect[1]) + if (!(Parmvect[2]) && AAsequal(Parmvect[1], "all")) + for (i = 0; Modtabl[i].rname; i++) + Modtabl[i].goahead = TRUE; + else + for (av = &Parmvect[1]; p = *av; av++) + { + for (j = 0; Modtabl[j].rname; j++) + { + if (!AAscompare(p, MAXNAME, Modtabl[j].rname, MAXNAME)) + { + if (Modtabl[j].goahead) + AAsyserr(0, "Doppelt angegebener Relationsname %s", p); + Modtabl[j].goahead = TRUE; + break; + } + } + if (!Modtabl[j].rname) + AAsyserr(0, "%s ist kein Katalogname", p); + } + else + for (i = 0; Modtabl[i].rname; i++) + Modtabl[i].goahead = Modtabl[i].normgo; + for (i = 0; Modtabl[i].rname; i++) + { + if (!Modtabl[i].goahead || optn_rel(&Modtabl[i])) + continue; + + if (!Qrymod && Modtabl[i].qmcatalogs) + continue; + + printf("%sKatalog %s\n", Header, Modtabl[i].rname); + av = Modtabl[i].parvec + 3; + j = 0; + while (*av != (char *) -1) + { + j++; + av++; + } + j += 3; + AAsmove(Fileset, Batchbuf.file_id); + if (retval = modify(j, Modtabl[i].parvec)) + AAsyserr(0, "%sFehlernummer *%d*", Header, retval); + } + AAunldb(); + fflush(stdout); + exit(0); +} + + +optn_rel(m) +register struct modtabl *m; +{ + DESC des; + + return (m->optn & AArelopen(&des, -1, m->rname)); +} + + +rubproc() +{ + printf("%sSYSMOD interrupted\n", Header); + AAunlall(); + fflush(stdout); + exit(1); +}