ING_DB
This commit is contained in:
parent
d1c174e06a
commit
9f30ec29eb
|
|
@ -0,0 +1,224 @@
|
||||||
|
# include <stdio.h>
|
||||||
|
# include "gen.h"
|
||||||
|
# include "../h/dbs.h"
|
||||||
|
# include "../h/aux.h"
|
||||||
|
# include "../h/access.h"
|
||||||
|
# include "../h/lock.h"
|
||||||
|
# include "../h/bs.h"
|
||||||
|
|
||||||
|
# ifdef P8000
|
||||||
|
ret_buf AAjmp_buf;
|
||||||
|
# else
|
||||||
|
jmp_buf AAjmp_buf;
|
||||||
|
# endif
|
||||||
|
|
||||||
|
extern char *AAusercode;
|
||||||
|
extern int AAdbstat;
|
||||||
|
extern char *AApath;
|
||||||
|
extern char *Parmvect[];
|
||||||
|
extern char *Flagvect[];
|
||||||
|
extern char *AAdbpath;
|
||||||
|
extern char *AAproc_name;
|
||||||
|
struct admin AAdmin;
|
||||||
|
char RMDIR[] = "rmdir";
|
||||||
|
|
||||||
|
/*
|
||||||
|
** DESTROY DATA BASE
|
||||||
|
**
|
||||||
|
** This program destroys an existing database. To be able
|
||||||
|
** to wield this awesome power, you must be the dba for
|
||||||
|
** the database. Also, anyone has this power if the admin
|
||||||
|
** the database, or the DBS superuser, and have the "-s"
|
||||||
|
** flag requested. If admin is trashed, the DBS superuser
|
||||||
|
** must either destroy the database or recover it.
|
||||||
|
**
|
||||||
|
** If -m is specified, then the directory is not removed.
|
||||||
|
** This is useful if the directory is a mounted file system.
|
||||||
|
*/
|
||||||
|
main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{
|
||||||
|
register int i;
|
||||||
|
register char *dbase;
|
||||||
|
register int iop;
|
||||||
|
register char *p;
|
||||||
|
int s_flag;
|
||||||
|
int mounted;
|
||||||
|
int indirect;
|
||||||
|
char dbdbuf[BUFSIZ];
|
||||||
|
char **av;
|
||||||
|
char *q;
|
||||||
|
extern char *AAztack();
|
||||||
|
# ifdef NON_V7_FS
|
||||||
|
extern char *read_dir();
|
||||||
|
# endif
|
||||||
|
|
||||||
|
AAproc_name = "DESTROYDB";
|
||||||
|
|
||||||
|
# ifdef xSTR1
|
||||||
|
AAtTrace(&argc, argv, 'X');
|
||||||
|
# endif
|
||||||
|
|
||||||
|
i = initucode(argc, argv, TRUE, (char *) 0, M_EXCL);
|
||||||
|
dbase = Parmvect[0];
|
||||||
|
switch (i)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
indirect = FALSE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 5:
|
||||||
|
indirect = TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
case 6:
|
||||||
|
AAsyserr(0, "Die Datenbank '%s' existiert nicht", dbase);
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
AAsyserr(0, "Sie duerfen auf die Datenbank '%s' nicht zugreifen", dbase);
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
AAsyserr(0, "Sie sind kein eingetragener DBS-Nutzer");
|
||||||
|
|
||||||
|
case 4:
|
||||||
|
printf("Sie haben keinen Datenbanknamen angegeben\n");
|
||||||
|
usage:
|
||||||
|
AAsyserr(0, "HINWEIS: destroydb [-s] [-m] db_name");
|
||||||
|
|
||||||
|
default:
|
||||||
|
AAsyserr(22200, AAproc_name, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
mounted = s_flag = 0;
|
||||||
|
for (av = Flagvect; p = *av; av++)
|
||||||
|
{
|
||||||
|
if (p[0] != '-')
|
||||||
|
{
|
||||||
|
badflag:
|
||||||
|
printf("Unbekanntes Flag '%s'\n", p);
|
||||||
|
goto usage;
|
||||||
|
}
|
||||||
|
switch (p[1])
|
||||||
|
{
|
||||||
|
case 's':
|
||||||
|
s_flag++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'M':
|
||||||
|
case 'm':
|
||||||
|
mounted++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
goto badflag;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Parmvect[1])
|
||||||
|
{
|
||||||
|
printf("Zu viele Argumente\n");
|
||||||
|
goto usage;
|
||||||
|
}
|
||||||
|
if (AAlength(dbase) > MAXNAME)
|
||||||
|
AAsyserr(0, "Unerlaubter Datenbankname '%s'", dbase);
|
||||||
|
|
||||||
|
if (s_flag)
|
||||||
|
{
|
||||||
|
if (!(AAdbstat & U_SUPER))
|
||||||
|
AAsyserr(0, "Sie duerfen das -s Flag nicht verwenden");
|
||||||
|
}
|
||||||
|
else if (!AAbequal(AAdmin.adhdr.adowner, AAusercode, 2))
|
||||||
|
AAsyserr(0, "Sie sind nicht der DBA der Datenbank '%s'", dbase);
|
||||||
|
|
||||||
|
if (chdir(AAdbpath) < 0)
|
||||||
|
AAsyserr(22201, AAproc_name, AAdbpath);
|
||||||
|
|
||||||
|
# ifdef NON_V7_FS
|
||||||
|
if (!open_dir("."))
|
||||||
|
AAsyserr(21050, AAdbpath);
|
||||||
|
while (dbase = read_dir())
|
||||||
|
{
|
||||||
|
/* throw out legitimate files */
|
||||||
|
if (AAsequal(dbase, ".") || AAsequal(dbase, ".."))
|
||||||
|
continue;
|
||||||
|
unlink(dbase);
|
||||||
|
}
|
||||||
|
close_dir();
|
||||||
|
# else
|
||||||
|
if ((iop = open(".", 0)) < 0)
|
||||||
|
AAsyserr(21050, AAdbpath);
|
||||||
|
clean(iop);
|
||||||
|
close(iop);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
if (indirect)
|
||||||
|
{
|
||||||
|
initdbpath((char *) 0, dbdbuf, FALSE);
|
||||||
|
unlink(AAztack(dbdbuf, dbase));
|
||||||
|
}
|
||||||
|
|
||||||
|
AAunldb();
|
||||||
|
fflush(stdout);
|
||||||
|
|
||||||
|
if (!mounted)
|
||||||
|
{
|
||||||
|
/* find end of AAdbpath and trim it off. */
|
||||||
|
for (p = q = AAdbpath; *p; p++)
|
||||||
|
if (*p == '/')
|
||||||
|
q = p;
|
||||||
|
*q++ = '\0';
|
||||||
|
if (chdir(AAdbpath) < 0)
|
||||||
|
AAsyserr(22201, AAproc_name, AAdbpath);
|
||||||
|
execlp(RMDIR, RMDIR, q, (char *) 0);
|
||||||
|
}
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ifndef NON_V7_FS
|
||||||
|
clean(f)
|
||||||
|
register int f;
|
||||||
|
{
|
||||||
|
struct direc
|
||||||
|
{
|
||||||
|
short inum;
|
||||||
|
char name[14];
|
||||||
|
char null;
|
||||||
|
};
|
||||||
|
struct direc cur;
|
||||||
|
extern long lseek();
|
||||||
|
|
||||||
|
cur.null = 0;
|
||||||
|
|
||||||
|
/* skip "." and ".." entries */
|
||||||
|
lseek(f, 32L, 0);
|
||||||
|
|
||||||
|
/* scan directory */
|
||||||
|
while (read(f, &cur, 16) == 16)
|
||||||
|
{
|
||||||
|
/* skip null entries */
|
||||||
|
if (!cur.inum)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
unlink(cur.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Rubout processing.
|
||||||
|
*/
|
||||||
|
rubproc()
|
||||||
|
{
|
||||||
|
AAunlall();
|
||||||
|
fflush(stdout);
|
||||||
|
exit(-2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AApageflush()
|
||||||
|
{
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue