ING_DB
This commit is contained in:
parent
3046bc250c
commit
d1c174e06a
|
|
@ -0,0 +1,117 @@
|
|||
# include <stdio.h>
|
||||
# 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() {}
|
||||
|
|
@ -0,0 +1,104 @@
|
|||
# include <stdio.h>
|
||||
# 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);
|
||||
}
|
||||
|
|
@ -0,0 +1,232 @@
|
|||
# include <stdio.h>
|
||||
# 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);
|
||||
}
|
||||
|
|
@ -0,0 +1,99 @@
|
|||
# include <stdio.h>
|
||||
# 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);
|
||||
}
|
||||
|
|
@ -0,0 +1,312 @@
|
|||
# include <stdio.h>
|
||||
# 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');
|
||||
}
|
||||
|
|
@ -0,0 +1,282 @@
|
|||
# include <stdio.h>
|
||||
# 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);
|
||||
}
|
||||
Loading…
Reference in New Issue